本文演示如何使用 Let’s Encrypt 通过 DNS 验证申请免费泛域名(wildcard)证书,并示范如何使用腾讯 DNSPod API 自动完成 DNS 验证以实现证书自动续期。还包含在 Ubuntu 上部署、调试和定时自动执行的实用建议。
一、如何申请免费的泛域名证书1. 环境准备确保你的域名管理控制台可操作 DNS 记录(可以添加/删除 TXT 记录)。服务器能访问外网,并安装了 Certbot。如果你打算自动续期并使用 DNS API(如 DNSPod),需要在 DNS 服务商处创建 API 密钥并妥善保存。2. 安装Certbot确保在您的服务器上安装了Certbot。以下是在Ubuntu上的安装命令:
sudo apt update sudo apt install certbot3. 使用DNS验证方法申请泛域名证书Let's Encrypt支持多种验证方法,但由于泛域名证书的要求,您需要使用DNS验证方法。以下是步骤:
1)申请证书
运行以下命令,使用DNS验证请求泛域名证书(在命令中用您的实际域名替换example.com):
sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d "example.com"-d "*.example.com":表示您要申请泛域名证书。-d "example.com":这也是您的主域名(需要同时申请)。2) 添加DNS TXT记录
Certbot会提示您添加一条DNS TXT记录以进行验证。您将看到类似以下内容:
Please deploy a DNS TXT record under the name _acme-challenge.example.com with the following value: <some_random_value>根据提示,登录到您的域名注册商或DNS提供商的控制面板,添加上述TXT记录。请注意:可能需要一些时间让DNS记录生效,您可以使用dig或nslookup命令来检查TXT记录是否已正确添加。
3) 完成验证过程
添加了DNS TXT记录后,返回到命令行并按Enter键继续。Certbot将验证DNS记录并颁发SSL证书。
4) 配置和安装证书
Let's Encrypt证书通常会存储在如下路径中:
/etc/letsencrypt/live/example.com/fullchain.pem(证书)/etc/letsencrypt/live/example.com/privkey.pem(私钥)您可以将这两个文件配置到您的Web服务器(如Nginx或Apache)中。
二、自动续期-dnspod(腾讯)手动每次添加 TXT 记录很不方便,推荐用 DNS 服务商的 API 自动完成 DNS 验证。下面以 DNSPod 为例说明自动化流程。
1、获取 DNSPod API 密钥登录 DNSPod 控制台(https://console.dnspod.cn/)-> “我的账号” -> “API 密钥”,获取 SecretId/SecretKey(或 DNSPod 的 token,视版本与控制台而定)。妥善保管这些密钥,不要泄露。
2、准备 Python 虚拟环境(可选,但推荐)在虚拟环境中安装运行依赖,避免污染系统 Python。示例:python3 -m venv /home/youruser/myenvsource /home/youruser/myenv/bin/activate
(参考零错配置 Python 虚拟环境:venv/virtualenv 教程 + 常见问题与快速入门 - 水元素的文章 - 知乎
零错配置 Python 虚拟环境:venv/virtualenv 教程 + 常见问题与快速入门)pip install tccli
tccli 是腾讯云命令行工具,可以操作 DNSPod(参考:https://cloud.tencent.com/document/product/440/34012)。也可以使用官方 SDK 或其他第三方脚本(如 acme-dns、lexicon)来操作 DNS。
3、虚拟环境中安装tcclipip install tccli命令行工具 TCCLI 配置方法_腾讯云 //tccli使用方法
4、编写续期脚本供certbot回调的脚步dnspod.sh
#!/bin/bashsource /home/hewuli/myenv/bin/activate RECORD_FILE="/tmp/_acme-challenge.${CERTBOT_DOMAIN}_${CERTBOT_VALIDATION}" if ! command -v tccli >/dev/null; then echo "TCCLI is required: https://cloud.tencent.com/document/product/440" 1>&2 exit 1fi if [ "$1" = "clean" ]; then # 删除 DNS TXT 记录 RECORD_ID=$(cat ${RECORD_FILE}) if [ -n "${RECORD_ID}" ]; then tccli dnspod DeleteRecord --cli-unfold-argument \ --Domain ${CERTBOT_DOMAIN} \ --RecordId ${RECORD_ID} \ >/dev/null fi rm -f ${RECORD_FILE}else # 创建 DNS TXT 记录 RECORD_ID=$( tccli dnspod CreateRecord --cli-unfold-argument \ --Domain ${CERTBOT_DOMAIN} \ --SubDomain _acme-challenge \ --RecordType TXT \ --RecordLine 默认 \ --Value ${CERTBOT_VALIDATION} \ --TTL 600 \ | grep "RecordId" | grep -Eo "[0-9]+" ) echo ${RECORD_ID} > ${RECORD_FILE} sleep 20 # 等待 DNS 记录传播fi编写certbot续签脚本update_cert.sh
#!/bin/bashsudo certbot renew --manual --preferred-challenges=dns --manual-auth-hook "./dnspod.sh" --manual-cleanup-hook "./dnspod.sh clean" --deploy-hook "ls"5、定期执行update_cert.sh我们使用常用的方法cron
编辑 root 的 crontab(如果需要 root 权限):bashsudo crontab -e添加一行(每天 03:30):
30 3 * * * /usr/local/bin/update_cert.sh >> /var/log/update_cert.log 2>&1说明:重定向日志到 /var/log/update_cert.log,有助于排错。确保脚本可执行并在脚本顶部指定 PATH 或在 crontab 中设置 PATH,例如:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin30 3 * * * /usr/local/bin/update_cert.sh >> /var/log/update_cert.log 2>&1三、宝塔申请证书和自动续签-dnspod(方便)1. 申请证书流程打开宝塔面板,点击“网站”菜单后,点击"未部署"
申请证书
申请成功
当前的证书有效期是3个月,可以设置2个月自动更新一次
路径如下:
/www/server/panel/vhost/letsencrypt/*.http://xxx.cn/
可以查看一下:
转载请注明来自海坡下载,本文标题:《域名证书怎么查看(免费拿到泛域名证书从申请到自动续期完整教程)》
京公网安备11000000000001号
京ICP备11000001号
还没有评论,来说两句吧...