generate_ssl_cert.sh 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #!/bin/bash
  2. # 生成自签名 SSL 证书脚本
  3. # 使用方法: ./scripts/generate_ssl_cert.sh
  4. # 设置证书目录
  5. CERT_DIR="certs"
  6. mkdir -p $CERT_DIR
  7. # 证书配置
  8. DOMAIN="localhost"
  9. DAYS=365
  10. KEY_SIZE=2048
  11. echo "正在生成自签名 SSL 证书..."
  12. echo "域名: $DOMAIN"
  13. echo "有效期: $DAYS 天"
  14. echo "密钥长度: $KEY_SIZE 位"
  15. echo ""
  16. # 生成私钥
  17. echo "1. 生成私钥..."
  18. openssl genrsa -out $CERT_DIR/server.key $KEY_SIZE
  19. # 生成证书签名请求 (CSR)
  20. echo "2. 生成证书签名请求..."
  21. openssl req -new -key $CERT_DIR/server.key -out $CERT_DIR/server.csr -subj "/C=CN/ST=State/L=City/O=Organization/CN=$DOMAIN"
  22. # 生成自签名证书
  23. echo "3. 生成自签名证书..."
  24. openssl x509 -req -days $DAYS -in $CERT_DIR/server.csr -signkey $CERT_DIR/server.key -out $CERT_DIR/server.crt -extensions v3_req -extfile <(
  25. cat <<EOF
  26. [req]
  27. distinguished_name = req_distinguished_name
  28. req_extensions = v3_req
  29. [req_distinguished_name]
  30. [v3_req]
  31. basicConstraints = CA:FALSE
  32. keyUsage = nonRepudiation, digitalSignature, keyEncipherment
  33. subjectAltName = @alt_names
  34. [alt_names]
  35. DNS.1 = $DOMAIN
  36. DNS.2 = *.localhost
  37. IP.1 = 127.0.0.1
  38. IP.2 = ::1
  39. EOF
  40. )
  41. # 清理临时文件
  42. rm -f $CERT_DIR/server.csr
  43. echo ""
  44. echo "✅ 证书生成完成!"
  45. echo "证书文件位置:"
  46. echo " - 私钥: $CERT_DIR/server.key"
  47. echo " - 证书: $CERT_DIR/server.crt"
  48. echo ""
  49. echo "⚠️ 注意: 这是自签名证书,浏览器会显示安全警告,这是正常的。"
  50. echo " 在生产环境中,请使用由受信任的 CA 签发的证书。"