setup.sh 5.8 KB

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