security/nss/tests/cert/cert.sh

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:fd09edb0f1b1
1 #! /bin/bash
2 #
3 # This Source Code Form is subject to the terms of the Mozilla Public
4 # License, v. 2.0. If a copy of the MPL was not distributed with this
5 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7 ########################################################################
8 #
9 # mozilla/security/nss/tests/cert/rcert.sh
10 #
11 # Certificate generating and handeling for NSS QA, can be included
12 # multiple times from all.sh and the individual scripts
13 #
14 # needs to work on all Unix and Windows platforms
15 #
16 # included from (don't expect this to be up to date)
17 # --------------------------------------------------
18 # all.sh
19 # ssl.sh
20 # smime.sh
21 # tools.sh
22 #
23 # special strings
24 # ---------------
25 # FIXME ... known problems, search for this string
26 # NOTE .... unexpected behavior
27 #
28 # FIXME - Netscape - NSS
29 ########################################################################
30
31 ############################## cert_init ###############################
32 # local shell function to initialize this script
33 ########################################################################
34 cert_init()
35 {
36 SCRIPTNAME="cert.sh"
37 if [ -z "${CLEANUP}" ] ; then # if nobody else is responsible for
38 CLEANUP="${SCRIPTNAME}" # cleaning this script will do it
39 fi
40 if [ -z "${INIT_SOURCED}" ] ; then
41 cd ../common
42 . ./init.sh
43 fi
44 if [ -z "${IOPR_CERT_SOURCED}" ]; then
45 . ../iopr/cert_iopr.sh
46 fi
47 SCRIPTNAME="cert.sh"
48 CRL_GRP_DATE=`date -u "+%Y%m%d%H%M%SZ"`
49 if [ -z "$NSS_DISABLE_ECC" ] ; then
50 html_head "Certutil and Crlutil Tests with ECC"
51 else
52 html_head "Certutil and Crlutil Tests"
53 fi
54
55 LIBDIR="${DIST}/${OBJDIR}/lib"
56
57 ROOTCERTSFILE=`ls -1 ${LIBDIR}/*nssckbi* | head -1`
58 if [ ! "${ROOTCERTSFILE}" ] ; then
59 html_failed "Looking for root certs module."
60 cert_log "ERROR: Root certs module not found."
61 Exit 5 "Fatal - Root certs module not found."
62 else
63 html_passed "Looking for root certs module."
64 fi
65
66 if [ "${OS_ARCH}" = "WINNT" -a "$OS_NAME" = "CYGWIN_NT" ]; then
67 ROOTCERTSFILE=`cygpath -m ${ROOTCERTSFILE}`
68 fi
69 }
70
71 cert_log() ###################### write the cert_status file
72 {
73 echo "$SCRIPTNAME $*"
74 echo $* >>${CERT_LOG_FILE}
75 }
76
77 ########################################################################
78 # function wraps calls to pk12util, also: writes action and options
79 # to stdout.
80 # Params are the same as to pk12util.
81 # Returns pk12util status
82 #
83 pk12u()
84 {
85 echo "${CU_ACTION} --------------------------"
86
87 echo "pk12util $@"
88 ${BINDIR}/pk12util $@
89 RET=$?
90
91 return $RET
92 }
93
94 ################################ certu #################################
95 # local shell function to call certutil, also: writes action and options to
96 # stdout, sets variable RET and writes results to the html file results
97 ########################################################################
98 certu()
99 {
100 echo "$SCRIPTNAME: ${CU_ACTION} --------------------------"
101 EXPECTED=${RETEXPECTED-0}
102
103 if [ -n "${CU_SUBJECT}" ]; then
104 #the subject of the cert contains blanks, and the shell
105 #will strip the quotes off the string, if called otherwise...
106 echo "certutil -s \"${CU_SUBJECT}\" $*"
107 ${PROFTOOL} ${BINDIR}/certutil -s "${CU_SUBJECT}" $*
108 RET=$?
109 CU_SUBJECT=""
110 else
111 echo "certutil $*"
112 ${PROFTOOL} ${BINDIR}/certutil $*
113 RET=$?
114 fi
115 if [ "$RET" -ne "$EXPECTED" ]; then
116 CERTFAILED=$RET
117 html_failed "${CU_ACTION} ($RET=$EXPECTED) "
118 cert_log "ERROR: ${CU_ACTION} failed $RET"
119 else
120 html_passed "${CU_ACTION}"
121 fi
122
123 return $RET
124 }
125
126 ################################ crlu #################################
127 # local shell function to call crlutil, also: writes action and options to
128 # stdout, sets variable RET and writes results to the html file results
129 ########################################################################
130 crlu()
131 {
132 echo "$SCRIPTNAME: ${CU_ACTION} --------------------------"
133
134 CRLUTIL="crlutil -q"
135 echo "$CRLUTIL $*"
136 ${PROFTOOL} ${BINDIR}/$CRLUTIL $*
137 RET=$?
138 if [ "$RET" -ne 0 ]; then
139 CRLFAILED=$RET
140 html_failed "${CU_ACTION} ($RET) "
141 cert_log "ERROR: ${CU_ACTION} failed $RET"
142 else
143 html_passed "${CU_ACTION}"
144 fi
145
146 return $RET
147 }
148
149 ################################ ocspr ##################################
150 # local shell function to call ocsresp, also: writes action and options to
151 # stdout, sets variable RET and writes results to the html file results
152 #########################################################################
153 ocspr()
154 {
155 echo "$SCRIPTNAME: ${OR_ACTION} --------------------------"
156
157 OCSPRESP="ocspresp"
158 echo "$OCSPRESP $*"
159 ${PROFTOOL} ${BINDIR}/$OCSPRESP $*
160 RET=$?
161 if [ "$RET" -ne 0 ]; then
162 OCSPFAILED=$RET
163 html_failed "${OR_ACTION} ($RET) "
164 cert_log "ERROR: ${OR_ACTION} failed $RET"
165 else
166 html_passed "${OR_ACTION}"
167 fi
168
169 return $RET
170 }
171
172 modu()
173 {
174 echo "$SCRIPTNAME: ${CU_ACTION} --------------------------"
175
176 MODUTIL="modutil"
177 echo "$MODUTIL $*"
178 # echo is used to press Enter expected by modutil
179 echo | ${BINDIR}/$MODUTIL $*
180 RET=$?
181 if [ "$RET" -ne 0 ]; then
182 MODFAILED=$RET
183 html_failed "${CU_ACTION} ($RET) "
184 cert_log "ERROR: ${CU_ACTION} failed $RET"
185 else
186 html_passed "${CU_ACTION}"
187 fi
188
189 return $RET
190 }
191
192 ############################# cert_init_cert ##########################
193 # local shell function to initialize creation of client and server certs
194 ########################################################################
195 cert_init_cert()
196 {
197 CERTDIR="$1"
198 CERTNAME="$2"
199 CERTSERIAL="$3"
200 DOMAIN="$4"
201
202 if [ ! -d "${CERTDIR}" ]; then
203 mkdir -p "${CERTDIR}"
204 else
205 echo "$SCRIPTNAME: WARNING - ${CERTDIR} exists"
206 fi
207 cd "${CERTDIR}"
208 CERTDIR="."
209
210 PROFILEDIR=`cd ${CERTDIR}; pwd`
211 if [ "${OS_ARCH}" = "WINNT" -a "$OS_NAME" = "CYGWIN_NT" ]; then
212 PROFILEDIR=`cygpath -m ${PROFILEDIR}`
213 fi
214 if [ -n "${MULTIACCESS_DBM}" ]; then
215 PROFILEDIR="multiaccess:${DOMAIN}"
216 fi
217
218 noise
219 }
220
221 ############################# hw_acc #################################
222 # local shell function to add hw accelerator modules to the db
223 ########################################################################
224 hw_acc()
225 {
226 HW_ACC_RET=0
227 HW_ACC_ERR=""
228 if [ -n "$O_HWACC" -a "$O_HWACC" = ON -a -z "$USE_64" ] ; then
229 echo "creating $CERTNAME s cert with hwaccelerator..."
230 #case $ACCELERATOR in
231 #rainbow)
232
233 echo "modutil -add rainbow -libfile /usr/lib/libcryptoki22.so "
234 echo " -dbdir ${PROFILEDIR} 2>&1 "
235 echo | ${BINDIR}/modutil -add rainbow -libfile /usr/lib/libcryptoki22.so \
236 -dbdir ${PROFILEDIR} 2>&1
237 if [ "$?" -ne 0 ]; then
238 echo "modutil -add rainbow failed in `pwd`"
239 HW_ACC_RET=1
240 HW_ACC_ERR="modutil -add rainbow"
241 fi
242
243 echo "modutil -add ncipher "
244 echo " -libfile /opt/nfast/toolkits/pkcs11/libcknfast.so "
245 echo " -dbdir ${PROFILEDIR} 2>&1 "
246 echo | ${BINDIR}/modutil -add ncipher \
247 -libfile /opt/nfast/toolkits/pkcs11/libcknfast.so \
248 -dbdir ${PROFILEDIR} 2>&1
249 if [ "$?" -ne 0 ]; then
250 echo "modutil -add ncipher failed in `pwd`"
251 HW_ACC_RET=`expr $HW_ACC_RET + 2`
252 HW_ACC_ERR="$HW_ACC_ERR,modutil -add ncipher"
253 fi
254 if [ "$HW_ACC_RET" -ne 0 ]; then
255 html_failed "Adding HW accelerators to certDB for ${CERTNAME} ($HW_ACC_RET) "
256 else
257 html_passed "Adding HW accelerators to certDB for ${CERTNAME}"
258 fi
259
260 fi
261 return $HW_ACC_RET
262 }
263
264 ############################# cert_create_cert #########################
265 # local shell function to create client certs
266 # initialize DB, import
267 # root cert
268 # add cert to DB
269 ########################################################################
270 cert_create_cert()
271 {
272 cert_init_cert "$1" "$2" "$3" "$4"
273
274 CU_ACTION="Initializing ${CERTNAME}'s Cert DB"
275 certu -N -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
276 if [ "$RET" -ne 0 ]; then
277 return $RET
278 fi
279
280 CU_ACTION="Loading root cert module to ${CERTNAME}'s Cert DB"
281 modu -add "RootCerts" -libfile "${ROOTCERTSFILE}" -dbdir "${PROFILEDIR}" 2>&1
282 if [ "$RET" -ne 0 ]; then
283 return $RET
284 fi
285
286 hw_acc
287
288 CU_ACTION="Import Root CA for $CERTNAME"
289 certu -A -n "TestCA" -t "TC,TC,TC" -f "${R_PWFILE}" -d "${PROFILEDIR}" \
290 -i "${R_CADIR}/TestCA.ca.cert" 2>&1
291 if [ "$RET" -ne 0 ]; then
292 return $RET
293 fi
294
295 if [ -z "$NSS_DISABLE_ECC" ] ; then
296 CU_ACTION="Import EC Root CA for $CERTNAME"
297 certu -A -n "TestCA-ec" -t "TC,TC,TC" -f "${R_PWFILE}" \
298 -d "${PROFILEDIR}" -i "${R_CADIR}/TestCA-ec.ca.cert" 2>&1
299 if [ "$RET" -ne 0 ]; then
300 return $RET
301 fi
302 fi
303
304 cert_add_cert "$5"
305 return $?
306 }
307
308 ############################# cert_add_cert ############################
309 # local shell function to add client certs to an existing CERT DB
310 # generate request
311 # sign request
312 # import Cert
313 #
314 ########################################################################
315 cert_add_cert()
316 {
317 CU_ACTION="Generate Cert Request for $CERTNAME"
318 CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
319 certu -R -d "${PROFILEDIR}" -f "${R_PWFILE}" -z "${R_NOISE_FILE}" -o req 2>&1
320 if [ "$RET" -ne 0 ]; then
321 return $RET
322 fi
323
324 CU_ACTION="Sign ${CERTNAME}'s Request"
325 certu -C -c "TestCA" -m "$CERTSERIAL" -v 60 -d "${P_R_CADIR}" \
326 -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" "$1" 2>&1
327 if [ "$RET" -ne 0 ]; then
328 return $RET
329 fi
330
331 CU_ACTION="Import $CERTNAME's Cert"
332 certu -A -n "$CERTNAME" -t "u,u,u" -d "${PROFILEDIR}" -f "${R_PWFILE}" \
333 -i "${CERTNAME}.cert" 2>&1
334 if [ "$RET" -ne 0 ]; then
335 return $RET
336 fi
337
338 cert_log "SUCCESS: $CERTNAME's Cert Created"
339
340 #
341 # Generate and add EC cert
342 #
343 if [ -z "$NSS_DISABLE_ECC" ] ; then
344 CURVE="secp384r1"
345 CU_ACTION="Generate EC Cert Request for $CERTNAME"
346 CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}-ec@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
347 certu -R -k ec -q "${CURVE}" -d "${PROFILEDIR}" -f "${R_PWFILE}" \
348 -z "${R_NOISE_FILE}" -o req 2>&1
349 if [ "$RET" -ne 0 ]; then
350 return $RET
351 fi
352
353 CU_ACTION="Sign ${CERTNAME}'s EC Request"
354 certu -C -c "TestCA-ec" -m "$CERTSERIAL" -v 60 -d "${P_R_CADIR}" \
355 -i req -o "${CERTNAME}-ec.cert" -f "${R_PWFILE}" "$1" 2>&1
356 if [ "$RET" -ne 0 ]; then
357 return $RET
358 fi
359
360 CU_ACTION="Import $CERTNAME's EC Cert"
361 certu -A -n "${CERTNAME}-ec" -t "u,u,u" -d "${PROFILEDIR}" \
362 -f "${R_PWFILE}" -i "${CERTNAME}-ec.cert" 2>&1
363 if [ "$RET" -ne 0 ]; then
364 return $RET
365 fi
366 cert_log "SUCCESS: $CERTNAME's EC Cert Created"
367
368 # Generate EC certificate signed with RSA
369 CU_ACTION="Generate mixed EC Cert Request for $CERTNAME"
370 CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}-ecmixed@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
371 certu -R -k ec -q "${CURVE}" -d "${PROFILEDIR}" -f "${R_PWFILE}" \
372 -z "${R_NOISE_FILE}" -o req 2>&1
373 if [ "$RET" -ne 0 ]; then
374 return $RET
375 fi
376
377 CU_ACTION="Sign ${CERTNAME}'s EC Request with RSA"
378 # Avoid conflicting serial numbers with TestCA issuer by keeping
379 # this set far away. A smaller number risks colliding with the
380 # extended ssl user certificates.
381 NEWSERIAL=`expr ${CERTSERIAL} + 10000`
382 certu -C -c "TestCA" -m "$NEWSERIAL" -v 60 -d "${P_R_CADIR}" \
383 -i req -o "${CERTNAME}-ecmixed.cert" -f "${R_PWFILE}" "$1" 2>&1
384 if [ "$RET" -ne 0 ]; then
385 return $RET
386 fi
387
388 CU_ACTION="Import $CERTNAME's mixed EC Cert"
389 certu -A -n "${CERTNAME}-ecmixed" -t "u,u,u" -d "${PROFILEDIR}" \
390 -f "${R_PWFILE}" -i "${CERTNAME}-ecmixed.cert" 2>&1
391 if [ "$RET" -ne 0 ]; then
392 return $RET
393 fi
394 cert_log "SUCCESS: $CERTNAME's mixed EC Cert Created"
395 fi
396
397 return 0
398 }
399
400 ################################# cert_all_CA ################################
401 # local shell function to build the additional Temp. Certificate Authority (CA)
402 # used for the "real life" ssl test with 2 different CA's in the
403 # client and in the server's dir
404 ##########################################################################
405 cert_all_CA()
406 {
407 echo nss > ${PWFILE}
408
409 ALL_CU_SUBJECT="CN=NSS Test CA, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
410 cert_CA $CADIR TestCA -x "CTu,CTu,CTu" ${D_CA} "1"
411
412 ALL_CU_SUBJECT="CN=NSS Server Test CA, O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
413 cert_CA $SERVER_CADIR serverCA -x "Cu,Cu,Cu" ${D_SERVER_CA} "2"
414 ALL_CU_SUBJECT="CN=NSS Chain1 Server Test CA, O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
415 cert_CA $SERVER_CADIR chain-1-serverCA "-c serverCA" "u,u,u" ${D_SERVER_CA} "3"
416 ALL_CU_SUBJECT="CN=NSS Chain2 Server Test CA, O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
417 cert_CA $SERVER_CADIR chain-2-serverCA "-c chain-1-serverCA" "u,u,u" ${D_SERVER_CA} "4"
418
419
420
421 ALL_CU_SUBJECT="CN=NSS Client Test CA, O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
422 cert_CA $CLIENT_CADIR clientCA -x "Tu,Cu,Cu" ${D_CLIENT_CA} "5"
423 ALL_CU_SUBJECT="CN=NSS Chain1 Client Test CA, O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
424 cert_CA $CLIENT_CADIR chain-1-clientCA "-c clientCA" "u,u,u" ${D_CLIENT_CA} "6"
425 ALL_CU_SUBJECT="CN=NSS Chain2 Client Test CA, O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
426 cert_CA $CLIENT_CADIR chain-2-clientCA "-c chain-1-clientCA" "u,u,u" ${D_CLIENT_CA} "7"
427
428 rm $CLIENT_CADIR/root.cert $SERVER_CADIR/root.cert
429
430 # root.cert in $CLIENT_CADIR and in $SERVER_CADIR is one of the last
431 # in the chain
432
433 if [ -z "$NSS_DISABLE_ECC" ] ; then
434 #
435 # Create EC version of TestCA
436 CA_CURVE="secp521r1"
437 ALL_CU_SUBJECT="CN=NSS Test CA (ECC), O=BOGUS NSS, L=Mountain View, ST=California, C=US"
438 cert_ec_CA $CADIR TestCA-ec -x "CTu,CTu,CTu" ${D_CA} "1" ${CA_CURVE}
439 #
440 # Create EC versions of the intermediate CA certs
441 ALL_CU_SUBJECT="CN=NSS Server Test CA (ECC), O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
442 cert_ec_CA $SERVER_CADIR serverCA-ec -x "Cu,Cu,Cu" ${D_SERVER_CA} "2" ${CA_CURVE}
443 ALL_CU_SUBJECT="CN=NSS Chain1 Server Test CA (ECC), O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
444 cert_ec_CA $SERVER_CADIR chain-1-serverCA-ec "-c serverCA-ec" "u,u,u" ${D_SERVER_CA} "3" ${CA_CURVE}
445 ALL_CU_SUBJECT="CN=NSS Chain2 Server Test CA (ECC), O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
446 cert_ec_CA $SERVER_CADIR chain-2-serverCA-ec "-c chain-1-serverCA-ec" "u,u,u" ${D_SERVER_CA} "4" ${CA_CURVE}
447
448 ALL_CU_SUBJECT="CN=NSS Client Test CA (ECC), O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
449 cert_ec_CA $CLIENT_CADIR clientCA-ec -x "Tu,Cu,Cu" ${D_CLIENT_CA} "5" ${CA_CURVE}
450 ALL_CU_SUBJECT="CN=NSS Chain1 Client Test CA (ECC), O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
451 cert_ec_CA $CLIENT_CADIR chain-1-clientCA-ec "-c clientCA-ec" "u,u,u" ${D_CLIENT_CA} "6" ${CA_CURVE}
452 ALL_CU_SUBJECT="CN=NSS Chain2 Client Test CA (ECC), O=BOGUS NSS, L=Santa Clara, ST=California, C=US"
453 cert_ec_CA $CLIENT_CADIR chain-2-clientCA-ec "-c chain-1-clientCA-ec" "u,u,u" ${D_CLIENT_CA} "7" ${CA_CURVE}
454
455 rm $CLIENT_CADIR/ecroot.cert $SERVER_CADIR/ecroot.cert
456 # ecroot.cert in $CLIENT_CADIR and in $SERVER_CADIR is one of the last
457 # in the chain
458
459 fi
460 }
461
462 ################################# cert_CA ################################
463 # local shell function to build the Temp. Certificate Authority (CA)
464 # used for testing purposes, creating a CA Certificate and a root cert
465 ##########################################################################
466 cert_CA()
467 {
468 CUR_CADIR=$1
469 NICKNAME=$2
470 SIGNER=$3
471 TRUSTARG=$4
472 DOMAIN=$5
473 CERTSERIAL=$6
474
475 echo "$SCRIPTNAME: Creating a CA Certificate $NICKNAME =========================="
476
477 if [ ! -d "${CUR_CADIR}" ]; then
478 mkdir -p "${CUR_CADIR}"
479 fi
480 cd ${CUR_CADIR}
481 pwd
482
483 LPROFILE=`pwd`
484 if [ "${OS_ARCH}" = "WINNT" -a "$OS_NAME" = "CYGWIN_NT" ]; then
485 LPROFILE=`cygpath -m ${LPROFILE}`
486 fi
487 if [ -n "${MULTIACCESS_DBM}" ]; then
488 LPROFILE="multiaccess:${DOMAIN}"
489 fi
490
491 if [ "$SIGNER" = "-x" ] ; then # self signed -> create DB
492 CU_ACTION="Creating CA Cert DB"
493 certu -N -d "${LPROFILE}" -f ${R_PWFILE} 2>&1
494 if [ "$RET" -ne 0 ]; then
495 Exit 5 "Fatal - failed to create CA $NICKNAME "
496 fi
497
498 CU_ACTION="Loading root cert module to CA Cert DB"
499 modu -add "RootCerts" -libfile "${ROOTCERTSFILE}" -dbdir "${LPROFILE}" 2>&1
500 if [ "$RET" -ne 0 ]; then
501 return $RET
502 fi
503
504 echo "$SCRIPTNAME: Certificate initialized ----------"
505 fi
506
507
508 ################# Creating CA Cert ######################################
509 #
510 CU_ACTION="Creating CA Cert $NICKNAME "
511 CU_SUBJECT=$ALL_CU_SUBJECT
512 certu -S -n $NICKNAME -t $TRUSTARG -v 600 $SIGNER -d ${LPROFILE} -1 -2 -5 \
513 -f ${R_PWFILE} -z ${R_NOISE_FILE} -m $CERTSERIAL 2>&1 <<CERTSCRIPT
514 5
515 6
516 9
517 n
518 y
519 -1
520 n
521 5
522 6
523 7
524 9
525 n
526 CERTSCRIPT
527
528 if [ "$RET" -ne 0 ]; then
529 echo "return value is $RET"
530 Exit 6 "Fatal - failed to create CA cert"
531 fi
532
533 ################# Exporting Root Cert ###################################
534 #
535 CU_ACTION="Exporting Root Cert"
536 certu -L -n $NICKNAME -r -d ${LPROFILE} -o root.cert
537 if [ "$RET" -ne 0 ]; then
538 Exit 7 "Fatal - failed to export root cert"
539 fi
540 cp root.cert ${NICKNAME}.ca.cert
541 }
542
543 ################################ cert_ec_CA ##############################
544 # local shell function to build the Temp. Certificate Authority (CA)
545 # used for testing purposes, creating a CA Certificate and a root cert
546 # This is the ECC version of cert_CA.
547 ##########################################################################
548 cert_ec_CA()
549 {
550 CUR_CADIR=$1
551 NICKNAME=$2
552 SIGNER=$3
553 TRUSTARG=$4
554 DOMAIN=$5
555 CERTSERIAL=$6
556 CURVE=$7
557
558 echo "$SCRIPTNAME: Creating an EC CA Certificate $NICKNAME =========================="
559
560 if [ ! -d "${CUR_CADIR}" ]; then
561 mkdir -p "${CUR_CADIR}"
562 fi
563 cd ${CUR_CADIR}
564 pwd
565
566 LPROFILE=.
567 if [ -n "${MULTIACCESS_DBM}" ]; then
568 LPROFILE="multiaccess:${DOMAIN}"
569 fi
570
571 ################# Creating an EC CA Cert ################################
572 #
573 CU_ACTION="Creating EC CA Cert $NICKNAME "
574 CU_SUBJECT=$ALL_CU_SUBJECT
575 certu -S -n $NICKNAME -k ec -q $CURVE -t $TRUSTARG -v 600 $SIGNER \
576 -d ${LPROFILE} -1 -2 -5 -f ${R_PWFILE} -z ${R_NOISE_FILE} \
577 -m $CERTSERIAL 2>&1 <<CERTSCRIPT
578 5
579 6
580 9
581 n
582 y
583 -1
584 n
585 5
586 6
587 7
588 9
589 n
590 CERTSCRIPT
591
592 if [ "$RET" -ne 0 ]; then
593 echo "return value is $RET"
594 Exit 6 "Fatal - failed to create EC CA cert"
595 fi
596
597 ################# Exporting EC Root Cert ################################
598 #
599 CU_ACTION="Exporting EC Root Cert"
600 certu -L -n $NICKNAME -r -d ${LPROFILE} -o ecroot.cert
601 if [ "$RET" -ne 0 ]; then
602 Exit 7 "Fatal - failed to export ec root cert"
603 fi
604 cp ecroot.cert ${NICKNAME}.ca.cert
605 }
606
607 ############################## cert_smime_client #############################
608 # local shell function to create client Certificates for S/MIME tests
609 ##############################################################################
610 cert_smime_client()
611 {
612 CERTFAILED=0
613 echo "$SCRIPTNAME: Creating Client CA Issued Certificates =============="
614
615 cert_create_cert ${ALICEDIR} "Alice" 30 ${D_ALICE}
616 cert_create_cert ${BOBDIR} "Bob" 40 ${D_BOB}
617
618 echo "$SCRIPTNAME: Creating Dave's Certificate -------------------------"
619 cert_create_cert "${DAVEDIR}" Dave 50 ${D_DAVE}
620
621 ## XXX With this new script merging ECC and non-ECC tests, the
622 ## call to cert_create_cert ends up creating two separate certs
623 ## one for Eve and another for Eve-ec but they both end up with
624 ## the same Subject Alt Name Extension, i.e., both the cert for
625 ## Eve@bogus.com and the cert for Eve-ec@bogus.com end up
626 ## listing eve@bogus.net in the Certificate Subject Alt Name extension.
627 ## This can cause a problem later when cmsutil attempts to create
628 ## enveloped data and accidently picks up the ECC cert (NSS currently
629 ## does not support ECC for enveloped data creation). This script
630 ## avoids the problem by ensuring that these conflicting certs are
631 ## never added to the same cert database (see comment marked XXXX).
632 echo "$SCRIPTNAME: Creating multiEmail's Certificate --------------------"
633 cert_create_cert "${EVEDIR}" "Eve" 60 ${D_EVE} "-7 eve@bogus.net,eve@bogus.cc,beve@bogus.com"
634
635 #echo "************* Copying CA files to ${SERVERDIR}"
636 #cp ${CADIR}/*.db .
637 #hw_acc
638
639 #########################################################################
640 #
641 #cd ${CERTDIR}
642 #CU_ACTION="Creating ${CERTNAME}'s Server Cert"
643 #CU_SUBJECT="CN=${CERTNAME}, E=${CERTNAME}@bogus.com, O=BOGUS Netscape, L=Mountain View, ST=California, C=US"
644 #certu -S -n "${CERTNAME}" -c "TestCA" -t "u,u,u" -m "$CERTSERIAL" \
645 # -d ${PROFILEDIR} -f "${R_PWFILE}" -z "${R_NOISE_FILE}" -v 60 2>&1
646
647 #CU_ACTION="Export Dave's Cert"
648 #cd ${DAVEDIR}
649 #certu -L -n "Dave" -r -d ${P_R_DAVE} -o Dave.cert
650
651 ################# Importing Certificates for S/MIME tests ###############
652 #
653 echo "$SCRIPTNAME: Importing Certificates =============================="
654 CU_ACTION="Import Bob's cert into Alice's db"
655 certu -E -t ",," -d ${P_R_ALICEDIR} -f ${R_PWFILE} \
656 -i ${R_BOBDIR}/Bob.cert 2>&1
657
658 CU_ACTION="Import Dave's cert into Alice's DB"
659 certu -E -t ",," -d ${P_R_ALICEDIR} -f ${R_PWFILE} \
660 -i ${R_DAVEDIR}/Dave.cert 2>&1
661
662 CU_ACTION="Import Dave's cert into Bob's DB"
663 certu -E -t ",," -d ${P_R_BOBDIR} -f ${R_PWFILE} \
664 -i ${R_DAVEDIR}/Dave.cert 2>&1
665
666 CU_ACTION="Import Eve's cert into Alice's DB"
667 certu -E -t ",," -d ${P_R_ALICEDIR} -f ${R_PWFILE} \
668 -i ${R_EVEDIR}/Eve.cert 2>&1
669
670 CU_ACTION="Import Eve's cert into Bob's DB"
671 certu -E -t ",," -d ${P_R_BOBDIR} -f ${R_PWFILE} \
672 -i ${R_EVEDIR}/Eve.cert 2>&1
673
674 if [ -z "$NSS_DISABLE_ECC" ] ; then
675 echo "$SCRIPTNAME: Importing EC Certificates =============================="
676 CU_ACTION="Import Bob's EC cert into Alice's db"
677 certu -E -t ",," -d ${P_R_ALICEDIR} -f ${R_PWFILE} \
678 -i ${R_BOBDIR}/Bob-ec.cert 2>&1
679
680 CU_ACTION="Import Dave's EC cert into Alice's DB"
681 certu -E -t ",," -d ${P_R_ALICEDIR} -f ${R_PWFILE} \
682 -i ${R_DAVEDIR}/Dave-ec.cert 2>&1
683
684 CU_ACTION="Import Dave's EC cert into Bob's DB"
685 certu -E -t ",," -d ${P_R_BOBDIR} -f ${R_PWFILE} \
686 -i ${R_DAVEDIR}/Dave-ec.cert 2>&1
687
688 ## XXXX Do not import Eve's EC cert until we can make sure that
689 ## the email addresses listed in the Subject Alt Name Extension
690 ## inside Eve's ECC and non-ECC certs are different.
691 # CU_ACTION="Import Eve's EC cert into Alice's DB"
692 # certu -E -t ",," -d ${P_R_ALICEDIR} -f ${R_PWFILE} \
693 # -i ${R_EVEDIR}/Eve-ec.cert 2>&1
694
695 # CU_ACTION="Import Eve's EC cert into Bob's DB"
696 # certu -E -t ",," -d ${P_R_BOBDIR} -f ${R_PWFILE} \
697 # -i ${R_EVEDIR}/Eve-ec.cert 2>&1
698 fi
699
700 if [ "$CERTFAILED" != 0 ] ; then
701 cert_log "ERROR: SMIME failed $RET"
702 else
703 cert_log "SUCCESS: SMIME passed"
704 fi
705 }
706
707 ############################## cert_extended_ssl #######################
708 # local shell function to create client + server certs for extended SSL test
709 ########################################################################
710 cert_extended_ssl()
711 {
712
713 ################# Creating Certs for extended SSL test ####################
714 #
715 CERTFAILED=0
716 echo "$SCRIPTNAME: Creating Certificates, issued by the last ==============="
717 echo " of a chain of CA's which are not in the same database============"
718
719 echo "Server Cert"
720 cert_init_cert ${EXT_SERVERDIR} "${HOSTADDR}" 1 ${D_EXT_SERVER}
721
722 CU_ACTION="Initializing ${CERTNAME}'s Cert DB (ext.)"
723 certu -N -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
724
725 CU_ACTION="Loading root cert module to ${CERTNAME}'s Cert DB (ext.)"
726 modu -add "RootCerts" -libfile "${ROOTCERTSFILE}" -dbdir "${PROFILEDIR}" 2>&1
727
728 CU_ACTION="Generate Cert Request for $CERTNAME (ext)"
729 CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
730 certu -R -d "${PROFILEDIR}" -f "${R_PWFILE}" -z "${R_NOISE_FILE}" -o req 2>&1
731
732 CU_ACTION="Sign ${CERTNAME}'s Request (ext)"
733 cp ${CERTDIR}/req ${SERVER_CADIR}
734 certu -C -c "chain-2-serverCA" -m 200 -v 60 -d "${P_SERVER_CADIR}" \
735 -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" 2>&1
736
737 CU_ACTION="Import $CERTNAME's Cert -t u,u,u (ext)"
738 certu -A -n "$CERTNAME" -t "u,u,u" -d "${PROFILEDIR}" -f "${R_PWFILE}" \
739 -i "${CERTNAME}.cert" 2>&1
740
741 CU_ACTION="Import Client Root CA -t T,, for $CERTNAME (ext.)"
742 certu -A -n "clientCA" -t "T,," -f "${R_PWFILE}" -d "${PROFILEDIR}" \
743 -i "${CLIENT_CADIR}/clientCA.ca.cert" 2>&1
744
745 if [ -z "$NSS_DISABLE_ECC" ] ; then
746 #
747 # Repeat the above for EC certs
748 #
749 EC_CURVE="secp256r1"
750 CU_ACTION="Generate EC Cert Request for $CERTNAME (ext)"
751 CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}-ec@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
752 certu -R -d "${PROFILEDIR}" -k ec -q "${EC_CURVE}" -f "${R_PWFILE}" \
753 -z "${R_NOISE_FILE}" -o req 2>&1
754
755 CU_ACTION="Sign ${CERTNAME}'s EC Request (ext)"
756 cp ${CERTDIR}/req ${SERVER_CADIR}
757 certu -C -c "chain-2-serverCA-ec" -m 200 -v 60 -d "${P_SERVER_CADIR}" \
758 -i req -o "${CERTNAME}-ec.cert" -f "${R_PWFILE}" 2>&1
759
760 CU_ACTION="Import $CERTNAME's EC Cert -t u,u,u (ext)"
761 certu -A -n "${CERTNAME}-ec" -t "u,u,u" -d "${PROFILEDIR}" \
762 -f "${R_PWFILE}" -i "${CERTNAME}-ec.cert" 2>&1
763
764 CU_ACTION="Import Client EC Root CA -t T,, for $CERTNAME (ext.)"
765 certu -A -n "clientCA-ec" -t "T,," -f "${R_PWFILE}" -d "${PROFILEDIR}" \
766 -i "${CLIENT_CADIR}/clientCA-ec.ca.cert" 2>&1
767 #
768 # done with EC certs
769 #
770 # Repeat again for mixed EC certs
771 #
772 EC_CURVE="secp256r1"
773 CU_ACTION="Generate mixed EC Cert Request for $CERTNAME (ext)"
774 CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}-ecmixed@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
775 certu -R -d "${PROFILEDIR}" -k ec -q "${EC_CURVE}" -f "${R_PWFILE}" \
776 -z "${R_NOISE_FILE}" -o req 2>&1
777
778 CU_ACTION="Sign ${CERTNAME}'s mixed EC Request (ext)"
779 cp ${CERTDIR}/req ${SERVER_CADIR}
780 certu -C -c "chain-2-serverCA" -m 201 -v 60 -d "${P_SERVER_CADIR}" \
781 -i req -o "${CERTNAME}-ecmixed.cert" -f "${R_PWFILE}" 2>&1
782
783 CU_ACTION="Import $CERTNAME's mixed EC Cert -t u,u,u (ext)"
784 certu -A -n "${CERTNAME}-ecmixed" -t "u,u,u" -d "${PROFILEDIR}" \
785 -f "${R_PWFILE}" -i "${CERTNAME}-ecmixed.cert" 2>&1
786
787 # CU_ACTION="Import Client mixed EC Root CA -t T,, for $CERTNAME (ext.)"
788 # certu -A -n "clientCA-ecmixed" -t "T,," -f "${R_PWFILE}" \
789 # -d "${PROFILEDIR}" -i "${CLIENT_CADIR}/clientCA-ecmixed.ca.cert" \
790 # 2>&1
791 fi
792
793 echo "Importing all the server's own CA chain into the servers DB"
794 for CA in `find ${SERVER_CADIR} -name "?*.ca.cert"` ;
795 do
796 N=`basename $CA | sed -e "s/.ca.cert//"`
797 if [ $N = "serverCA" -o $N = "serverCA-ec" ] ; then
798 T="-t C,C,C"
799 else
800 T="-t u,u,u"
801 fi
802 CU_ACTION="Import $N CA $T for $CERTNAME (ext.) "
803 certu -A -n $N $T -f "${R_PWFILE}" -d "${PROFILEDIR}" \
804 -i "${CA}" 2>&1
805 done
806 #============
807 echo "Client Cert"
808 cert_init_cert ${EXT_CLIENTDIR} ExtendedSSLUser 1 ${D_EXT_CLIENT}
809
810 CU_ACTION="Initializing ${CERTNAME}'s Cert DB (ext.)"
811 certu -N -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
812
813 CU_ACTION="Loading root cert module to ${CERTNAME}'s Cert DB (ext.)"
814 modu -add "RootCerts" -libfile "${ROOTCERTSFILE}" -dbdir "${PROFILEDIR}" 2>&1
815
816 CU_ACTION="Generate Cert Request for $CERTNAME (ext)"
817 CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
818 certu -R -d "${PROFILEDIR}" -f "${R_PWFILE}" -z "${R_NOISE_FILE}" \
819 -o req 2>&1
820
821 CU_ACTION="Sign ${CERTNAME}'s Request (ext)"
822 cp ${CERTDIR}/req ${CLIENT_CADIR}
823 certu -C -c "chain-2-clientCA" -m 300 -v 60 -d "${P_CLIENT_CADIR}" \
824 -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" 2>&1
825
826 CU_ACTION="Import $CERTNAME's Cert -t u,u,u (ext)"
827 certu -A -n "$CERTNAME" -t "u,u,u" -d "${PROFILEDIR}" -f "${R_PWFILE}" \
828 -i "${CERTNAME}.cert" 2>&1
829 CU_ACTION="Import Server Root CA -t C,C,C for $CERTNAME (ext.)"
830 certu -A -n "serverCA" -t "C,C,C" -f "${R_PWFILE}" -d "${PROFILEDIR}" \
831 -i "${SERVER_CADIR}/serverCA.ca.cert" 2>&1
832
833 if [ -z "$NSS_DISABLE_ECC" ] ; then
834 #
835 # Repeat the above for EC certs
836 #
837 CU_ACTION="Generate EC Cert Request for $CERTNAME (ext)"
838 CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}-ec@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
839 certu -R -d "${PROFILEDIR}" -k ec -q "${EC_CURVE}" -f "${R_PWFILE}" \
840 -z "${R_NOISE_FILE}" -o req 2>&1
841
842 CU_ACTION="Sign ${CERTNAME}'s EC Request (ext)"
843 cp ${CERTDIR}/req ${CLIENT_CADIR}
844 certu -C -c "chain-2-clientCA-ec" -m 300 -v 60 -d "${P_CLIENT_CADIR}" \
845 -i req -o "${CERTNAME}-ec.cert" -f "${R_PWFILE}" 2>&1
846
847 CU_ACTION="Import $CERTNAME's EC Cert -t u,u,u (ext)"
848 certu -A -n "${CERTNAME}-ec" -t "u,u,u" -d "${PROFILEDIR}" \
849 -f "${R_PWFILE}" -i "${CERTNAME}-ec.cert" 2>&1
850
851 CU_ACTION="Import Server EC Root CA -t C,C,C for $CERTNAME (ext.)"
852 certu -A -n "serverCA-ec" -t "C,C,C" -f "${R_PWFILE}" \
853 -d "${PROFILEDIR}" -i "${SERVER_CADIR}/serverCA-ec.ca.cert" 2>&1
854 #
855 # done with EC certs
856 #
857 #
858 # Repeat the above for mixed EC certs
859 #
860 CU_ACTION="Generate mixed EC Cert Request for $CERTNAME (ext)"
861 CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}-ecmixed@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
862 certu -R -d "${PROFILEDIR}" -k ec -q "${EC_CURVE}" -f "${R_PWFILE}" \
863 -z "${R_NOISE_FILE}" -o req 2>&1
864
865 CU_ACTION="Sign ${CERTNAME}'s mixed EC Request (ext)"
866 cp ${CERTDIR}/req ${CLIENT_CADIR}
867 certu -C -c "chain-2-clientCA" -m 301 -v 60 -d "${P_CLIENT_CADIR}" \
868 -i req -o "${CERTNAME}-ecmixed.cert" -f "${R_PWFILE}" 2>&1
869
870 CU_ACTION="Import $CERTNAME's mixed EC Cert -t u,u,u (ext)"
871 certu -A -n "${CERTNAME}-ecmixed" -t "u,u,u" -d "${PROFILEDIR}" \
872 -f "${R_PWFILE}" -i "${CERTNAME}-ecmixed.cert" 2>&1
873
874 # CU_ACTION="Import Server EC Root CA -t C,C,C for $CERTNAME (ext.)"
875 # certu -A -n "serverCA-ec" -t "C,C,C" -f "${R_PWFILE}" \
876 # -d "${PROFILEDIR}" -i "${SERVER_CADIR}/serverCA-ec.ca.cert" 2>&1
877 #
878 # done with mixed EC certs
879 #
880 fi
881
882 echo "Importing all the client's own CA chain into the servers DB"
883 for CA in `find ${CLIENT_CADIR} -name "?*.ca.cert"` ;
884 do
885 N=`basename $CA | sed -e "s/.ca.cert//"`
886 if [ $N = "clientCA" -o $N = "clientCA-ec" ] ; then
887 T="-t T,C,C"
888 else
889 T="-t u,u,u"
890 fi
891 CU_ACTION="Import $N CA $T for $CERTNAME (ext.)"
892 certu -A -n $N $T -f "${R_PWFILE}" -d "${PROFILEDIR}" \
893 -i "${CA}" 2>&1
894 done
895 if [ "$CERTFAILED" != 0 ] ; then
896 cert_log "ERROR: EXT failed $RET"
897 else
898 cert_log "SUCCESS: EXT passed"
899 fi
900 }
901
902 ############################## cert_ssl ################################
903 # local shell function to create client + server certs for SSL test
904 ########################################################################
905 cert_ssl()
906 {
907 ################# Creating Certs for SSL test ###########################
908 #
909 CERTFAILED=0
910 echo "$SCRIPTNAME: Creating Client CA Issued Certificates ==============="
911 cert_create_cert ${CLIENTDIR} "TestUser" 70 ${D_CLIENT}
912
913 echo "$SCRIPTNAME: Creating Server CA Issued Certificate for \\"
914 echo " ${HOSTADDR} ------------------------------------"
915 cert_create_cert ${SERVERDIR} "${HOSTADDR}" 100 ${D_SERVER}
916 echo "$SCRIPTNAME: Creating Server CA Issued Certificate for \\"
917 echo " ${HOSTADDR}-sni --------------------------------"
918 CERTSERIAL=101
919 CERTNAME="${HOST}-sni${sniCertCount}.${DOMSUF}"
920 cert_add_cert
921 CU_ACTION="Modify trust attributes of Root CA -t TC,TC,TC"
922 certu -M -n "TestCA" -t "TC,TC,TC" -d ${PROFILEDIR} -f "${R_PWFILE}"
923 if [ -z "$NSS_DISABLE_ECC" ] ; then
924 CU_ACTION="Modify trust attributes of EC Root CA -t TC,TC,TC"
925 certu -M -n "TestCA-ec" -t "TC,TC,TC" -d ${PROFILEDIR} -f "${R_PWFILE}"
926 fi
927 # cert_init_cert ${SERVERDIR} "${HOSTADDR}" 1 ${D_SERVER}
928 # echo "************* Copying CA files to ${SERVERDIR}"
929 # cp ${CADIR}/*.db .
930 # hw_acc
931 # CU_ACTION="Creating ${CERTNAME}'s Server Cert"
932 # CU_SUBJECT="CN=${CERTNAME}, O=BOGUS Netscape, L=Mountain View, ST=California, C=US"
933 # certu -S -n "${CERTNAME}" -c "TestCA" -t "Pu,Pu,Pu" -d ${PROFILEDIR} \
934 # -f "${R_PWFILE}" -z "${R_NOISE_FILE}" -v 60 2>&1
935
936 if [ "$CERTFAILED" != 0 ] ; then
937 cert_log "ERROR: SSL failed $RET"
938 else
939 cert_log "SUCCESS: SSL passed"
940 fi
941
942 echo "$SCRIPTNAME: Creating database for OCSP stapling tests ==============="
943 echo "cp -r ${SERVERDIR} ${STAPLINGDIR}"
944 cp -r ${R_SERVERDIR} ${R_STAPLINGDIR}
945 pk12u -o ${R_STAPLINGDIR}/ca.p12 -n TestCA -k ${R_PWFILE} -w ${R_PWFILE} -d ${R_CADIR}
946 pk12u -i ${R_STAPLINGDIR}/ca.p12 -k ${R_PWFILE} -w ${R_PWFILE} -d ${R_STAPLINGDIR}
947 }
948 ############################## cert_stresscerts ################################
949 # local shell function to create client certs for SSL stresstest
950 ########################################################################
951 cert_stresscerts()
952 {
953
954 ############### Creating Certs for SSL stress test #######################
955 #
956 CERTDIR="$CLIENTDIR"
957 cd "${CERTDIR}"
958
959 PROFILEDIR=`cd ${CERTDIR}; pwd`
960 if [ "${OS_ARCH}" = "WINNT" -a "$OS_NAME" = "CYGWIN_NT" ]; then
961 PROFILEDIR=`cygpath -m ${PROFILEDIR}`
962 fi
963 if [ -n "${MULTIACCESS_DBM}" ]; then
964 PROFILEDIR="multiaccess:${D_CLIENT}"
965 fi
966 CERTFAILED=0
967 echo "$SCRIPTNAME: Creating Client CA Issued Certificates ==============="
968
969 CONTINUE=$GLOB_MAX_CERT
970 CERTSERIAL=10
971
972 while [ $CONTINUE -ge $GLOB_MIN_CERT ]
973 do
974 CERTNAME="TestUser$CONTINUE"
975 # cert_add_cert ${CLIENTDIR} "TestUser$CONTINUE" $CERTSERIAL
976 cert_add_cert
977 CERTSERIAL=`expr $CERTSERIAL + 1 `
978 CONTINUE=`expr $CONTINUE - 1 `
979 done
980 if [ "$CERTFAILED" != 0 ] ; then
981 cert_log "ERROR: StressCert failed $RET"
982 else
983 cert_log "SUCCESS: StressCert passed"
984 fi
985 }
986
987 ############################## cert_fips #####################################
988 # local shell function to create certificates for FIPS tests
989 ##############################################################################
990 cert_fips()
991 {
992 CERTFAILED=0
993 echo "$SCRIPTNAME: Creating FIPS 140 DSA Certificates =============="
994 cert_init_cert "${FIPSDIR}" "FIPS PUB 140 Test Certificate" 1000 "${D_FIPS}"
995
996 CU_ACTION="Initializing ${CERTNAME}'s Cert DB"
997 certu -N -d "${PROFILEDIR}" -f "${R_FIPSPWFILE}" 2>&1
998
999 CU_ACTION="Loading root cert module to ${CERTNAME}'s Cert DB (ext.)"
1000 modu -add "RootCerts" -libfile "${ROOTCERTSFILE}" -dbdir "${PROFILEDIR}" 2>&1
1001
1002 echo "$SCRIPTNAME: Enable FIPS mode on database -----------------------"
1003 CU_ACTION="Enable FIPS mode on database for ${CERTNAME}"
1004 echo "modutil -dbdir ${PROFILEDIR} -fips true "
1005 ${BINDIR}/modutil -dbdir ${PROFILEDIR} -fips true 2>&1 <<MODSCRIPT
1006 y
1007 MODSCRIPT
1008 RET=$?
1009 if [ "$RET" -ne 0 ]; then
1010 html_failed "${CU_ACTION} ($RET) "
1011 cert_log "ERROR: ${CU_ACTION} failed $RET"
1012 else
1013 html_passed "${CU_ACTION}"
1014 fi
1015
1016 CU_ACTION="Generate Certificate for ${CERTNAME}"
1017 CU_SUBJECT="CN=${CERTNAME}, E=fips@bogus.com, O=BOGUS NSS, OU=FIPS PUB 140, L=Mountain View, ST=California, C=US"
1018 certu -S -n ${FIPSCERTNICK} -x -t "Cu,Cu,Cu" -d "${PROFILEDIR}" -f "${R_FIPSPWFILE}" -k dsa -v 600 -m 500 -z "${R_NOISE_FILE}" 2>&1
1019 if [ "$RET" -eq 0 ]; then
1020 cert_log "SUCCESS: FIPS passed"
1021 fi
1022 }
1023
1024 ############################## cert_eccurves ###########################
1025 # local shell function to create server certs for all EC curves
1026 ########################################################################
1027 cert_eccurves()
1028 {
1029 ################# Creating Certs for EC curves test ########################
1030 #
1031 if [ -z "$NSS_DISABLE_ECC" ] ; then
1032 echo "$SCRIPTNAME: Creating Server CA Issued Certificate for "
1033 echo " EC Curves Test Certificates ------------------------------------"
1034
1035 cert_init_cert "${ECCURVES_DIR}" "EC Curves Test Certificates" 1 ${D_ECCURVES}
1036
1037 CU_ACTION="Initializing EC Curve's Cert DB"
1038 certu -N -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
1039
1040 CU_ACTION="Loading root cert module to EC Curve's Cert DB"
1041 modu -add "RootCerts" -libfile "${ROOTCERTSFILE}" -dbdir "${PROFILEDIR}" 2>&1
1042
1043 CU_ACTION="Import EC Root CA for $CERTNAME"
1044 certu -A -n "TestCA-ec" -t "TC,TC,TC" -f "${R_PWFILE}" \
1045 -d "${PROFILEDIR}" -i "${R_CADIR}/TestCA-ec.ca.cert" 2>&1
1046
1047 if [ -n "${NSS_ECC_MORE_THAN_SUITE_B}" ] ; then
1048 CURVE_LIST="c2pnb163v1 c2pnb163v2 c2pnb163v3 c2pnb176v1 \
1049 c2pnb208w1 c2pnb272w1 c2pnb304w1 c2pnb368w1 \
1050 c2tnb191v1 c2tnb191v2 c2tnb191v3 c2tnb239v1 \
1051 c2tnb239v2 c2tnb239v3 c2tnb359v1 c2tnb431r1 \
1052 nistb163 nistb233 nistb283 nistb409 nistb571 \
1053 nistk163 nistk233 nistk283 nistk409 nistk571 \
1054 nistp192 nistp224 nistp256 nistp384 nistp521 \
1055 prime192v1 prime192v2 prime192v3 \
1056 prime239v1 prime239v2 prime239v3 \
1057 secp112r1 secp112r2 secp128r1 secp128r2 secp160k1 \
1058 secp160r1 secp160r2 secp192k1 secp192r1 secp224k1 \
1059 secp224r1 secp256k1 secp256r1 secp384r1 secp521r1 \
1060 sect113r1 sect113r2 sect131r1 sect131r2 sect163k1 sect163r1 \
1061 sect163r2 sect193r1 sect193r2 sect233k1 sect233r1 sect239k1 \
1062 sect283k1 sect283r1 sect409k1 sect409r1 sect571k1 sect571r1"
1063 else
1064 CURVE_LIST="nistp256 nistp384 nistp521"
1065 fi
1066 CERTSERIAL=2000
1067
1068 for CURVE in ${CURVE_LIST}
1069 do
1070 CERTFAILED=0
1071 CERTNAME="Curve-${CURVE}"
1072 CERTSERIAL=`expr $CERTSERIAL + 1 `
1073 CU_ACTION="Generate EC Cert Request for $CERTNAME"
1074 CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}-ec@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
1075 certu -R -k ec -q "${CURVE}" -d "${PROFILEDIR}" -f "${R_PWFILE}" \
1076 -z "${R_NOISE_FILE}" -o req 2>&1
1077
1078 if [ $RET -eq 0 ] ; then
1079 CU_ACTION="Sign ${CERTNAME}'s EC Request"
1080 certu -C -c "TestCA-ec" -m "$CERTSERIAL" -v 60 -d "${P_R_CADIR}" \
1081 -i req -o "${CERTNAME}-ec.cert" -f "${R_PWFILE}" "$1" 2>&1
1082 fi
1083
1084 if [ $RET -eq 0 ] ; then
1085 CU_ACTION="Import $CERTNAME's EC Cert"
1086 certu -A -n "${CERTNAME}-ec" -t "u,u,u" -d "${PROFILEDIR}" \
1087 -f "${R_PWFILE}" -i "${CERTNAME}-ec.cert" 2>&1
1088 fi
1089 done
1090
1091 fi # $NSS_DISABLE_ECC
1092 }
1093
1094 ########################### cert_extensions_test #############################
1095 # local shell function to test cert extensions generation
1096 ##############################################################################
1097 cert_extensions_test()
1098 {
1099 COUNT=`expr ${COUNT} + 1`
1100 CERTNAME=TestExt${COUNT}
1101 CU_SUBJECT="CN=${CERTNAME}, E=${CERTNAME}@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
1102
1103 echo
1104 echo certutil -d ${CERT_EXTENSIONS_DIR} -S -n ${CERTNAME} \
1105 -t "u,u,u" -o ${CERT_EXTENSIONS_DIR}/tempcert -s "${CU_SUBJECT}" -x -f ${R_PWFILE} \
1106 -z "${R_NOISE_FILE}" -${OPT} \< ${TARG_FILE}
1107 echo "certutil options:"
1108 cat ${TARG_FILE}
1109 ${BINDIR}/certutil -d ${CERT_EXTENSIONS_DIR} -S -n ${CERTNAME} \
1110 -t "u,u,u" -o ${CERT_EXTENSIONS_DIR}/tempcert -s "${CU_SUBJECT}" -x -f ${R_PWFILE} \
1111 -z "${R_NOISE_FILE}" -${OPT} < ${TARG_FILE}
1112 RET=$?
1113 if [ "${RET}" -ne 0 ]; then
1114 CERTFAILED=1
1115 html_failed "${TESTNAME} (${COUNT}) - Create and Add Certificate"
1116 cert_log "ERROR: ${TESTNAME} - Create and Add Certificate failed"
1117 return 1
1118 fi
1119
1120 echo certutil -d ${CERT_EXTENSIONS_DIR} -L -n ${CERTNAME}
1121 EXTLIST=`${BINDIR}/certutil -d ${CERT_EXTENSIONS_DIR} -L -n ${CERTNAME}`
1122 RET=$?
1123 echo "${EXTLIST}"
1124 if [ "${RET}" -ne 0 ]; then
1125 CERTFAILED=1
1126 html_failed "${TESTNAME} (${COUNT}) - List Certificate"
1127 cert_log "ERROR: ${TESTNAME} - List Certificate failed"
1128 return 1
1129 fi
1130
1131 for FL in `echo ${FILTERLIST} | tr \| ' '`; do
1132 FL="`echo ${FL} | tr _ ' '`"
1133 EXPSTAT=0
1134 if [ X`echo "${FL}" | cut -c 1` = 'X!' ]; then
1135 EXPSTAT=1
1136 FL=`echo ${FL} | tr -d '!'`
1137 fi
1138 echo "${EXTLIST}" | grep "${FL}" >/dev/null 2>&1
1139 RET=$?
1140 if [ "${RET}" -ne "${EXPSTAT}" ]; then
1141 CERTFAILED=1
1142 html_failed "${TESTNAME} (${COUNT}) - Looking for ${FL}" "returned ${RET}, expected is ${EXPSTAT}"
1143 cert_log "ERROR: ${TESTNAME} - Looking for ${FL} failed"
1144 return 1
1145 fi
1146 done
1147
1148 html_passed "${TESTNAME} (${COUNT})"
1149 return 0
1150 }
1151
1152 ############################## cert_extensions ###############################
1153 # local shell function to run cert extensions tests
1154 ##############################################################################
1155 cert_extensions()
1156 {
1157 CERTNAME=TestExt
1158 cert_create_cert ${CERT_EXTENSIONS_DIR} ${CERTNAME} 90 ${D_CERT_EXTENSTIONS}
1159 TARG_FILE=${CERT_EXTENSIONS_DIR}/test.args
1160
1161 COUNT=0
1162 while read ARG OPT FILTERLIST; do
1163 if [ X"`echo ${ARG} | cut -c 1`" = "X#" ]; then
1164 continue
1165 fi
1166 if [ X"`echo ${ARG} | cut -c 1`" = "X!" ]; then
1167 TESTNAME="${FILTERLIST}"
1168 continue
1169 fi
1170 if [ X"${ARG}" = "X=" ]; then
1171 cert_extensions_test
1172 rm -f ${TARG_FILE}
1173 else
1174 echo ${ARG} >> ${TARG_FILE}
1175 fi
1176 done < ${QADIR}/cert/certext.txt
1177 }
1178
1179 cert_make_with_param()
1180 {
1181 DIRPASS="$1"
1182 CERTNAME="$2"
1183 MAKE="$3"
1184 SUBJ="$4"
1185 EXTRA="$5"
1186 EXPECT="$6"
1187 TESTNAME="$7"
1188
1189 echo certutil ${DIRPASS} -s "${SUBJ}" ${MAKE} ${CERTNAME} ${EXTRA}
1190 ${BINDIR}/certutil ${DIRPASS} -s "${SUBJ}" ${MAKE} ${CERTNAME} ${EXTRA}
1191
1192 RET=$?
1193 if [ "${RET}" -ne "${EXPECT}" ]; then
1194 # if we expected failure to create, then delete unexpected certificate
1195 if [ "${EXPECT}" -ne 0 ]; then
1196 ${BINDIR}/certutil ${DIRPASS} -D ${CERTNAME}
1197 fi
1198
1199 CERTFAILED=1
1200 html_failed "${TESTNAME} (${COUNT}) - ${EXTRA}"
1201 cert_log "ERROR: ${TESTNAME} - ${EXTRA} failed"
1202 return 1
1203 fi
1204
1205 html_passed "${TESTNAME} (${COUNT})"
1206 return 0
1207 }
1208
1209 cert_list_and_count_dns()
1210 {
1211 DIRPASS="$1"
1212 CERTNAME="$2"
1213 EXPECT="$3"
1214 EXPECTCOUNT="$4"
1215 TESTNAME="$5"
1216
1217 echo certutil ${DIRPASS} -L ${CERTNAME}
1218 ${BINDIR}/certutil ${DIRPASS} -L ${CERTNAME}
1219
1220 RET=$?
1221 if [ "${RET}" -ne "${EXPECT}" ]; then
1222 CERTFAILED=1
1223 html_failed "${TESTNAME} (${COUNT}) - list and count"
1224 cert_log "ERROR: ${TESTNAME} - list and count failed"
1225 return 1
1226 fi
1227
1228 LISTCOUNT=`${BINDIR}/certutil ${DIRPASS} -L ${CERTNAME} | grep -wc DNS`
1229 if [ "${LISTCOUNT}" -ne "${EXPECTCOUNT}" ]; then
1230 CERTFAILED=1
1231 html_failed "${TESTNAME} (${COUNT}) - list and count"
1232 cert_log "ERROR: ${TESTNAME} - list and count failed"
1233 return 1
1234 fi
1235
1236 html_passed "${TESTNAME} (${COUNT})"
1237 return 0
1238 }
1239
1240 cert_dump_ext_to_file()
1241 {
1242 DIRPASS="$1"
1243 CERTNAME="$2"
1244 OID="$3"
1245 OUTFILE="$4"
1246 EXPECT="$5"
1247 TESTNAME="$6"
1248
1249 echo certutil ${DIRPASS} -L ${CERTNAME} --dump-ext-val ${OID}
1250 echo "writing output to ${OUTFILE}"
1251 ${BINDIR}/certutil ${DIRPASS} -L ${CERTNAME} --dump-ext-val ${OID} > ${OUTFILE}
1252
1253 RET=$?
1254 if [ "${RET}" -ne "${EXPECT}" ]; then
1255 CERTFAILED=1
1256 html_failed "${TESTNAME} (${COUNT}) - dump to file"
1257 cert_log "ERROR: ${TESTNAME} - dump to file failed"
1258 return 1
1259 fi
1260
1261 html_passed "${TESTNAME} (${COUNT})"
1262 return 0
1263 }
1264
1265 cert_delete()
1266 {
1267 DIRPASS="$1"
1268 CERTNAME="$2"
1269 EXPECT="$3"
1270 TESTNAME="$4"
1271
1272 echo certutil ${DIRPASS} -D ${CERTNAME}
1273 ${BINDIR}/certutil ${DIRPASS} -D ${CERTNAME}
1274
1275 RET=$?
1276 if [ "${RET}" -ne "${EXPECT}" ]; then
1277 CERTFAILED=1
1278 html_failed "${TESTNAME} (${COUNT}) - delete cert"
1279 cert_log "ERROR: ${TESTNAME} - delete cert failed"
1280 return 1
1281 fi
1282
1283 html_passed "${TESTNAME} (${COUNT})"
1284 return 0
1285 }
1286
1287 cert_inc_count()
1288 {
1289 COUNT=`expr ${COUNT} + 1`
1290 }
1291
1292 ############################## cert_crl_ssl ############################
1293 # test adding subject-alt-name, dumping, and adding generic extension
1294 ########################################################################
1295 cert_san_and_generic_extensions()
1296 {
1297 EXTDUMP=${CERT_EXTENSIONS_DIR}/sanext.der
1298
1299 DIR="-d ${CERT_EXTENSIONS_DIR} -f ${R_PWFILE}"
1300 CERTNAME="-n WithSAN"
1301 MAKE="-S -t ,, -x -z ${R_NOISE_FILE}"
1302 SUBJ="CN=example.com"
1303
1304 TESTNAME="san-and-generic-extensions"
1305
1306 cert_inc_count
1307 cert_make_with_param "${DIR}" "${CERTNAME}" "${MAKE}" "${SUBJ}" \
1308 "--extSAN example.com" 255 \
1309 "create cert with invalid SAN parameter"
1310
1311 cert_inc_count
1312 cert_make_with_param "${DIR}" "${CERTNAME}" "${MAKE}" "${SUBJ}" \
1313 "--extSAN example.com,dns:www.example.com" 255 \
1314 "create cert with invalid SAN parameter"
1315
1316 TN="create cert with valid SAN parameter"
1317
1318 cert_inc_count
1319 cert_make_with_param "${DIR}" "${CERTNAME}" "${MAKE}" "${SUBJ}" \
1320 "--extSAN dns:example.com,dns:www.example.com" 0 \
1321 "${TN}"
1322
1323 cert_inc_count
1324 cert_list_and_count_dns "${DIR}" "${CERTNAME}" 0 2 \
1325 "${TN}"
1326
1327 cert_inc_count
1328 cert_dump_ext_to_file "${DIR}" "${CERTNAME}" "2.5.29.17" "${EXTDUMP}" 0 \
1329 "dump extension 2.5.29.17 to file ${EXTDUMP}"
1330
1331 cert_inc_count
1332 cert_delete "${DIR}" "${CERTNAME}" 0 \
1333 "${TN}"
1334
1335 cert_inc_count
1336 cert_list_and_count_dns "${DIR}" "${CERTNAME}" 255 0 \
1337 "expect failure to list cert, because we deleted it"
1338
1339 cert_inc_count
1340 cert_make_with_param "${DIR}" "${CERTNAME}" "${MAKE}" "${SUBJ}" \
1341 "--extGeneric ${EXTDUMP}" 255 \
1342 "create cert with invalid generic ext parameter"
1343
1344 cert_inc_count
1345 cert_make_with_param "${DIR}" "${CERTNAME}" "${MAKE}" "${SUBJ}" \
1346 "--extGeneric not-critical:${EXTDUMP}" 255 \
1347 "create cert with invalid generic ext parameter"
1348
1349 cert_inc_count
1350 cert_make_with_param "${DIR}" "${CERTNAME}" "${MAKE}" "${SUBJ}" \
1351 "--extGeneric not-critical:${EXTDUMP},2.5.29.17:critical:${EXTDUMP}" 255 \
1352 "create cert with invalid generic ext parameter"
1353
1354 TN="create cert with valid generic ext parameter"
1355
1356 cert_inc_count
1357 cert_make_with_param "${DIR}" "${CERTNAME}" "${MAKE}" "${SUBJ}" \
1358 "--extGeneric 2.5.29.17:not-critical:${EXTDUMP}" 0 \
1359 "${TN}"
1360
1361 cert_inc_count
1362 cert_list_and_count_dns "${DIR}" "${CERTNAME}" 0 2 \
1363 "${TN}"
1364
1365 cert_inc_count
1366 cert_delete "${DIR}" "${CERTNAME}" 0 \
1367 "${TN}"
1368
1369 cert_inc_count
1370 cert_list_and_count_dns "${DIR}" "${CERTNAME}" 255 0 \
1371 "expect failure to list cert, because we deleted it"
1372 }
1373
1374 ############################## cert_crl_ssl ############################
1375 # local shell function to generate certs and crls for SSL tests
1376 ########################################################################
1377 cert_crl_ssl()
1378 {
1379
1380 ################# Creating Certs ###################################
1381 #
1382 CERTFAILED=0
1383 CERTSERIAL=${CRL_GRP_1_BEGIN}
1384
1385 cd $CADIR
1386
1387 PROFILEDIR=`cd ${CLIENTDIR}; pwd`
1388 if [ "${OS_ARCH}" = "WINNT" -a "$OS_NAME" = "CYGWIN_NT" ]; then
1389 PROFILEDIR=`cygpath -m ${PROFILEDIR}`
1390 fi
1391 CRL_GRPS_END=`expr ${CRL_GRP_1_BEGIN} + ${TOTAL_CRL_RANGE} - 1`
1392 echo "$SCRIPTNAME: Creating Client CA Issued Certificates Range $CRL_GRP_1_BEGIN - $CRL_GRPS_END ==="
1393 CU_ACTION="Creating client test certs"
1394
1395 while [ $CERTSERIAL -le $CRL_GRPS_END ]
1396 do
1397 CERTNAME="TestUser$CERTSERIAL"
1398 cert_add_cert
1399 CERTSERIAL=`expr $CERTSERIAL + 1 `
1400 done
1401
1402 #################### CRL Creation ##############################
1403 CRL_GEN_RES=0
1404 echo "$SCRIPTNAME: Creating CA CRL ====================================="
1405
1406 CRL_GRP_END=`expr ${CRL_GRP_1_BEGIN} + ${CRL_GRP_1_RANGE} - 1`
1407 CRL_FILE_GRP_1=${R_SERVERDIR}/root.crl_${CRL_GRP_1_BEGIN}-${CRL_GRP_END}
1408 CRL_FILE=${CRL_FILE_GRP_1}
1409
1410 CRLUPDATE=`date -u "+%Y%m%d%H%M%SZ"`
1411 CU_ACTION="Generating CRL for range ${CRL_GRP_1_BEGIN}-${CRL_GRP_END} TestCA authority"
1412 CRL_GRP_END_=`expr ${CRL_GRP_END} - 1`
1413 crlu -d $CADIR -G -n "TestCA" -f ${R_PWFILE} \
1414 -o ${CRL_FILE_GRP_1}_or <<EOF_CRLINI
1415 update=$CRLUPDATE
1416 addcert ${CRL_GRP_1_BEGIN}-${CRL_GRP_END_} $CRL_GRP_DATE
1417 addext reasonCode 0 4
1418 addext issuerAltNames 0 "rfc822Name:caemail@ca.com|dnsName:ca.com|directoryName:CN=NSS Test CA,O=BOGUS NSS,L=Mountain View,ST=California,C=US|URI:http://ca.com|ipAddress:192.168.0.1|registerID=reg CA"
1419 EOF_CRLINI
1420 # This extension should be added to the list, but currently nss has bug
1421 #addext authKeyId 0 "CN=NSS Test CA,O=BOGUS NSS,L=Mountain View,ST=California,C=US" 1
1422 CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
1423 chmod 600 ${CRL_FILE_GRP_1}_or
1424
1425 if [ -z "$NSS_DISABLE_ECC" ] ; then
1426 CU_ACTION="Generating CRL (ECC) for range ${CRL_GRP_1_BEGIN}-${CRL_GRP_END} TestCA-ec authority"
1427
1428 # Until Bug 292285 is resolved, do not encode x400 Addresses. After
1429 # the bug is resolved, reintroduce "x400Address:x400Address" within
1430 # addext issuerAltNames ...
1431 crlu -q -d $CADIR -G -n "TestCA-ec" -f ${R_PWFILE} \
1432 -o ${CRL_FILE_GRP_1}_or-ec <<EOF_CRLINI
1433 update=$CRLUPDATE
1434 addcert ${CRL_GRP_1_BEGIN}-${CRL_GRP_END_} $CRL_GRP_DATE
1435 addext reasonCode 0 4
1436 addext issuerAltNames 0 "rfc822Name:ca-ecemail@ca.com|dnsName:ca-ec.com|directoryName:CN=NSS Test CA (ECC),O=BOGUS NSS,L=Mountain View,ST=California,C=US|URI:http://ca-ec.com|ipAddress:192.168.0.1|registerID=reg CA (ECC)"
1437 EOF_CRLINI
1438 CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
1439 chmod 600 ${CRL_FILE_GRP_1}_or-ec
1440 fi
1441
1442 echo test > file
1443 ############################# Modification ##################################
1444
1445 echo "$SCRIPTNAME: Modifying CA CRL by adding one more cert ============"
1446 sleep 2
1447 CRLUPDATE=`date -u "+%Y%m%d%H%M%SZ"`
1448 CRL_GRP_DATE=`date -u "+%Y%m%d%H%M%SZ"`
1449 CU_ACTION="Modify CRL by adding one more cert"
1450 crlu -d $CADIR -M -n "TestCA" -f ${R_PWFILE} -o ${CRL_FILE_GRP_1}_or1 \
1451 -i ${CRL_FILE_GRP_1}_or <<EOF_CRLINI
1452 update=$CRLUPDATE
1453 addcert ${CRL_GRP_END} $CRL_GRP_DATE
1454 EOF_CRLINI
1455 CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
1456 chmod 600 ${CRL_FILE_GRP_1}_or1
1457 TEMPFILES="$TEMPFILES ${CRL_FILE_GRP_1}_or"
1458 if [ -z "$NSS_DISABLE_ECC" ] ; then
1459 CU_ACTION="Modify CRL (ECC) by adding one more cert"
1460 crlu -d $CADIR -M -n "TestCA-ec" -f ${R_PWFILE} \
1461 -o ${CRL_FILE_GRP_1}_or1-ec -i ${CRL_FILE_GRP_1}_or-ec <<EOF_CRLINI
1462 update=$CRLUPDATE
1463 addcert ${CRL_GRP_END} $CRL_GRP_DATE
1464 EOF_CRLINI
1465 CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
1466 chmod 600 ${CRL_FILE_GRP_1}_or1-ec
1467 TEMPFILES="$TEMPFILES ${CRL_FILE_GRP_1}_or-ec"
1468 fi
1469
1470 ########### Removing one cert ${UNREVOKED_CERT_GRP_1} #######################
1471 echo "$SCRIPTNAME: Modifying CA CRL by removing one cert ==============="
1472 CU_ACTION="Modify CRL by removing one cert"
1473 sleep 2
1474 CRLUPDATE=`date -u "+%Y%m%d%H%M%SZ"`
1475 crlu -d $CADIR -M -n "TestCA" -f ${R_PWFILE} -o ${CRL_FILE_GRP_1} \
1476 -i ${CRL_FILE_GRP_1}_or1 <<EOF_CRLINI
1477 update=$CRLUPDATE
1478 rmcert ${UNREVOKED_CERT_GRP_1}
1479 EOF_CRLINI
1480 chmod 600 ${CRL_FILE_GRP_1}
1481 TEMPFILES="$TEMPFILES ${CRL_FILE_GRP_1}_or1"
1482 if [ -z "$NSS_DISABLE_ECC" ] ; then
1483 CU_ACTION="Modify CRL (ECC) by removing one cert"
1484 crlu -d $CADIR -M -n "TestCA-ec" -f ${R_PWFILE} -o ${CRL_FILE_GRP_1}-ec \
1485 -i ${CRL_FILE_GRP_1}_or1-ec <<EOF_CRLINI
1486 update=$CRLUPDATE
1487 rmcert ${UNREVOKED_CERT_GRP_1}
1488 EOF_CRLINI
1489 chmod 600 ${CRL_FILE_GRP_1}-ec
1490 TEMPFILES="$TEMPFILES ${CRL_FILE_GRP_1}_or1-ec"
1491 fi
1492
1493 ########### Creating second CRL which includes groups 1 and 2 ##############
1494 CRL_GRP_END=`expr ${CRL_GRP_2_BEGIN} + ${CRL_GRP_2_RANGE} - 1`
1495 CRL_FILE_GRP_2=${R_SERVERDIR}/root.crl_${CRL_GRP_2_BEGIN}-${CRL_GRP_END}
1496
1497 echo "$SCRIPTNAME: Creating CA CRL for groups 1 and 2 ==============="
1498 sleep 2
1499 CRLUPDATE=`date -u "+%Y%m%d%H%M%SZ"`
1500 CRL_GRP_DATE=`date -u "+%Y%m%d%H%M%SZ"`
1501 CU_ACTION="Creating CRL for groups 1 and 2"
1502 crlu -d $CADIR -M -n "TestCA" -f ${R_PWFILE} -o ${CRL_FILE_GRP_2} \
1503 -i ${CRL_FILE_GRP_1} <<EOF_CRLINI
1504 update=$CRLUPDATE
1505 addcert ${CRL_GRP_2_BEGIN}-${CRL_GRP_END} $CRL_GRP_DATE
1506 addext invalidityDate 0 $CRLUPDATE
1507 rmcert ${UNREVOKED_CERT_GRP_2}
1508 EOF_CRLINI
1509 CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
1510 chmod 600 ${CRL_FILE_GRP_2}
1511 if [ -z "$NSS_DISABLE_ECC" ] ; then
1512 CU_ACTION="Creating CRL (ECC) for groups 1 and 2"
1513 crlu -d $CADIR -M -n "TestCA-ec" -f ${R_PWFILE} -o ${CRL_FILE_GRP_2}-ec \
1514 -i ${CRL_FILE_GRP_1}-ec <<EOF_CRLINI
1515 update=$CRLUPDATE
1516 addcert ${CRL_GRP_2_BEGIN}-${CRL_GRP_END} $CRL_GRP_DATE
1517 addext invalidityDate 0 $CRLUPDATE
1518 rmcert ${UNREVOKED_CERT_GRP_2}
1519 EOF_CRLINI
1520 CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
1521 chmod 600 ${CRL_FILE_GRP_2}-ec
1522 fi
1523
1524 ########### Creating second CRL which includes groups 1, 2 and 3 ##############
1525 CRL_GRP_END=`expr ${CRL_GRP_3_BEGIN} + ${CRL_GRP_3_RANGE} - 1`
1526 CRL_FILE_GRP_3=${R_SERVERDIR}/root.crl_${CRL_GRP_3_BEGIN}-${CRL_GRP_END}
1527
1528
1529
1530 echo "$SCRIPTNAME: Creating CA CRL for groups 1, 2 and 3 ==============="
1531 sleep 2
1532 CRLUPDATE=`date -u "+%Y%m%d%H%M%SZ"`
1533 CRL_GRP_DATE=`date -u "+%Y%m%d%H%M%SZ"`
1534 CU_ACTION="Creating CRL for groups 1, 2 and 3"
1535 crlu -d $CADIR -M -n "TestCA" -f ${R_PWFILE} -o ${CRL_FILE_GRP_3} \
1536 -i ${CRL_FILE_GRP_2} <<EOF_CRLINI
1537 update=$CRLUPDATE
1538 addcert ${CRL_GRP_3_BEGIN}-${CRL_GRP_END} $CRL_GRP_DATE
1539 rmcert ${UNREVOKED_CERT_GRP_3}
1540 addext crlNumber 0 2
1541 EOF_CRLINI
1542 CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
1543 chmod 600 ${CRL_FILE_GRP_3}
1544 if [ -z "$NSS_DISABLE_ECC" ] ; then
1545 CU_ACTION="Creating CRL (ECC) for groups 1, 2 and 3"
1546 crlu -d $CADIR -M -n "TestCA-ec" -f ${R_PWFILE} -o ${CRL_FILE_GRP_3}-ec \
1547 -i ${CRL_FILE_GRP_2}-ec <<EOF_CRLINI
1548 update=$CRLUPDATE
1549 addcert ${CRL_GRP_3_BEGIN}-${CRL_GRP_END} $CRL_GRP_DATE
1550 rmcert ${UNREVOKED_CERT_GRP_3}
1551 addext crlNumber 0 2
1552 EOF_CRLINI
1553 CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
1554 chmod 600 ${CRL_FILE_GRP_3}-ec
1555 fi
1556
1557 ############ Importing Server CA Issued CRL for certs of first group #######
1558
1559 echo "$SCRIPTNAME: Importing Server CA Issued CRL for certs ${CRL_GRP_BEGIN} trough ${CRL_GRP_END}"
1560 CU_ACTION="Importing CRL for groups 1"
1561 crlu -D -n TestCA -f "${R_PWFILE}" -d "${R_SERVERDIR}"
1562 crlu -I -i ${CRL_FILE} -n "TestCA" -f "${R_PWFILE}" -d "${R_SERVERDIR}"
1563 CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
1564 if [ -z "$NSS_DISABLE_ECC" ] ; then
1565 CU_ACTION="Importing CRL (ECC) for groups 1"
1566 crlu -D -n TestCA-ec -f "${R_PWFILE}" -d "${R_SERVERDIR}"
1567 crlu -I -i ${CRL_FILE}-ec -n "TestCA-ec" -f "${R_PWFILE}" \
1568 -d "${R_SERVERDIR}"
1569 CRL_GEN_RES=`expr $? + $CRL_GEN_RES`
1570 fi
1571
1572 if [ "$CERTFAILED" != 0 -o "$CRL_GEN_RES" != 0 ] ; then
1573 cert_log "ERROR: SSL CRL prep failed $CERTFAILED : $CRL_GEN_RES"
1574 else
1575 cert_log "SUCCESS: SSL CRL prep passed"
1576 fi
1577 }
1578
1579 #################
1580 # Verify the we can successfully change the password on the database
1581 #
1582 cert_test_password()
1583 {
1584 CERTFAILED=0
1585 echo "$SCRIPTNAME: Create A Password Test Cert =============="
1586 cert_init_cert "${DBPASSDIR}" "Password Test Cert" 1000 "${D_DBPASSDIR}"
1587
1588 echo "$SCRIPTNAME: Create A Password Test Ca --------"
1589 ALL_CU_SUBJECT="CN=NSS Password Test CA, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
1590 cert_CA ${DBPASSDIR} PasswordCA -x "CTu,CTu,CTu" ${D_DBPASS} "1"
1591
1592 # now change the password
1593 CU_ACTION="Changing password on ${CERTNAME}'s Cert DB"
1594 certu -W -d "${PROFILEDIR}" -f "${R_PWFILE}" -@ "${R_FIPSPWFILE}" 2>&1
1595
1596 # finally make sure we can use the old key with the new password
1597 CU_ACTION="Generate Certificate for ${CERTNAME} with new password"
1598 CU_SUBJECT="CN=${CERTNAME}, E=password@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
1599 certu -S -n PasswordCert -c PasswordCA -t "u,u,u" -d "${PROFILEDIR}" -f "${R_FIPSPWFILE}" -z "${R_NOISE_FILE}" 2>&1
1600 if [ "$RET" -eq 0 ]; then
1601 cert_log "SUCCESS: PASSWORD passed"
1602 fi
1603 CU_ACTION="Verify Certificate for ${CERTNAME} with new password"
1604 certu -V -n PasswordCert -u S -d "${PROFILEDIR}" -f "${R_FIPSPWFILE}" 2>&1
1605 }
1606
1607 ###############################
1608 # test if we can distrust a certificate.
1609 #
1610 # we create 3 new certs:
1611 # 1 leaf signed by the trusted root.
1612 # 1 intermediate signed by the trusted root.
1613 # 1 leaf signed by the intermediate.
1614 #
1615 # we mark the first leaf and the intermediate as explicitly untrusted.
1616 # we then try to verify the two leaf certs for our possible usages.
1617 # All verification should fail.
1618 #
1619 cert_test_distrust()
1620 {
1621 echo "$SCRIPTNAME: Creating Distrusted Certificate"
1622 cert_create_cert ${DISTRUSTDIR} "Distrusted" 2000 ${D_DISTRUST}
1623 CU_ACTION="Mark CERT as unstrusted"
1624 certu -M -n "Distrusted" -t p,p,p -d ${PROFILEDIR} -f "${R_PWFILE}" 2>&1
1625 echo "$SCRIPTNAME: Creating Distrusted Intermediate"
1626 CERTNAME="DistrustedCA"
1627 ALL_CU_SUBJECT="CN=${CERTNAME}, E=${CERTNAME}@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
1628 cert_CA ${CADIR} "${CERTNAME}" "-c TestCA" ",," ${D_CA} 2010 2>&1
1629 CU_ACTION="Import Distrusted Intermediate"
1630 certu -A -n "${CERTNAME}" -t "p,p,p" -f "${R_PWFILE}" -d "${PROFILEDIR}" \
1631 -i "${R_CADIR}/DistrustedCA.ca.cert" 2>&1
1632
1633 # now create the last leaf signed by our distrusted CA
1634 # since it's not signed by TestCA it requires more steps.
1635 CU_ACTION="Generate Cert Request for Leaf Chained to Distrusted CA"
1636 CERTNAME="LeafChainedToDistrustedCA"
1637 CU_SUBJECT="CN=${CERTNAME}, E=${CERTNAME}@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US"
1638 certu -R -d "${PROFILEDIR}" -f "${R_PWFILE}" -z "${R_NOISE_FILE}" -o req 2>&1
1639
1640 CU_ACTION="Sign ${CERTNAME}'s Request"
1641 cp ${CERTDIR}/req ${CADIR}
1642 certu -C -c "DistrustedCA" -m 100 -v 60 -d "${P_R_CADIR}" \
1643 -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" 2>&1
1644
1645 CU_ACTION="Import $CERTNAME's Cert -t u,u,u"
1646 certu -A -n "$CERTNAME" -t "u,u,u" -d "${PROFILEDIR}" -f "${R_PWFILE}" \
1647 -i "${CERTNAME}.cert" 2>&1
1648
1649 RETEXPECTED=255
1650 CU_ACTION="Verify ${CERTNAME} Cert for SSL Server"
1651 certu -V -n ${CERTNAME} -u V -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
1652 CU_ACTION="Verify ${CERTNAME} Cert for SSL Client"
1653 certu -V -n ${CERTNAME} -u C -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
1654 CU_ACTION="Verify ${CERTNAME} Cert for Email signer"
1655 certu -V -n ${CERTNAME} -u S -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
1656 CU_ACTION="Verify ${CERTNAME} Cert for Email recipient"
1657 certu -V -n ${CERTNAME} -u R -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
1658 CU_ACTION="Verify ${CERTNAME} Cert for OCSP responder"
1659 certu -V -n ${CERTNAME} -u O -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
1660 CU_ACTION="Verify ${CERTNAME} Cert for Object Signer"
1661 certu -V -n ${CERTNAME} -u J -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
1662
1663 CERTNAME="Distrusted"
1664 CU_ACTION="Verify ${CERTNAME} Cert for SSL Server"
1665 certu -V -n ${CERTNAME} -u V -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
1666 CU_ACTION="Verify ${CERTNAME} Cert for SSL Client"
1667 certu -V -n ${CERTNAME} -u C -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
1668 CU_ACTION="Verify ${CERTNAME} Cert for Email signer"
1669 certu -V -n ${CERTNAME} -u S -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
1670 CU_ACTION="Verify ${CERTNAME} Cert for Email recipient"
1671 certu -V -n ${CERTNAME} -u R -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
1672 CU_ACTION="Verify ${CERTNAME} Cert for OCSP responder"
1673 certu -V -n ${CERTNAME} -u O -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
1674 CU_ACTION="Verify ${CERTNAME} Cert for Object Signer"
1675 certu -V -n ${CERTNAME} -u J -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1
1676 RETEXPECTED=0
1677 }
1678
1679 cert_test_ocspresp()
1680 {
1681 echo "$SCRIPTNAME: OCSP response creation selftest"
1682 OR_ACTION="perform selftest"
1683 RETEXPECTED=0
1684 ocspr ${SERVER_CADIR} "serverCA" "chain-1-serverCA" -f "${R_PWFILE}" 2>&1
1685 }
1686
1687 ############################## cert_cleanup ############################
1688 # local shell function to finish this script (no exit since it might be
1689 # sourced)
1690 ########################################################################
1691 cert_cleanup()
1692 {
1693 cert_log "$SCRIPTNAME: finished $SCRIPTNAME"
1694 html "</TABLE><BR>"
1695 cd ${QADIR}
1696 . common/cleanup.sh
1697 }
1698
1699 ################## main #################################################
1700
1701 cert_init
1702 cert_all_CA
1703 cert_extended_ssl
1704 cert_ssl
1705 cert_smime_client
1706 if [ -z "$NSS_TEST_DISABLE_FIPS" ]; then
1707 cert_fips
1708 fi
1709 cert_eccurves
1710 cert_extensions
1711 cert_san_and_generic_extensions
1712 cert_test_password
1713 cert_test_distrust
1714 cert_test_ocspresp
1715
1716 if [ -z "$NSS_TEST_DISABLE_CRL" ] ; then
1717 cert_crl_ssl
1718 else
1719 echo "$SCRIPTNAME: Skipping CRL Tests"
1720 fi
1721
1722 if [ -n "$DO_DIST_ST" -a "$DO_DIST_ST" = "TRUE" ] ; then
1723 cert_stresscerts
1724 fi
1725
1726 cert_iopr_setup
1727
1728 cert_cleanup

mercurial