在申请证书时,我们按照 Certbot 官方指引,需要公网服务器,并且 HTTP 站点在线(这主要是为了完成 HTTP 质询,以证明域名所有权)。当证书签发结束后,Certbot 程序将修改 Nginx 配置文件以使用新的证书。整个过程一步到位,开箱即用,非常方便。但是存在特殊场景:我们站点在内网,未对外公开,这样便无法完成 HTTP 质询,就无法进行签发证书;我们的 Web server 未受到 Certbot 的支持,因此无法自动修改配置文件,需要我们仅申请证书,然后自行修改配置文件。总之,这些特殊场景的存在,需要我们仅申请证书,而不能使用 Certbot 的自动化配置。该笔记将记录:在 Certbot 中,仅申请证书的方法,以及相关问题的处理、解决方案。
除了 HTTP 质询,我们还能使用 DNS 质询方法:
1)在申请证书时,根据要求添加 DNS 记录;
2)然后 Let’s Encrypt(ACME Server)检查该记录,以验证域名的所有权;
3)在检查通过后,进行证书签发,并自动保存在服务器中;
4)最后,我们修改 Web server 配置,以使用该证书文件;
第一步、开始申请证书
执行如下命令开始申请证书,按照提示操作即可:
certbot certonly --manual --preferred-challenges dns -d example.com
第二步、添加解析记录
当命令执行中,会收到类似如下提示,要求添加 TXT 解析记录:
Please deploy a DNS TXT record under the name _acme-challenge.example.com with the following value: 667drNmQL3vX6bu8YZlgy0wKNBlCny8yrjF1lSaUndc Once this is deployed, Press ENTER to continue
根据上面提示,登录云商后台(比如阿里云、腾讯云等等),添加名为 _acme-challenge.example.com 的 TXT 记录,并使用 667drNmQL3vX6bu8YZlgy0wKNBlCny8yrjF1lSaUndc 作为记录值。
注意事项:
1)由于 DNS 记录不会马上生效,所以稍后再按回车键。
2)使用 dig +short -t txt _acme-challenge.example.com 命令验证 DNS 是否生效。
第三步、按下回车键
在确认 DNS 记录生效之后,按下回车键将会收到证书申请成功的提示(类似如下内容):
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-03-11. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
第四步、使用证书
正如开始所述,该方法只能申请证书,我们还需要手动修改 Web server 配置文件,以使用证书。这里不再展开。
证书文件路径:输出日志包含证书路径,这里是 /etc/letsencrypt/live/example.com/ 目录
关于证书自动续期
证书有效期为 90 天,需要在定时任务中使用 certbot renew 命令重新续期证书,但是需要附加操作,具体细节不再展开。