generate-test-certs.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #!/bin/bash
  2. set -eu
  3. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
  4. # integration/testdata/https (and integration-cli/fixtures/https, which has symlinks to these files)
  5. OUT_DIR="${SCRIPT_DIR}/../integration/testdata/https"
  6. # generate CA
  7. echo 01 > "${OUT_DIR}/ca.srl"
  8. openssl genrsa -out "${OUT_DIR}/ca-key.pem"
  9. openssl req \
  10. -new \
  11. -x509 \
  12. -days 3652 \
  13. -subj "/C=US/ST=CA/L=SanFrancisco/O=Moby-project/OU=ci/CN=moby-ci/name=moby/emailAddress=moby@example.org" \
  14. -nameopt compat \
  15. -text \
  16. -key "${OUT_DIR}/ca-key.pem" \
  17. -out "${OUT_DIR}/ca.pem"
  18. # Now that we have a CA, create a server key and certificate signing request.
  19. # Make sure that `"Common Name (e.g. server FQDN or YOUR name)"` matches the hostname you will use
  20. # to connect or just use '*' for a certificate valid for any hostname:
  21. openssl genrsa -out server-key.pem
  22. openssl req -new \
  23. -subj "/C=US/ST=CA/L=SanFrancisco/O=Moby-project/OU=ci/CN=server/name=moby/emailAddress=moby@example.org" \
  24. -text \
  25. -key "${OUT_DIR}/server-key.pem" \
  26. -out "${OUT_DIR}/server.csr"
  27. # Options for server certificate
  28. cat > "${OUT_DIR}/server-options.cfg" << 'EOF'
  29. basicConstraints=CA:FALSE
  30. subjectKeyIdentifier=hash
  31. authorityKeyIdentifier=keyid,issuer
  32. extendedKeyUsage=serverAuth
  33. subjectAltName=DNS:*,DNS:localhost,IP:127.0.0.1,IP:::1
  34. EOF
  35. # Generate the certificate and sign with our CA
  36. openssl x509 \
  37. -req \
  38. -days 3652 \
  39. -extfile "${OUT_DIR}/server-options.cfg" \
  40. -CA "${OUT_DIR}/ca.pem" \
  41. -CAkey "${OUT_DIR}/ca-key.pem" \
  42. -nameopt compat \
  43. -text \
  44. -in "${OUT_DIR}/server.csr" \
  45. -out "${OUT_DIR}/server-cert.pem"
  46. # For client authentication, create a client key and certificate signing request
  47. openssl genrsa -out "${OUT_DIR}/client-key.pem"
  48. openssl req -new \
  49. -subj "/C=US/ST=CA/L=SanFrancisco/O=Moby-project/OU=ci/CN=client/name=moby/emailAddress=moby@example.org" \
  50. -text \
  51. -key "${OUT_DIR}/client-key.pem" \
  52. -out "${OUT_DIR}/client.csr"
  53. # Options for client certificate
  54. cat > "${OUT_DIR}/client-options.cfg" << 'EOF'
  55. basicConstraints=CA:FALSE
  56. subjectKeyIdentifier=hash
  57. authorityKeyIdentifier=keyid,issuer
  58. extendedKeyUsage=clientAuth
  59. subjectAltName=DNS:*,DNS:localhost,IP:127.0.0.1,IP:::1
  60. EOF
  61. # Generate the certificate and sign with our CA:
  62. openssl x509 \
  63. -req \
  64. -days 3652 \
  65. -extfile "${OUT_DIR}/client-options.cfg" \
  66. -CA "${OUT_DIR}/ca.pem" \
  67. -CAkey "${OUT_DIR}/ca-key.pem" \
  68. -nameopt compat \
  69. -text \
  70. -in "${OUT_DIR}/client.csr" \
  71. -out "${OUT_DIR}/client-cert.pem"
  72. rm "${OUT_DIR}/ca.srl"
  73. rm "${OUT_DIR}/ca-key.pem"
  74. rm "${OUT_DIR}"/*.cfg
  75. rm "${OUT_DIR}"/*.csr