generate_certs.sh 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. if [ $# -eq 1 ]; then
  2. cd "$1" || { echo "Failed to cd into '$1'"; exit 1; }
  3. fi
  4. # Generate private key for Certificate Authority (CA)
  5. openssl genrsa -out ca.key 4096
  6. # Generate CA certificate
  7. openssl req -new -x509 -days 365 -key ca.key -out ca.pem -subj "/C=US/ST=State/L=City/O=Organization/OU=Unit/CN=MyCA"
  8. # Generate private key for Server
  9. openssl genrsa -out server.key 4096
  10. # Generate Certificate Signing Request (CSR) for Server
  11. openssl req -new -key server.key -out server.csr -subj "/C=US/ST=State/L=City/O=Organization/OU=Unit/CN=localhost"
  12. # Generate Server certificate
  13. openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.pem -extfile <(printf "subjectAltName=DNS:localhost,DNS:my-server,IP:127.0.0.1")
  14. # Generate private key for Client
  15. openssl genrsa -out client.key 4096
  16. # Generate CSR for Client
  17. openssl req -new -key client.key -out client.csr -subj "/C=US/ST=State/L=City/O=Organization/OU=Unit/CN=client"
  18. # Generate Client certificate
  19. openssl x509 -req -days 365 -in client.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out client.pem
  20. # Verify the certificates
  21. echo "Verifying Server Certificate:"
  22. openssl verify -CAfile ca.pem server.pem
  23. echo "Verifying Client Certificate:"
  24. openssl verify -CAfile ca.pem client.pem
  25. # Clean up CSR files (optional)
  26. rm server.csr client.csr
  27. # Display certificate information
  28. echo "Server Certificate Info:"
  29. openssl x509 -in server.pem -text -noout | grep "Subject:\|Issuer:\|DNS:\|IP Address:"
  30. echo "Client Certificate Info:"
  31. openssl x509 -in client.pem -text -noout | grep "Subject:\|Issuer:"
  32. # Final files you'll need:
  33. # - ca.pem (Certificate Authority certificate)
  34. # - server.key (Server private key)
  35. # - server.pem (Server certificate)
  36. # - client.key (Client private key)
  37. # - client.pem (Client certificate)