Let''s Encrypt通过DNS TXT记录来验证域名有效性

发布时间: 2021-01-19 | 标签: letsencrypt dns txt renew https ssl certbot domain

我们在使用letsencrypt获取免费的HTTPS证书的时候,letsencrypt需要对域名进行验证。默认情况下它的验证方式是这样的:

  1. certbot程序在web目录的根目录下放置一个文件。
  2. letsencrypt的服务器通过域名来访问这个文件,来验证你申请的域名是属于你的 但有时候我们想为内网的某台主机设置HTTPS,因为内网的主机无法被letsencrypt的服务器访问到,certbot --nginx certonly就会出现Connection refused的错误。

为了解决上述问题,我们可以更改验证方式,使用DNS记录来验证域名。

利用certbot获取证书

运行sudo certbot --manual --preferred-challenges dns certonly命令,输入域名并同意记录本机IP后开始获取证书,接着certbot就会弹出如下的提示:

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:

IMdfdsfsJDqBRyRaaEgPPQlEuvtxJQAgWZTIVbLuzDi8U

Once this is deployed,
-------------------------------------------------------------------------------
Press Enter to Continue

此时certbot程序就会暂停,等待我们去添加DNS记录。

自动续期

现在DNS记录验证成功了,那如何自动续期呢?毕竟letsencrypt只有3个月,经常人工需续期太累了。

certbot renew --force-renew --manual-auth-hook /root/renewdns.sh

这里是我自己的更新TXT记录脚本,仅适用于freedns{dns_cookie},{domain_id},{data_id}请自行修改。

#/bin/bash
echo CERTBOT_VALIDATION = ${CERTBOT_VALIDATION}
curl -b "dns_cookie={dns_cookie}" -d "type=TXT" -d "subdomain=_acme-challenge" -d "domain_id={domain_id}" -d "data_id={data_id}" -d "address=%22${CERTBOT_VALIDATION}%22" https://freedns.afraid.org/subdomain/save.php?step=2
sleep 600

参考文献 certbot -h certonly certbot -h renew https://certbot.eff.org/docs/using.html https://blog.csdn.net/u012291393/article/details/78768547