为 NGINX 签发 HTTPS 证书

目前有很多 CA 可以免费签发 3 个月的 HTTPS 证书,如 Let’s Encrypt,ZeroSSL 等。推荐使用 acme.sh 脚本来管理证书,可以简化签发流程,证书到期可以自动续签。

安装

curl https://get.acme.sh | sh

Let’s Encrypt

域名验证方式有很多种,以阿里云的 DNS 认证为例:

export Ali_Key=""
export Ali_Secret=""

签发指定域名证书:

/root/.acme.sh/acme.sh --server letsencrypt --issue --dns dns_ali -d a.example.com

成功后会输出证书保存目录,而且脚本在证书到期前会自动续签证书。

安装证书到指定目录:

/root/.acme.sh/acme.sh --install-cert -d a.example.com --fullchain-file /etc/a.example.com.cer --key-file /etc/a.example.com.key --reloadcmd "systemctl restart nginx"

当证书续签后,上面的安装命令也会再次执行。

Nginx 配置

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl_certificate /etc/a.example.com.cer;
    ssl_certificate_key /etc/a.example.com.key;
    ssl_protocols TLSv1.3 TLSv1.2;

    server_name a.example.com;
    ...
}

延伸阅读