1 #!/bin/sh 2 3 if [ -z "$OPENSSL" ]; then 4 OPENSSL=openssl 5 fi 6 export OPENSSL_CONF=$PWD/openssl.cnf 7 PASS=whatever 8 9 fail() 10 { 11 echo "$*" 12 exit 1 13 } 14 15 echo 16 echo "---[ Root CA ]----------------------------------------------------------" 17 echo 18 19 cat openssl-root.cnf | sed "s/#@CN@/commonName_default = Hotspot 2.0 Trust Root CA - 99/" > openssl.cnf.tmp 20 mkdir -p rootCA/certs rootCA/crl rootCA/newcerts rootCA/private 21 touch rootCA/index.txt 22 if [ -e rootCA/private/cakey.pem ]; then 23 echo " * Use existing Root CA" 24 else 25 echo " * Generate Root CA private key" 26 $OPENSSL req -config openssl.cnf.tmp -batch -new -newkey rsa:4096 -keyout rootCA/private/cakey.pem -out rootCA/careq.pem || fail "Failed to generate Root CA private key" 27 echo " * Sign Root CA certificate" 28 $OPENSSL ca -config openssl.cnf.tmp -md sha256 -create_serial -out rootCA/cacert.pem -days 10957 -batch -keyfile rootCA/private/cakey.pem -passin pass:$PASS -selfsign -extensions v3_ca -outdir rootCA/newcerts -infiles rootCA/careq.pem || fail "Failed to sign Root CA certificate" 29 fi 30 if [ ! -e rootCA/crlnumber ]; then 31 echo 00 > rootCA/crlnumber 32 fi 33 34 echo 35 echo "---[ Intermediate CA ]--------------------------------------------------" 36 echo 37 38 cat openssl.cnf | sed "s/#@CN@/commonName_default = w1.fi Hotspot 2.0 Intermediate CA/" > openssl.cnf.tmp 39 mkdir -p demoCA/certs demoCA/crl demoCA/newcerts demoCA/private 40 touch demoCA/index.txt 41 if [ -e demoCA/private/cakey.pem ]; then 42 echo " * Use existing Intermediate CA" 43 else 44 echo " * Generate Intermediate CA private key" 45 $OPENSSL req -config openssl.cnf.tmp -batch -new -newkey rsa:2048 -keyout demoCA/private/cakey.pem -out demoCA/careq.pem || fail "Failed to generate Intermediate CA private key" 46 echo " * Sign Intermediate CA certificate" 47 $OPENSSL ca -config openssl.cnf.tmp -md sha256 -create_serial -out demoCA/cacert.pem -days 3652 -batch -keyfile rootCA/private/cakey.pem -cert rootCA/cacert.pem -passin pass:$PASS -extensions v3_ca -infiles demoCA/careq.pem || fail "Failed to sign Intermediate CA certificate" 48 # horrible from security view point, but for testing purposes since OCSP responder does not seem to support -passin 49 openssl rsa -in demoCA/private/cakey.pem -out demoCA/private/cakey-plain.pem -passin pass:$PASS 50 fi 51 if [ ! -e demoCA/crlnumber ]; then 52 echo 00 > demoCA/crlnumber 53 fi 54 55 echo 56 echo "OCSP responder" 57 echo 58 59 cat openssl.cnf | sed "s/#@CN@/commonName_default = ocsp.w1.fi/" > openssl.cnf.tmp 60 $OPENSSL req -config $PWD/openssl.cnf.tmp -batch -new -newkey rsa:2048 -nodes -out ocsp.csr -keyout ocsp.key -extensions v3_OCSP 61 $OPENSSL ca -config $PWD/openssl.cnf.tmp -batch -md sha256 -keyfile demoCA/private/cakey.pem -passin pass:$PASS -in ocsp.csr -out ocsp.pem -days 730 -extensions v3_OCSP 62 63 echo 64 echo "---[ Server - to be revoked ] ------------------------------------------" 65 echo 66 67 cat openssl.cnf | sed "s/#@CN@/commonName_default = osu-revoked.w1.fi/" > openssl.cnf.tmp 68 $OPENSSL req -config $PWD/openssl.cnf.tmp -batch -new -newkey rsa:2048 -nodes -out server-revoked.csr -keyout server-revoked.key 69 $OPENSSL ca -config $PWD/openssl.cnf.tmp -batch -md sha256 -in server-revoked.csr -out server-revoked.pem -key $PASS -days 730 -extensions ext_server 70 $OPENSSL ca -revoke server-revoked.pem -key $PASS 71 72 echo 73 echo "---[ Server - with client ext key use ] ---------------------------------" 74 echo 75 76 cat openssl.cnf | sed "s/#@CN@/commonName_default = osu-client.w1.fi/" > openssl.cnf.tmp 77 $OPENSSL req -config $PWD/openssl.cnf.tmp -batch -new -newkey rsa:2048 -nodes -out server-client.csr -keyout server-client.key 78 $OPENSSL ca -config $PWD/openssl.cnf.tmp -batch -md sha256 -in server-client.csr -out server-client.pem -key $PASS -days 730 -extensions ext_client 79 80 echo 81 echo "---[ User ]-------------------------------------------------------------" 82 echo 83 84 cat openssl.cnf | sed "s/#@CN@/commonName_default = User/" > openssl.cnf.tmp 85 $OPENSSL req -config $PWD/openssl.cnf.tmp -batch -new -newkey rsa:2048 -nodes -out user.csr -keyout user.key 86 $OPENSSL ca -config $PWD/openssl.cnf.tmp -batch -md sha256 -in user.csr -out user.pem -key $PASS -days 730 -extensions ext_client 87 88 echo 89 echo "---[ Server ]-----------------------------------------------------------" 90 echo 91 92 ALT="DNS:osu.w1.fi" 93 ALT="$ALT,otherName:1.3.6.1.4.1.40808.1.1.1;UTF8String:engw1.fi TESTING USE" 94 ALT="$ALT,otherName:1.3.6.1.4.1.40808.1.1.1;UTF8String:finw1.fi TESTIKYTT" 95 96 cat openssl.cnf | 97 sed "s/#@CN@/commonName_default = osu.w1.fi/" | 98 sed "s/^##organizationalUnitName/organizationalUnitName/" | 99 sed "s/#@OU@/organizationalUnitName_default = Hotspot 2.0 Online Sign Up Server/" | 100 sed "s/#@ALTNAME@/subjectAltName=critical,$ALT/" \ 101 > openssl.cnf.tmp 102 echo $OPENSSL req -config $PWD/openssl.cnf.tmp -batch -sha256 -new -newkey rsa:2048 -nodes -out server.csr -keyout server.key -reqexts v3_osu_server 103 $OPENSSL req -config $PWD/openssl.cnf.tmp -batch -sha256 -new -newkey rsa:2048 -nodes -out server.csr -keyout server.key -reqexts v3_osu_server || fail "Failed to generate server request" 104 $OPENSSL ca -config $PWD/openssl.cnf.tmp -batch -md sha256 -in server.csr -out server.pem -key $PASS -days 730 -extensions ext_server -policy policy_osu_server || fail "Failed to sign server certificate" 105 106 #dump logotype details for debugging 107 $OPENSSL x509 -in server.pem -out server.der -outform DER 108 openssl asn1parse -in server.der -inform DER | grep HEX | tail -1 | sed 's/.*://' | xxd -r -p > logo.der 109 openssl asn1parse -in logo.der -inform DER > logo.asn1 110 111 112 echo 113 echo "---[ CRL ]---------------------------------------------------------------" 114 echo 115 116 $OPENSSL ca -config $PWD/openssl.cnf -gencrl -md sha256 -out demoCA/crl/crl.pem -passin pass:$PASS 117 118 echo 119 echo "---[ Verify ]------------------------------------------------------------" 120 echo 121 122 $OPENSSL verify -CAfile rootCA/cacert.pem demoCA/cacert.pem 123 $OPENSSL verify -CAfile rootCA/cacert.pem -untrusted demoCA/cacert.pem *.pem 124 125 cat rootCA/cacert.pem demoCA/cacert.pem > ca.pem 126