gen-sample-keys.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #!/bin/sh
  2. #
  3. # Run this script to set up a test CA, and test key-certificate pair for a
  4. # server, and various clients.
  5. #
  6. # Copyright (C) 2014 Steffan Karger <steffan@karger.me>
  7. set -eu
  8. command -v openssl >/dev/null 2>&1 || { echo >&2 "Unable to find openssl. Please make sure openssl is installed and in your path."; exit 1; }
  9. if [ ! -f openssl.cnf ]
  10. then
  11. echo "Please run this script from the sample directory"
  12. exit 1
  13. fi
  14. # Generate static key for tls-auth (or static key mode)
  15. $(dirname ${0})/../../src/openvpn/openvpn --genkey --secret ta.key
  16. # Create required directories and files
  17. mkdir -p sample-ca
  18. rm -f sample-ca/index.txt
  19. touch sample-ca/index.txt
  20. echo "01" > sample-ca/serial
  21. # Generate CA key and cert
  22. openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 \
  23. -extensions easyrsa_ca -keyout sample-ca/ca.key -out sample-ca/ca.crt \
  24. -subj "/C=KG/ST=NA/L=BISHKEK/O=OpenVPN-TEST/emailAddress=me@myhost.mydomain" \
  25. -config openssl.cnf
  26. # Create server key and cert
  27. openssl req -new -nodes -config openssl.cnf -extensions server \
  28. -keyout sample-ca/server.key -out sample-ca/server.csr \
  29. -subj "/C=KG/ST=NA/O=OpenVPN-TEST/CN=Test-Server/emailAddress=me@myhost.mydomain"
  30. openssl ca -batch -config openssl.cnf -extensions server \
  31. -out sample-ca/server.crt -in sample-ca/server.csr
  32. # Create client key and cert
  33. openssl req -new -nodes -config openssl.cnf \
  34. -keyout sample-ca/client.key -out sample-ca/client.csr \
  35. -subj "/C=KG/ST=NA/O=OpenVPN-TEST/CN=Test-Client/emailAddress=me@myhost.mydomain"
  36. openssl ca -batch -config openssl.cnf \
  37. -out sample-ca/client.crt -in sample-ca/client.csr
  38. # Create password protected key file
  39. openssl rsa -aes256 -passout pass:password \
  40. -in sample-ca/client.key -out sample-ca/client-pass.key
  41. # Create pkcs#12 client bundle
  42. openssl pkcs12 -export -nodes -password pass:password \
  43. -out sample-ca/client.p12 -inkey sample-ca/client.key \
  44. -in sample-ca/client.crt -certfile sample-ca/ca.crt
  45. # Create a client cert, revoke it, generate CRL
  46. openssl req -new -nodes -config openssl.cnf \
  47. -keyout sample-ca/client-revoked.key -out sample-ca/client-revoked.csr \
  48. -subj "/C=KG/ST=NA/O=OpenVPN-TEST/CN=client-revoked/emailAddress=me@myhost.mydomain"
  49. openssl ca -batch -config openssl.cnf \
  50. -out sample-ca/client-revoked.crt -in sample-ca/client-revoked.csr
  51. openssl ca -config openssl.cnf -revoke sample-ca/client-revoked.crt
  52. openssl ca -config openssl.cnf -gencrl -out sample-ca/ca.crl
  53. # Create DSA server and client cert (signed by 'regular' RSA CA)
  54. openssl dsaparam -out sample-ca/dsaparams.pem 2048
  55. openssl req -new -newkey dsa:sample-ca/dsaparams.pem -nodes -config openssl.cnf \
  56. -extensions server \
  57. -keyout sample-ca/server-dsa.key -out sample-ca/server-dsa.csr \
  58. -subj "/C=KG/ST=NA/O=OpenVPN-TEST/CN=Test-Server-DSA/emailAddress=me@myhost.mydomain"
  59. openssl ca -batch -config openssl.cnf -extensions server \
  60. -out sample-ca/server-dsa.crt -in sample-ca/server-dsa.csr
  61. openssl req -new -newkey dsa:sample-ca/dsaparams.pem -nodes -config openssl.cnf \
  62. -keyout sample-ca/client-dsa.key -out sample-ca/client-dsa.csr \
  63. -subj "/C=KG/ST=NA/O=OpenVPN-TEST/CN=Test-Client-DSA/emailAddress=me@myhost.mydomain"
  64. openssl ca -batch -config openssl.cnf \
  65. -out sample-ca/client-dsa.crt -in sample-ca/client-dsa.csr
  66. # Create EC server and client cert (signed by 'regular' RSA CA)
  67. openssl ecparam -out sample-ca/secp256k1.pem -name secp256k1
  68. openssl req -new -newkey ec:sample-ca/secp256k1.pem -nodes -config openssl.cnf \
  69. -extensions server \
  70. -keyout sample-ca/server-ec.key -out sample-ca/server-ec.csr \
  71. -subj "/C=KG/ST=NA/O=OpenVPN-TEST/CN=Test-Server-EC/emailAddress=me@myhost.mydomain"
  72. openssl ca -batch -config openssl.cnf -extensions server \
  73. -out sample-ca/server-ec.crt -in sample-ca/server-ec.csr
  74. openssl req -new -newkey ec:sample-ca/secp256k1.pem -nodes -config openssl.cnf \
  75. -keyout sample-ca/client-ec.key -out sample-ca/client-ec.csr \
  76. -subj "/C=KG/ST=NA/O=OpenVPN-TEST/CN=Test-Client-EC/emailAddress=me@myhost.mydomain"
  77. openssl ca -batch -config openssl.cnf \
  78. -out sample-ca/client-ec.crt -in sample-ca/client-ec.csr
  79. # Generate DH parameters
  80. openssl dhparam -out dh2048.pem 2048
  81. # Copy keys and certs to working directory
  82. cp sample-ca/*.key .
  83. cp sample-ca/*.crt .
  84. cp sample-ca/*.p12 .
  85. cp sample-ca/*.crl .