generate-test-rogue-certs.sh 2.6 KB

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