SSL 证书申请及更新简易指南¶
预计阅读时长 : 9 分钟
配置域名¶
从使用广泛性和便捷性的角度考虑,网站 SSL 证书一般使用 主域名 + 通配符泛域名 的组合类型最为合适。
虽然这类免费证书有效期一般也就 60 天,但是借助自动续期工具,就能变相实现证书无限期有效。
DNS API 配置¶
本文以 10.icu
这个域名为例,一步一步进行操作指引。我们使用的工具是 acme.sh ⧉,并且域名注册和解析在 DNSPod ⧉ 上。
为了能够在 acme.sh ⧉ 中使用 DNS 验证方式,我们需要先在 DNSPod 中创建一个 API Token ⧉,然后将 Token 保存在服务器上,以便 acme.sh 脚本使用。
安装 acme.sh¶
接下去,在服务器上安装 acme.sh 脚本,其中 email
地址请更改为自己的邮箱。
安装 FAQ
如果官方地址下载太慢,可以使用国内的备用地址, https://gitcode.net/cert/cn-acme.sh/-/raw/master/install.sh?inline=false
如果提示 curl: command not found
,则需要先安装curl,然后再运行 acme.sh
安装命令。
Debian/Ubuntu及衍生系统可使用:apt install -y curl
,CentOS/RHEL/Aliyun OS等衍生系统可使用:yum install -y curl
。
虽然官方文档中说安装之后会自动在终端配置文件中添加 alias
,但是实际上可能并没有成功,因此建议手动检查和添加一下。
安装完成后重新加载 Bash 或者 Zsh,即可使 acme.sh
生效:
接下去,我们在 /root/.acme.sh/account.conf
中配置 DNSPod 中生成的 API Token,以便脚本能够自动化申请证书。
申请证书¶
安装及配置好 acme.sh
之后,就可以使用使用 Shell 脚本进行自动化申请了。因为要同时涵盖 主域名 + 通配符泛域名,因此需要 -d
参数指定两个域名。
当脚本成功执行,并显示以下输出时,SSL 证书的申请就成功了。
默认加密方式
注意:目前 acme.sh
脚本默认使用的是 ECC
证书,如果需要使用 RSA
证书,需要在命令中添加 --keylength 2048
参数。
加密方式的不同会影响生成的文件夹名称以及之后的部署参数,因此需要注意其中的细微差别。
通配符
如果域名中包含通配符,需要使用 ""
将命令中的域名包裹起来 ,以便正确识别文件名和路径。
然后,在 Nginx 配置中指定对应的证书文件路径,
Nginx 中 SSL 配置 | |
---|---|
最后,使用 systmectl restart nginx
重启 Nginx 服务,开始享受 SSL 安全之旅吧。
自动更新¶
acme.sh 安装成功后会自动创建 cron
执行定时任务,输入 crontab -l
命令,能看到如下输出:
以上的脚本会每天执行一次,检查证书的有效期,并在过期之前重新申请,确保证书能持续有效。
4 0 * * *
: 这是 Cron 的时间表达式,表示每天凌晨 0 点 4 分执行一次。"/root/.acme.sh"/acme.sh
: 这是要执行的脚本路径。它位于/root/.acme.sh
目录下,脚本名为acme.sh
。--cron
: 这是 acme.sh 的一个参数,指示脚本以 cron 模式运行,这意味着脚本会检查所有由它管理的证书,并在需要时自动续期。--home "/root/.acme.sh"
: 这个参数指定了acme.sh
的运行目录,即脚本、配置文件、证书文件存储的位置。> /var/log/ssl.log
: 这部分将任务的输出(包括标准输出和标准错误)重定向到/var/log/ssl.log
文件。
如果长时间不重启 Nginx 服务,可能出现 SSL 证书更新之后,Nginx 服务没有重新加载证书的情况,这时候可以使用 systemctl reload nginx
命令重新加载证书。
更自动化的方式是,修改 Crontab 中的指令,在最后加上 && systemctl reload nginx
,这样每次证书更新之后,都会自动重启 Nginx 服务。
证书查看¶
为了查看目前申请的证书,可以使用 acme.sh
的 list
参数:
如果自动续期没有成功,则可以使用手动方式进行续期: