Home | History | Annotate | Line # | Download | only in hx509
      1 #!/bin/sh
      2 #
      3 # Copyright (c) 2006 - 2007 Kungliga Tekniska Hgskolan
      4 # (Royal Institute of Technology, Stockholm, Sweden). 
      5 # All rights reserved. 
      6 #
      7 # Redistribution and use in source and binary forms, with or without 
      8 # modification, are permitted provided that the following conditions 
      9 # are met: 
     10 #
     11 # 1. Redistributions of source code must retain the above copyright 
     12 #    notice, this list of conditions and the following disclaimer. 
     13 #
     14 # 2. Redistributions in binary form must reproduce the above copyright 
     15 #    notice, this list of conditions and the following disclaimer in the 
     16 #    documentation and/or other materials provided with the distribution. 
     17 #
     18 # 3. Neither the name of the Institute nor the names of its contributors 
     19 #    may be used to endorse or promote products derived from this software 
     20 #    without specific prior written permission. 
     21 #
     22 # THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 
     23 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
     24 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
     25 # ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 
     26 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
     27 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
     28 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
     29 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
     30 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
     31 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
     32 # SUCH DAMAGE. 
     33 #
     34 # Id
     35 #
     36 
     37 srcdir="@srcdir@"
     38 objdir="@objdir@"
     39 
     40 stat="--statistic-file=${objdir}/statfile"
     41 
     42 hxtool="${TESTS_ENVIRONMENT} ./hxtool ${stat}"
     43 
     44 if ${hxtool} info | grep 'rsa: hcrypto null RSA' > /dev/null ; then
     45     exit 77
     46 fi
     47 if ${hxtool} info | grep 'rand: not available' > /dev/null ; then
     48     exit 77
     49 fi
     50 
     51 echo "create certificate request"
     52 ${hxtool} request-create \
     53 	 --subject="CN=Love,DC=it,DC=su,DC=se" \
     54 	 --key=FILE:$srcdir/data/key.der \
     55 	 pkcs10-request.der || exit 1
     56 
     57 echo "issue certificate"
     58 ${hxtool} issue-certificate \
     59 	  --ca-certificate=FILE:$srcdir/data/ca.crt,$srcdir/data/ca.key \
     60 	  --subject="cn=foo" \
     61 	  --req="PKCS10:pkcs10-request.der" \
     62 	  --certificate="FILE:cert-ee.pem" || exit 1
     63 
     64 echo "verify certificate"
     65 ${hxtool} verify --missing-revoke \
     66 	cert:FILE:cert-ee.pem \
     67 	anchor:FILE:$srcdir/data/ca.crt > /dev/null || exit 1
     68 
     69 echo "issue crl (no cert)"
     70 ${hxtool} crl-sign \
     71 	--crl-file=crl.crl \
     72 	--signer=FILE:$srcdir/data/ca.crt,$srcdir/data/ca.key || exit 1
     73 
     74 echo "verify certificate (with CRL)"
     75 ${hxtool} verify \
     76 	cert:FILE:cert-ee.pem \
     77 	crl:FILE:crl.crl \
     78 	anchor:FILE:$srcdir/data/ca.crt > /dev/null || exit 1
     79 
     80 echo "issue crl (with cert)"
     81 ${hxtool} crl-sign \
     82 	--crl-file=crl.crl \
     83 	--signer=FILE:$srcdir/data/ca.crt,$srcdir/data/ca.key \
     84 	FILE:cert-ee.pem || exit 1
     85 
     86 echo "verify certificate (included in CRL)"
     87 ${hxtool} verify \
     88 	cert:FILE:cert-ee.pem \
     89 	crl:FILE:crl.crl \
     90 	anchor:FILE:$srcdir/data/ca.crt > /dev/null && exit 1
     91 
     92 echo "issue crl (with cert)"
     93 ${hxtool} crl-sign \
     94 	--crl-file=crl.crl \
     95 	--lifetime='1 month' \
     96 	--signer=FILE:$srcdir/data/ca.crt,$srcdir/data/ca.key \
     97 	FILE:cert-ee.pem || exit 1
     98 
     99 echo "verify certificate (included in CRL, and lifetime 1 month)"
    100 ${hxtool} verify \
    101 	cert:FILE:cert-ee.pem \
    102 	crl:FILE:crl.crl \
    103 	anchor:FILE:$srcdir/data/ca.crt > /dev/null && exit 1
    104 
    105 echo "issue certificate (10years 1 month)"
    106 ${hxtool} issue-certificate \
    107 	  --ca-certificate=FILE:$srcdir/data/ca.crt,$srcdir/data/ca.key \
    108 	  --subject="cn=foo" \
    109           --lifetime="10years 1 month" \
    110 	  --req="PKCS10:pkcs10-request.der" \
    111 	  --certificate="FILE:cert-ee.pem" || exit 1
    112 
    113 echo "issue certificate (with https ekus)"
    114 ${hxtool} issue-certificate \
    115 	  --ca-certificate=FILE:$srcdir/data/ca.crt,$srcdir/data/ca.key \
    116 	  --subject="cn=foo" \
    117 	  --type="https-server" \
    118 	  --type="https-client" \
    119 	  --req="PKCS10:pkcs10-request.der" \
    120 	  --certificate="FILE:cert-ee.pem" || exit 1
    121 
    122 echo "issue certificate (pkinit KDC)"
    123 ${hxtool} issue-certificate \
    124 	  --ca-certificate=FILE:$srcdir/data/ca.crt,$srcdir/data/ca.key \
    125 	  --subject="cn=foo" \
    126 	  --type="pkinit-kdc" \
    127           --pk-init-principal="krbtgt/TEST.H5L.SE@TEST.H5L.SE" \
    128 	  --req="PKCS10:pkcs10-request.der" \
    129 	  --certificate="FILE:cert-ee.pem" || exit 1
    130 
    131 echo "issue certificate (pkinit client)"
    132 ${hxtool} issue-certificate \
    133 	  --ca-certificate=FILE:$srcdir/data/ca.crt,$srcdir/data/ca.key \
    134 	  --subject="cn=foo" \
    135 	  --type="pkinit-client" \
    136           --pk-init-principal="lha (at] TEST.H5L.SE" \
    137 	  --req="PKCS10:pkcs10-request.der" \
    138 	  --certificate="FILE:cert-ee.pem" || exit 1
    139 
    140 echo "issue certificate (hostnames)"
    141 ${hxtool} issue-certificate \
    142 	  --ca-certificate=FILE:$srcdir/data/ca.crt,$srcdir/data/ca.key \
    143 	  --subject="cn=foo" \
    144 	  --type="https-server" \
    145           --hostname="www.test.h5l.se" \
    146           --hostname="ftp.test.h5l.se" \
    147 	  --req="PKCS10:pkcs10-request.der" \
    148 	  --certificate="FILE:cert-ee.pem" || exit 1
    149 
    150 echo "verify certificate hostname (ok)"
    151 ${hxtool} verify --missing-revoke \
    152 	--hostname=www.test.h5l.se \
    153 	cert:FILE:cert-ee.pem \
    154 	anchor:FILE:$srcdir/data/ca.crt > /dev/null || exit 1
    155 
    156 echo "verify certificate hostname (fail)"
    157 ${hxtool} verify --missing-revoke \
    158 	--hostname=www2.test.h5l.se \
    159 	cert:FILE:cert-ee.pem \
    160 	anchor:FILE:$srcdir/data/ca.crt > /dev/null && exit 1
    161 
    162 echo "verify certificate hostname (fail)"
    163 ${hxtool} verify --missing-revoke \
    164 	--hostname=2www.test.h5l.se \
    165 	cert:FILE:cert-ee.pem \
    166 	anchor:FILE:$srcdir/data/ca.crt > /dev/null && exit 1
    167 
    168 echo "issue certificate (hostname in CN)"
    169 ${hxtool} issue-certificate \
    170 	  --ca-certificate=FILE:$srcdir/data/ca.crt,$srcdir/data/ca.key \
    171 	  --subject="cn=www.test.h5l.se" \
    172 	  --type="https-server" \
    173 	  --req="PKCS10:pkcs10-request.der" \
    174 	  --certificate="FILE:cert-ee.pem" || exit 1
    175 
    176 echo "verify certificate hostname (ok)"
    177 ${hxtool} verify --missing-revoke \
    178 	--hostname=www.test.h5l.se \
    179 	cert:FILE:cert-ee.pem \
    180 	anchor:FILE:$srcdir/data/ca.crt > /dev/null || exit 1
    181 
    182 echo "verify certificate hostname (fail)"
    183 ${hxtool} verify --missing-revoke \
    184 	--hostname=www2.test.h5l.se \
    185 	cert:FILE:cert-ee.pem \
    186 	anchor:FILE:$srcdir/data/ca.crt > /dev/null && exit 1
    187 
    188 echo "issue certificate (email)"
    189 ${hxtool} issue-certificate \
    190 	  --ca-certificate=FILE:$srcdir/data/ca.crt,$srcdir/data/ca.key \
    191 	  --subject="cn=foo" \
    192           --email="lha (at] test.h5l.se" \
    193           --email="test (at] test.h5l.se" \
    194 	  --req="PKCS10:pkcs10-request.der" \
    195 	  --certificate="FILE:cert-ee.pem" || exit 1
    196 
    197 echo "issue certificate (email, null subject DN)"
    198 ${hxtool} issue-certificate \
    199 	  --ca-certificate=FILE:$srcdir/data/ca.crt,$srcdir/data/ca.key \
    200 	  --subject="" \
    201           --email="lha (at] test.h5l.se" \
    202 	  --req="PKCS10:pkcs10-request.der" \
    203 	  --certificate="FILE:cert-null.pem" || exit 1
    204 
    205 echo "issue certificate (jabber)"
    206 ${hxtool} issue-certificate \
    207 	  --ca-certificate=FILE:$srcdir/data/ca.crt,$srcdir/data/ca.key \
    208 	  --subject="cn=foo" \
    209           --jid="lha (at] test.h5l.se" \
    210 	  --req="PKCS10:pkcs10-request.der" \
    211 	  --certificate="FILE:cert-ee.pem" || exit 1
    212 
    213 echo "issue self-signed cert"
    214 ${hxtool} issue-certificate \
    215 	  --self-signed \
    216 	  --ca-private-key=FILE:$srcdir/data/key.der \
    217 	  --subject="cn=test" \
    218 	  --certificate="FILE:cert-ee.pem" || exit 1
    219 
    220 echo "issue ca cert"
    221 ${hxtool} issue-certificate \
    222 	  --ca-certificate=FILE:$srcdir/data/ca.crt,$srcdir/data/ca.key \
    223 	  --issue-ca \
    224 	  --subject="cn=ca-cert" \
    225 	  --req="PKCS10:pkcs10-request.der" \
    226 	  --certificate="FILE:cert-ca.der" || exit 1
    227 
    228 echo "issue self-signed ca cert"
    229 ${hxtool} issue-certificate \
    230 	  --self-signed \
    231 	  --issue-ca \
    232 	  --ca-private-key=FILE:$srcdir/data/key.der \
    233 	  --subject="cn=ca-root" \
    234 	  --certificate="FILE:cert-ca.der" || exit 1
    235 
    236 echo "issue proxy certificate"
    237 ${hxtool} issue-certificate \
    238 	  --ca-certificate=FILE:$srcdir/data/test.crt,$srcdir/data/test.key \
    239 	  --issue-proxy \
    240 	  --req="PKCS10:pkcs10-request.der" \
    241 	  --certificate="FILE:cert-proxy.der" || exit 1
    242 
    243 echo "verify proxy cert"
    244 ${hxtool} verify --missing-revoke \
    245     --allow-proxy-certificate \
    246     cert:FILE:cert-proxy.der \
    247     chain:FILE:$srcdir/data/test.crt \
    248     anchor:FILE:$srcdir/data/ca.crt > /dev/null || exit 1
    249 
    250 echo "issue ca cert (generate rsa key)"
    251 ${hxtool} issue-certificate \
    252 	  --self-signed \
    253 	  --issue-ca \
    254  	  --serial-number="deadbeaf" \
    255 	  --generate-key=rsa \
    256           --path-length=-1 \
    257 	  --subject="cn=ca2-cert" \
    258 	  --certificate="FILE:cert-ca.pem" || exit 1
    259 
    260 echo "issue sub-ca cert (generate rsa key)"
    261 ${hxtool} issue-certificate \
    262 	  --ca-certificate=FILE:cert-ca.pem \
    263 	  --issue-ca \
    264  	  --serial-number="deadbeaf22" \
    265 	  --generate-key=rsa \
    266 	  --subject="cn=sub-ca2-cert" \
    267 	  --certificate="FILE:cert-sub-ca.pem" || exit 1
    268 
    269 echo "issue ee cert (generate rsa key)"
    270 ${hxtool} issue-certificate \
    271 	  --ca-certificate=FILE:cert-ca.pem \
    272 	  --generate-key=rsa \
    273 	  --subject="cn=cert-ee2" \
    274 	  --certificate="FILE:cert-ee.pem" || exit 1
    275 
    276 echo "issue sub-ca ee cert (generate rsa key)"
    277 ${hxtool} issue-certificate \
    278 	  --ca-certificate=FILE:cert-sub-ca.pem \
    279 	  --generate-key=rsa \
    280 	  --subject="cn=cert-sub-ee2" \
    281 	  --certificate="FILE:cert-sub-ee.pem" || exit 1
    282 
    283 echo "verify certificate (ee)"
    284 ${hxtool} verify --missing-revoke \
    285 	cert:FILE:cert-ee.pem \
    286 	anchor:FILE:cert-ca.pem > /dev/null || exit 1
    287 
    288 echo "verify certificate (sub-ee)"
    289 ${hxtool} verify --missing-revoke \
    290 	cert:FILE:cert-sub-ee.pem \
    291 	chain:FILE:cert-sub-ca.pem \
    292 	anchor:FILE:cert-ca.pem || exit 1
    293 
    294 echo "sign CMS signature (generate key)"
    295 ${hxtool} cms-create-sd \
    296 	--certificate=FILE:cert-ee.pem \
    297 	"$srcdir/test_name.c" \
    298 	sd.data > /dev/null || exit 1
    299 
    300 echo "verify CMS signature (generate key)"
    301 ${hxtool} cms-verify-sd \
    302 	--missing-revoke \
    303 	--anchors=FILE:cert-ca.pem \
    304 	sd.data sd.data.out > /dev/null || exit 1
    305 cmp "$srcdir/test_name.c" sd.data.out || exit 1
    306 
    307 echo "extend ca cert"
    308 ${hxtool} issue-certificate \
    309 	  --self-signed \
    310 	  --issue-ca \
    311           --lifetime="2years" \
    312  	  --serial-number="deadbeaf" \
    313 	  --ca-private-key=FILE:cert-ca.pem \
    314 	  --subject="cn=ca2-cert" \
    315 	  --certificate="FILE:cert-ca.pem" || exit 1
    316 
    317 echo "verify certificate generated by previous ca"
    318 ${hxtool} verify --missing-revoke \
    319 	cert:FILE:cert-ee.pem \
    320 	anchor:FILE:cert-ca.pem > /dev/null || exit 1
    321 
    322 echo "extend ca cert (template)"
    323 ${hxtool} issue-certificate \
    324 	  --self-signed \
    325 	  --issue-ca \
    326           --lifetime="3years" \
    327 	  --template-certificate="FILE:cert-ca.pem" \
    328 	  --template-fields="serialNumber,notBefore,subject" \
    329           --path-length=-1 \
    330 	  --ca-private-key=FILE:cert-ca.pem \
    331 	  --certificate="FILE:cert-ca.pem" || exit 1
    332 
    333 echo "verify certificate generated by previous ca"
    334 ${hxtool} verify --missing-revoke \
    335 	cert:FILE:cert-ee.pem \
    336 	anchor:FILE:cert-ca.pem > /dev/null || exit 1
    337 
    338 echo "extend sub-ca cert (template)"
    339 ${hxtool} issue-certificate \
    340 	  --ca-certificate=FILE:cert-ca.pem \
    341 	  --issue-ca \
    342           --lifetime="2years" \
    343 	  --template-certificate="FILE:cert-sub-ca.pem" \
    344 	  --template-fields="serialNumber,notBefore,subject,SPKI" \
    345 	  --certificate="FILE:cert-sub-ca2.pem" || exit 1
    346 
    347 echo "verify certificate (sub-ee) with extended chain"
    348 ${hxtool} verify --missing-revoke \
    349 	cert:FILE:cert-sub-ee.pem \
    350 	chain:FILE:cert-sub-ca.pem \
    351 	anchor:FILE:cert-ca.pem > /dev/null || exit 1
    352 
    353 echo "+++++++++++ test basic constraints"
    354 
    355 echo "extend ca cert (too low path-length constraint)"
    356 ${hxtool} issue-certificate \
    357 	  --self-signed \
    358 	  --issue-ca \
    359           --lifetime="3years" \
    360 	  --template-certificate="FILE:cert-ca.pem" \
    361 	  --template-fields="serialNumber,notBefore,subject" \
    362           --path-length=0 \
    363 	  --ca-private-key=FILE:cert-ca.pem \
    364 	  --certificate="FILE:cert-ca.pem" || exit 1
    365 
    366 echo "verify failure of certificate (sub-ee) with path-length constraint"
    367 ${hxtool} verify --missing-revoke \
    368 	cert:FILE:cert-sub-ee.pem \
    369 	chain:FILE:cert-sub-ca.pem \
    370 	anchor:FILE:cert-ca.pem > /dev/null && exit 1
    371 
    372 echo "extend ca cert (exact path-length constraint)"
    373 ${hxtool} issue-certificate \
    374 	  --self-signed \
    375 	  --issue-ca \
    376           --lifetime="3years" \
    377 	  --template-certificate="FILE:cert-ca.pem" \
    378 	  --template-fields="serialNumber,notBefore,subject" \
    379           --path-length=1 \
    380 	  --ca-private-key=FILE:cert-ca.pem \
    381 	  --certificate="FILE:cert-ca.pem" || exit 1
    382 
    383 echo "verify certificate (sub-ee) with exact path-length constraint"
    384 ${hxtool} verify --missing-revoke \
    385 	cert:FILE:cert-sub-ee.pem \
    386 	chain:FILE:cert-sub-ca.pem \
    387 	anchor:FILE:cert-ca.pem > /dev/null || exit 1
    388 
    389 echo "Check missing basicConstrants.isCa"
    390 ${hxtool} issue-certificate \
    391 	  --ca-certificate=FILE:cert-ca.pem \
    392           --lifetime="2years" \
    393 	  --template-certificate="FILE:cert-sub-ca.pem" \
    394 	  --template-fields="serialNumber,notBefore,subject,SPKI" \
    395 	  --certificate="FILE:cert-sub-ca2.pem" || exit 1
    396 
    397 echo "verify failure certificate (sub-ee) with missing isCA"
    398 ${hxtool} verify --missing-revoke \
    399 	cert:FILE:cert-sub-ee.pem \
    400 	chain:FILE:cert-sub-ca2.pem \
    401 	anchor:FILE:cert-ca.pem > /dev/null && exit 1
    402 
    403 echo "issue ee cert (crl uri)"
    404 ${hxtool} issue-certificate \
    405 	  --ca-certificate=FILE:cert-ca.pem \
    406 	  --req="PKCS10:pkcs10-request.der" \
    407 	  --crl-uri="http://www.test.h5l.se/crl1.crl" \
    408 	  --subject="cn=cert-ee-crl-uri" \
    409 	  --certificate="FILE:cert-ee.pem" || exit 1
    410 
    411 echo "issue null subject cert"
    412 ${hxtool} issue-certificate \
    413 	  --ca-certificate=FILE:cert-ca.pem \
    414 	  --req="PKCS10:pkcs10-request.der" \
    415 	  --subject="" \
    416 	  --email="lha (at] test.h5l.se" \
    417 	  --certificate="FILE:cert-ee.pem" || exit 1
    418 
    419 echo "verify certificate null subject"
    420 ${hxtool} verify --missing-revoke \
    421 	cert:FILE:cert-ee.pem \
    422 	anchor:FILE:cert-ca.pem > /dev/null || exit 1
    423 
    424 echo "+++++++++++ test sigalg"
    425 
    426 echo "issue cert with sha256"
    427 ${hxtool} issue-certificate \
    428 	  --ca-certificate=FILE:cert-ca.pem \
    429           --signature-algorithm=rsa-with-sha256 \
    430 	  --subject="cn=foo" \
    431 	  --req="PKCS10:pkcs10-request.der" \
    432 	  --certificate="FILE:cert-ee.pem" || exit 1
    433 
    434 echo "verify certificate"
    435 ${hxtool} verify --missing-revoke \
    436 	cert:FILE:cert-ee.pem \
    437 	anchor:FILE:cert-ca.pem > /dev/null || exit 1
    438 
    439 echo "issue cert with sha1"
    440 ${hxtool} issue-certificate \
    441 	  --ca-certificate=FILE:cert-ca.pem \
    442           --signature-algorithm=rsa-with-sha1 \
    443 	  --subject="cn=foo" \
    444 	  --req="PKCS10:pkcs10-request.der" \
    445 	  --certificate="FILE:cert-ee.pem" || exit 1
    446 
    447 echo "verify certificate"
    448 ${hxtool} verify --missing-revoke \
    449 	cert:FILE:cert-ee.pem \
    450 	anchor:FILE:cert-ca.pem > /dev/null || exit 1
    451 
    452 exit 0
    453