Margrop
Articles158
Tags353
Categories21
1password AC AP API AppDaemon Aqara Cron Date Diagrams.net HA HADashboard HomeAssistant IP IPv4 Java LVM‑Thin Linux MacOS MySQL NAS PPPoE PostgreSQL ProcessOn Proxmox VE SSL Shell TTS TimeMachine UML Uptime Kuma Web Windows activate ad adb adblock agent aligenie aliyun alpine annotation aop authy autofs backup baidupan bash bitwarden boot brew browser caddy2 cdn centos cert certbot charles chat chrome classloader client clone closures cloudflare cmd command commit container crontab ctyun ddsm demo dependency deploy developer devtools dll dns docker domain download draw drawio dsm dump dylib edge exception export fail2ban feign firewall-cmd flow frp frpc frps fuckgfw function gcc gfw git github golang gperftools gridea grub gvt-g hacs havcs heap hello hexo hibernate hidpi hoisting homeassistant hosts html htmlparser https idea image img img2kvm import index install intel io ios ip iptables iptv ipv6 iso java javascript jetbrains jni jnilib jpa js json jsonb jupter jupyterlab jvm k8s kernel key kid kms kodi koolproxy koolproxyr kvm lan lastpass launchctl learning lede letsencrypt linux live low-code lvm lxc m3u8 mac macos mariadb markdown maven md5 microcode mirror modem modules monitor mount mstsc mysql n2n n5105 nas network nfs node node-red nodejs nohup notepad++ npm nssm ntp oop openfeign openssl os otp ovz packet capture pat pdf pem perf ping pip plugin png powerbutton print pro proxy pve pvekclean python qcow2 qemu qemu-guest-agent rar reboot reflog remote remote desktop renew repo resize retina root route router rule rules runtime safari sata scipy-notebook scoping scp server slmgr so socks source spk spring springboot springfox ssh ssl stash string supernode svg svn swagger sync synology systemctl tap tap-windows tapwindows telecom template terminal tls token totp tvbox txt ubuntu udisk ui undertow uninstall unlocker upgrade url v2ray vhd vim vlmcsd vm vmdk web websocket wechat windows with worker wow xiaoya xml yum zip 中国电信 云电脑 交换机 光猫 公网IP 内存 内网IP 升级 启动 夏令时 天猫精灵 天翼云 安装 容器 导入 小米 常用软件 广告屏蔽 序列号 应用市场 异常 抓包 描述文件 时区 显卡虚拟化 智能家居 智能音箱 梯子 模块 流程 流程图 浏览器 漫游 激活 火绒 电信 画图 直播源 续期 网关 网络风暴 群晖 腾讯 虚拟机 证书 路由 路由器 软件管家 软路由 运维监控 镜像 镜像源 门窗传感器 防火墙 阿里云 阿里源 集客

Hitokoto

Archive

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

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

我们在使用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就会弹出如下的提示:

1
2
3
4
5
6
7
8
9
-------------------------------------------------------------------------------
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的TXT记录
    看到上述的提示后,修改域名的DNS记录,添加一条TXT记录,主机名为_acme-challenge,而其中的内容就是letsencrypt生成的随机字符串IMdfdsfsJDqBRyRaaEgPPQlEuvtxJQAgWZTIVbLuzDi8U

  • 验证成功
    添加好DNS记录后,我们可以通过dig -t txt _acme-challenge.example.com来查看域名的内容,域名生效以后,在certbot程序中下按下回车键,程序继续运行。letsencryptDNS记录验证成功,证书就申请成功了。

自动续期

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

  • 使用certboot renew命令进行续期。

    1
    certbot renew --force-renew --manual-auth-hook /root/renewdns.sh
  • --force-renew参数代表强制进行SSL证书续期

  • --manual-auth-hook参数代表自定义验证脚本,我这里脚本的内容就是更新域名DNS记录,就是上面说的主机名为_acme-challenge的TXT记录。

  • 至于这里的自定义脚本怎么写,这个就需要看DNS服务商了,每家DNS服务商都不一样的。

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

1
2
3
4
#/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

Author:Margrop
Link:http://blog.margrop.com/post/lets-encrypt-use-dns-txt-acme-challenge-domain-available/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可