由于 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
,推荐使用的算法是 prime256v1
和 secp384r1
,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.pem
和 ca.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';
}
}
}