AI 摘要

本文详述基于acme.sh部署ECC/RSA双证书的技术路径,通过DNS验证实现通配符证书自动化申请,解析--keylength参数差异控制证书类型生成,最终在Nginx中并行配置双证书以提升兼容性与安全性。重点阐述双证书工作流的命令参数差异、证书存储隔离策略及SSL配置优化要点,为HTTPS服务提供弹性化加密方案。

Abstract

acme.sh实现ECCRSA双证书,前置DNS验证配置请移步至此,使用一个托管在DNS Pod国服上的域名colorfulstage.cn

export DOMAIN=colorfulstage.cn

可以先行创建存放证书的目录:

mkdir -p /home/crts/$DOMAIN

基础-单证书

若不指定--key-length 2048--key-length ec-256,则默认是ECC证书。

# 申请证书
acme.sh --issue -d ${DOMAIN} -d *.${DOMAIN} --dns dns_dp --dnssleep 30 --days 85 --force
# 安装证书
acme.sh --install-cert -d ${DOMAIN} \
--cert-file "/home/crts/$DOMAIN/cert.pem" \
--key-file "/home/crts/$DOMAIN/key.pem" \
--fullchain-file "/home/crts/$DOMAIN/fullchain.pem" \
--ecc \
--reloadcmd "systemctl restart nginx"

进阶-ECC和RSA双证书

RSA证书

# 申请证书
acme.sh --issue -d ${DOMAIN} -d *.${DOMAIN} --dns dns_dp --dnssleep 30 \
--ocsp --days 85 --keylength 2048 --force
# 安装证书
acme.sh --install-cert -d ${DOMAIN} \
--cert-file "/home/crts/$DOMAIN/cert.rsa.pem" \
--key-file "/home/crts/$DOMAIN/key.rsa.pem" \
--fullchain-file "/home/crts/$DOMAIN/fullchain.rsa.pem" \
--reloadcmd "systemctl restart nginx"

ECC证书

# 申请证书
acme.sh --issue -d ${DOMAIN} -d *.${DOMAIN} --dns dns_dp --dnssleep 30 \
--ocsp --days 85 --keylength ec-256 --force
# 安装证书
acme.sh --install-cert -d ${DOMAIN} \
--cert-file "/home/crts/$DOMAIN/cert.pem" \
--key-file "/home/crts/$DOMAIN/key.pem" \
--fullchain-file "/home/crts/$DOMAIN/fullchain.pem" \
--ecc \
--reloadcmd "systemctl restart nginx"

Nginx部署ECC+RSA双证书

如果$DOMAIN=example.com,那么Nginx配置文件示例如下:

server {
    listen 443 ssl;
    server_name example.com;

    # RSA证书配置
    ssl_certificate /home/crts/example.com/fullchain.rsa.pem;
    ssl_certificate_key /home/crts/example.com/key.rsa.pem;

    # ECC证书配置
    ssl_certificate /home/crts/example.com/fullchain.pem;
    ssl_certificate_key /home/crts/example.com/key.pem;

    # SSL配置优化
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ecdh_curve secp384r1; # 指定ECDH使用的曲线,适用于ECC
}