使用 acme.sh 配置 ssl 证书
本文简单记录使用 acme.sh 工具配置 SSL 证书的步骤 (使用 nginx 模式进行验证, 需要其他模式另行参考 acme.sh 官方文档)
以下使用 example.com 作为示例域名
- 安装 acme.sh
curl https://get.acme.sh | sh -s email=my@example.com- 设置默认CA (此处使用 Let’s Encrypt)
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt- 申请证书 (使用 nginx 模式进行验证)
~/.acme.sh/acme.sh --issue --nginx -d example.com会在
~/.acme.sh/example.com_ecc/目录下生成四个文件:
example.com.cer:域名证书example.com.key:私钥ca.cer:中间CA证书fullchain.cer:证书链文件 (包含域名证书和CA证书)
- 安装证书
~/.acme.sh/acme.sh --install-cert -d example.com --ecc \
--key-file /etc/nginx/ssl/example.com/privkey.pem \
--fullchain-file /etc/nginx/ssl/example.com/fullchain.pem \
--reloadcmd "sudo systemctl reload nginx"这一步做了两件事:
- 将生成的证书文件复制到指定目录 (其中
/etc/nginx/ssl/example.com路径可以更换为任意目录)- 该命令会作为 “安装规则”, 每次在 crontab 中触发证书续期后执行同样的命令
- 配置到 Nginx 中
server {
listen 80;
listen [::]:80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com
ssl_certificate /etc/nginx/ssl/example.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/example.com/privkey.pem;
# ... other configuration ...
}- 检查配置
nginx -t, - 重载
systemctl reload nginx
- 检查 crontab 任务 (可选)
crontab -l能看到类似以下的输出 (定时逻辑和脚本路径根据实际情况可能有所不同)
0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null