OpenSSL 创建自签名证书

Jun 10, 2024 • 预计阅读时间 1 分钟

由于 RSA 2048 已经不再安全,使用 RSA 4096 又太慢了,所以这次创建使用 ECC 384 算法的自签名证书。

openssl ecparam -genkey -name secp384r1 -out privkey.pem
openssl req -new -key privkey.pem -out csr.pem -config server.cnf

Tips: 查看完整的椭圆算法列表 openssl ecparam -list_curves,推荐使用的算法是 prime256v1secp384r1,Let’s Encrypt 的 ECC 证书使用的是 prime256v1

通过预先写好的配置文件生成 csr.pem 这样就不用逐个手动输入了,server.cnf 的内容如下:

[req]
default_bits = 2048
distinguished_name = name
req_extensions = extension
prompt = no

[name]
C = "ME"
CN = "Origin CA"
emailAddress = "[email protected]"

[extension]
subjectAltName = @DNS

[DNS]
DNS.0 = *.lvv.me
DNS.1 = lvv.me

创建有效期为 15 年(356 * 15)的证书:

openssl x509 -req -in csr.pem -signkey privkey.pem -out ca.pem -days 5340
openssl x509 -req -days 5340 -in csr.pem -CA ca.pem -CAkey privkey.pem -CAcreateserial -out cert.pem

合并 cert.pemca.pem 就是 fullchain.pem

cat cert.pem ca.pem > fullchain.pem

配置 Nginx 使用自签名证书

http {
    server {
        # HTTP/3
        listen 443 quic reuseport;
        listen [::]:443 quic reuseport;

        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        server_name lvv.me;

        ssl_certificate /opt/certs/lvv.me/fullchain.pem;
        ssl_certificate_key /opt/certs/lvv.me/privkey.pem;

        location / {
            # used to advertise the availability of HTTP/3
            add_header Alt-Svc 'h3=":443"; ma=86400';
        }
    }
}
OpenSSL
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

FreeBSD 设置固定的 DNS

使用 Nginx 反向代理的时候和上游服务器也使用 SSL 连接