本指南详细介绍了如何使用 Let’s Encrypt 通过 DNS-01 方式 为 Cloudflare 托管的域名 申请 SSL 证书,并配置 自动续期。此外,还包括如何删除并注销 SSL 证书的完整步骤。
1. 安装 Certbot 和 Cloudflare 插件
确保 Ubuntu 服务器已更新:
sudo apt update
sudo apt upgrade -y
安装 Certbot 和 Cloudflare DNS 插件:
sudo apt install -y certbot python3-certbot-dns-cloudflare
验证 Certbot 是否安装成功:
certbot --version
2. 创建 Cloudflare API 令牌
为了使用 DNS-01 验证,你需要在 Cloudflare 生成 API 令牌。
创建 API 令牌
- 访问 Cloudflare API Token 页面
- 点击
Create Token
(创建令牌) - 选择
Edit zone DNS
作为模板 - 在
Permissions
(权限)部分:Zone
→DNS
→Edit
- 在
Zone Resources
(区域资源)部分:- 选择
Specific Zone
(特定区域),然后选择你的域名(如xxx.com
)
- 选择
- 创建并复制 API 令牌
3. 配置 Cloudflare API 令牌
在服务器上创建存放 API 令牌的文件:
mkdir -p ~/.secrets/certbot
nano ~/.secrets/certbot/cloudflare.ini
在文件中添加以下内容(替换 YOUR_CLOUDFLARE_API_TOKEN
):
dns_cloudflare_api_token = YOUR_CLOUDFLARE_API_TOKEN
保存后,设置文件权限以确保安全:
chmod 600 ~/.secrets/certbot/cloudflare.ini
4. 申请 SSL 证书
运行以下命令申请 SSL 证书:
sudo certbot certonly --dns-cloudflare \
--dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \
-d <your-domain>
成功申请后的证书路径
- 证书文件:
/etc/letsencrypt/live/<your-domain>/fullchain.pem
- 私钥文件:
/etc/letsencrypt/live/<your-domain>/privkey.pem
你可以使用以下命令查看证书:
sudo certbot certificates
5. 自动续期
测试自动续期
sudo certbot renew --dry-run
如果没有错误,则表示自动续期正常工作。
创建自动续期任务
sudo crontab -e
添加以下内容:
0 3 * * * certbot renew --quiet --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini && systemctl reload nginx
这样,系统会在每天凌晨 3:00 自动检查并续期 SSL 证书。
6. 配置 Nginx(可选)
编辑 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/<your-domain>
示例配置:
server {
listen 443 ssl;
server_name <your-domain>;
ssl_certificate /etc/letsencrypt/live/<your-domain>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<your-domain>/privkey.pem;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name <your-domain>;
return 301 https://$host$request_uri;
}
重启 Nginx 以应用更改:
sudo systemctl restart nginx
删除并注销 SSL 证书
1. 删除本地证书文件
sudo certbot delete --cert-name <your-domain>
2. 注销 Let’s Encrypt 账户(可选)
如果你不再使用 Let’s Encrypt,可以注销账户:
sudo certbot unregister
3. 移除 Cloudflare API 令牌(可选)
rm -f ~/.secrets/certbot/cloudflare.ini
4. 删除自动续期任务
打开 crontab
,删除 certbot renew
相关的行:
sudo crontab -e
5. 重启 Web 服务器(如 Nginx)
sudo systemctl restart nginx
6. 验证是否成功删除
运行以下命令检查是否仍有证书:
sudo certbot certificates
如果 <your-domain>
不在列表中,则表示证书已成功删除。
总结
- 成功申请 SSL 证书 ✅
- 配置自动续期 ✅
- Nginx 配置 HTTPS 反向代理(可选) ✅
- 安全删除 SSL 证书 ✅
你现在可以放心地在 <your-domain>
使用 HTTPS!🚀