为了方便地在各种开发环境中使用 HTTPS,我写了一份 OpenSSL 命令行工具来自动生成自签名证书。

以下是我自用的自签名 SSL 证书生成脚本,可以根据注释修改 域名有效期 等参数。

BASH
#!/bin/bash

DIR=$(pwd)
DOMAIN="localhost" # 域名
DAYS_VALID=365  # 证书有效期,单位(天)
KEY_FILE="$DIR/$DOMAIN.key"
CERT_FILE="$DIR/$DOMAIN.crt"
ALGORITHM="prime256v1" # P-256 椭圆曲线

openssl ecparam -genkey -name "$ALGORITHM" -out "$KEY_FILE"

openssl req -new -x509 -sha256 -key "$KEY_FILE" -out "$CERT_FILE" -days $DAYS_VALID -subj "/CN=$DOMAIN"

echo "Self-signed certificate generated successfully!"
echo "Private Key file: $KEY_FILE"
echo "Certificate file: $CERT_FILE"

运行#

  1. 将脚本保存为 generate-self-signed-cert.sh
  2. chmod +x generate-self-signed-cert.sh 赋予执行权限。
  3. 运行 bash generate-self-signed-cert.sh

常见问题#

自签证书可以直接用于生产环境吗?#

不建议。自签证书默认不被主流浏览器和操作系统信任,更适合本地开发、联调和测试环境。生产环境应使用受信任 CA 颁发的证书。

为什么脚本里使用 prime256v1#

prime256v1(P-256)是目前兼容性和性能都比较均衡的椭圆曲线方案,OpenSSL 与现代浏览器/客户端均有良好支持。

如何避免浏览器反复提示证书不受信?#

开发环境可以把证书加入本机信任链(或使用 mkcert 一类工具),并确保 CN/SAN 与你访问的域名一致。

参考资料#

相关阅读#

版权信息 (点击展开)
CSHARP
Copyright (c) @ Hat's Blog www.hats-land.com
Released Date @ 2024-09-22
GPG Signature: 'https://www.hats-land.com/gpg-public.txt' (F166C5F4F897B96A07390B8574E3D911A0E70FEC)

// -----BEGIN PGP MESSAGE-----
// 
// hF4DYvdQZ6S+TycSAQdAOPKcBoYz02T0Kk8UQhub4FmzqpA+L388ZapUO15B4j8w
// 24WwxT1blkN6nrFnkrA/ygYDn8F4ByfKFl8nDMb63MhUbGFngejdZROFU3u4MqZx
// 1MBOAQkCEE5lRsF4NOvbDyggR7/CiFCJ+ML+grnWN0Y+UgSRX3/Y3eiECXFZ8aMv
// kBHtp37IblBxs4+bPrPHAXWlsTaPQfHpas5NPPOFe8ZIKtF2dqgppntVPHBLpdWO
// RauQ2zmjpn2nwxyN120CQvgZFVZDk97TQ5vb3/Yi4g32Jg9cfowi/tu8kAgemDMU
// FobCbnIZvaEfoEmlmnvhKrky9dE+MIbaHAan69tswSp2MBEBMX9MO5JoempKMXpS
// oa9P7yYeD8tN6OVZyPN4g+DWJqiA9RAiRYxaR7RBAgEqU/ap0nu6nmaqVUyT2yu/
// m1+gtbbyn64cans2aLeGlMdO7lD3AFhG5ccThs3xOZEa
// =vw/7
// -----END PGP MESSAGE-----