使用 Certbot + 阿里云 DNS 配置泛域名 SSL 证书全流程(以 test 域名为例)
Yi
Nginx
2025-06-15
50
使用Certbot + 阿里云DNS配置泛域名SSL证书(不使用虚拟环境)
一、环境准备
确保服务器已安装以下组件(以CentOS为例):
sudo yum install certbot python3-pip nginx -y
二、安装Certbot阿里云DNS插件
直接使用pip3安装(需注意权限提示,可忽略或使用--user参数):
sudo pip3 install certbot-dns-aliyun
三、创建阿里云凭证文件
# 生成凭证文件(替换为你的AccessKey)
cat > /etc/letsencrypt/aliyun.ini << EOF
dns_aliyun_access_key = YOUR_ACCESS_KEY_ID
dns_aliyun_access_key_secret = YOUR_ACCESS_KEY_SECRET
EOF
# 设置安全权限(仅root可读)
chmod 600 /etc/letsencrypt/aliyun.ini
四、申请泛域名证书(以test.com为例)
certbot certonly \
--authenticator dns-aliyun \
--dns-aliyun-credentials /etc/letsencrypt/aliyun.ini \
--dns-aliyun-propagation-seconds 600 \
-m your@email.com \
--agree-tos \
-d "*.test.com" \
-d "test.com" \
--server https://acme-v02.api.letsencrypt.org/directory
证书路径:
/etc/letsencrypt/live/test.com/fullchain.pem # 证书
/etc/letsencrypt/live/test.com/privkey.pem # 私钥
五、配置自动续期
# 编辑cron任务
crontab -e
# 添加续期命令(每月1日0点执行,续期后重载Nginx)
0 0 1 * * certbot renew --quiet --deploy-hook "systemctl reload nginx"
# 测试续期
certbot renew --dry-run
六、Nginx配置HTTPS
# /etc/nginx/conf.d/test.com.conf
server {
listen 443 ssl http2;
server_name test.com *.test.com;
ssl_certificate /etc/letsencrypt/live/test.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/test.com/privkey.pem;
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
root /var/www/test;
index index.html;
}
# HTTP重定向到HTTPS
server {
listen 80;
server_name test.com *.test.com;
return 301 https://$host$request_uri;
}
重载Nginx:
sudo nginx -t && systemctl reload nginx
七、多域名配置(不使用虚拟环境)
若需配置多个域名(如test.com和example.com):
- 为每个域名单独申请证书:
# 申请test.com证书 certbot certonly --authenticator dns-aliyun ... -d "*.test.com" # 申请example.com证书 certbot certonly --authenticator dns-aliyun ... -d "*.example.com" - Nginx中分别配置证书路径:
# example.com的server块 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
八、常见问题与解决方案
- 依赖冲突
- 错误提示:
No matching distribution found for acme>=2.0.0 - 解决方案:升级
pip和setuptools:sudo pip3 install --upgrade pip setuptools
- 错误提示:
- 权限不足
- 确保阿里云AccessKey拥有
AliyunDNSFullAccess权限,且凭证文件权限为600。
- 确保阿里云AccessKey拥有
- 证书申请失败
- 查看日志:
cat /var/log/letsencrypt/letsencrypt.log,常见原因包括DNS解析延迟或域名重复(通配符已覆盖根域名,无需重复添加)。
- 查看日志:
九、总结
不使用虚拟环境时,直接通过pip3安装插件更简洁,但需注意系统Python依赖可能产生的冲突。配置完成后,Certbot会自动管理证书续期,Nginx通过配置不同server块支持多域名HTTPS服务。如需更高隔离性,仍建议使用虚拟环境(python3 -m venv)避免全局包冲突。