适用环境
- 操作系统:Ubuntu 20.04+/CentOS 7+
- Web 服务:Nginx≥1.18 / Apache≥2.4
- 证书类型:泛域名证书(*.yourdomain.com)
- 托管商要求:支持 API 操作的 DNS 服务商
一、基础环境配置
- 系统依赖安装
bashbash 复制 bash 复制# Ubuntu
sudo apt update && sudo apt install -y curl cron socat
# CentOS
sudo yum install -y epel-release
sudo yum install -y curl cronie socat
- 域名验证准备
- 拥有域名控制权(如 yourdomain.com)
- 在 DNS 服务商处创建 API 密钥(阿里云 /Cloudflare/DNSPod)
二、证书工具安装(二选一)
方案 A:acme.sh(CLI 工具)
bashbash 复制 markdown 复制# 安装证书客户端
curl https://get.acme.sh | sh -s email=admin@yourdomain.com
source ~/.bashrc # 或重新登录终端
# 配置证书颁发机构
acme.sh --set-default-ca --server letsencrypt # 默认使用 Let's Encrypt
方案 B:Certbot(带插件管理)
bashbash 复制 bash 复制# Ubuntu
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
# CentOS
sudo yum install certbot python3-certbot-nginx
三、DNS 服务商 API 配置
以 Cloudflare 为例:
- 登录 Cloudflare 控制台生成 Global API Key
- 配置环境变量:
bashbash 复制 bash 复制export CF_Key="your_api_key"
export CF_Email="admin@yourdomain.com"
echo "export CF_Key='your_api_key'" >> ~/.bashrc
echo "export CF_Email='admin@yourdomain.com'" >> ~/.bashrc
四、泛域名证书签发
bashbash 复制 bash 复制# 使用 acme.sh 申请(通配符证书)acme.sh --issue --dns dns_cf \
-d yourdomain.com \
-d *.yourdomain.com \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
五、Nginx 证书部署
- 创建证书目录
bashbash 复制 bash 复制sudo mkdir -p /etc/ssl/yourdomain.com/{live,archive}
- 安装证书
bashbash 复制 bash 复制acme.sh --install-cert -d yourdomain.com \
--key-file /etc/ssl/yourdomain.com/live/privkey.pem \
--fullchain-file /etc/ssl/yourdomain.com/live/fullchain.pem \
--reloadcmd "sudo systemctl reload nginx"
- Nginx 配置示例
nginxnginx 复制 nginx 复制server {
listen 443 ssl http2;
server_name app.yourdomain.com;
ssl_certificate /etc/ssl/yourdomain.com/live/fullchain.pem;
ssl_certificate_key /etc/ssl/yourdomain.com/live/privkey.pem;
# 安全增强配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
}
六、自动化管理
- 自动续期验证
bashbash 复制 bash 复制crontab -l | grep acme.sh # 应存在每日自动任务
- 手动触发续期
bashbash 复制 bash 复制acme.sh --renew -d yourdomain.com --force
- 证书监控(Prometheus 示例)
yamlyaml 复制 yaml 复制- job_name: 'ssl_monitor'
static_configs:
- targets: ['yourdomain.com:443']
七、高级配置
- 多服务器同步
bashbash 复制 bash 复制# 使用 rsync 同步证书
acme.sh --install-cert -d yourdomain.com \
--reloadcmd "rsync -az /etc/ssl/yourdomain.com/ user@backup-server:/ssl/"
- 证书链优化
bashbash 复制 bash 复制# 合并中间证书
cat /etc/ssl/yourdomain.com/live/fullchain.pem \
/etc/ssl/yourdomain.com/live/chain.pem > combined.pem
八、故障排查指南
现象 | 解决方案 |
---|---|
DNS 验证失败 | 执行 dig TXT _acme-challenge.yourdomain.com 检查解析 |
443 端口不可用 | 检查防火墙:sudo ufw allow 443/tcp |
证书不生效 | 验证证书链:openssl s_client -connect yourdomain.com:443 -showcerts |
工具对比
工具 | 优势 | 适用场景 |
---|---|---|
acme.sh | 轻量级、支持多 DNS 服务商 | 单服务器快速部署 |
Certbot | 官方维护、Web 插件丰富 | 复杂环境管理 |
Certimate | 可视化操作、多用户协作 | 企业级证书中台 |
▶ 证书状态检测工具:https://csr.chinassl.net/ssl-checker.html
▶ Let’s Encrypt 官方文档:https://letsencrypt.org/docs/
正文完