certbort自动更新配置

20

要为阿里云(万网)域名配置 SSL 证书的自动续期,可以使用 Certbot 的 DNS 验证插件(如第三方插件 certbot-dns-aliyun),通过阿里云 DNS API 自动完成域名所有权验证。以下是详细步骤:


1. 准备工作:获取阿里云 API 密钥

  1. 登录阿里云控制台
    访问 阿里云控制台,进入 AccessKey 管理 页面。

  2. 创建 RAM 用户(推荐)

    • 进入 RAM 访问控制 > 用户管理 > 创建用户
    • 输入用户名(如 certbot-dns),勾选 OpenAPI 调用访问,点击确定。
    • 保存生成的 AccessKey IDAccessKey Secret
  3. 授权 RAM 用户 DNS 权限

    • 进入 RAM 访问控制 > 权限管理 > 授权
    • 选择刚创建的 RAM 用户,添加权限策略:AliyunDNSFullAccess(或最小权限:仅允许操作 DNS 解析)。

2. 安装 Certbot 和阿里云 DNS 插件

# 安装 Certbot
sudo apt install certbot

# 安装阿里云 DNS 插件(需 pip)
sudo apt install python3-pip
sudo pip3 install certbot-dns-aliyun

3. 配置阿里云 API 密钥

  1. 创建密钥配置文件
    将阿里云 AccessKey 写入安全文件(如 /etc/letsencrypt/aliyun.ini):

    sudo nano /etc/letsencrypt/aliyun.ini
    

    内容:

    dns_aliyun_access_key = YOUR_ACCESS_KEY_ID
    dns_aliyun_access_key_secret = YOUR_ACCESS_KEY_SECRET
    
  2. 设置文件权限

    sudo chmod 600 /etc/letsencrypt/aliyun.ini
    

4. 申请证书(使用阿里云 DNS 插件)

sudo certbot certonly \
  --dns-aliyun \
  --dns-aliyun-credentials /etc/letsencrypt/aliyun.ini \
  -d dpnxzj.com \
  -d *.dpnxzj.com  # 可选:通配符证书
  • 参数说明:
    • --dns-aliyun: 指定使用阿里云 DNS 插件。
    • --dns-aliyun-credentials: 指定密钥文件路径。
    • -d: 域名列表(支持通配符 *)。

5. 配置 Nginx 使用证书

参考之前的 Nginx 配置,确保 ssl_certificatessl_certificate_key 指向 Certbot 生成的路径:

server {
    listen 443 ssl;
    server_name dpnxzj.com;

    ssl_certificate /etc/letsencrypt/live/dpnxzj.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dpnxzj.com/privkey.pem;

    # 其他配置(如根目录、代理等)
    root /var/www/html;
    index index.html;
}

6. 配置自动续期

  1. 测试续期命令

    sudo certbot renew --dry-run
    
  2. 添加续期后自动重启 Nginx 的钩子
    创建续期后执行的脚本 /etc/letsencrypt/renewal-hooks/post/reload-nginx.sh

    #!/bin/bash
    systemctl reload nginx
    

    赋予执行权限:

    sudo chmod +x /etc/letsencrypt/renewal-hooks/post/reload-nginx.sh
    
  3. 设置定时任务(Cron)

    # 编辑 Cron 任务
    sudo crontab -e
    

    添加以下行(每天凌晨 3 点检查续期):

    0 3 * * * /usr/bin/certbot renew --quiet
    

7. 常见问题解决

问题 1:插件未找到错误

Could not find plugin dns-aliyun
  • 解决:检查是否已正确安装 certbot-dns-aliyun
    sudo pip3 list | grep certbot-dns-aliyun
    

问题 2:DNS 记录未生效

  • 检查阿里云 DNS 解析:确认 Certbot 自动添加的 _acme-challenge TXT 记录存在。
  • 等待 DNS 传播:某些地区 DNS 生效可能需要几分钟。

问题 3:权限不足

  • 密钥文件权限:确保 /etc/letsencrypt/aliyun.ini 权限为 600
  • RAM 用户权限:确认 RAM 用户已授予 AliyunDNSFullAccess 权限。

总结

  • 优势:通过阿里云 DNS 插件,无需手动操作即可全自动续期 SSL 证书,适合通配符证书和批量域名。
  • 关键点
    1. 使用 RAM 用户最小化 API 权限。
    2. 保护 API 密钥文件的安全。
    3. 通过 Cron 和钩子脚本实现无人值守续期。

通过以上配置,阿里云域名的 SSL 证书将完全自动化管理,无需人工干预。