Certbot 自动生成 Lets encrypt 的方案已经被墙了,经过各种尝试之后,发现基于 amce.sh+cloudflare
的 dns 解析是最方便无痛的.
- 下载 acme 工具:
# 用root用户权限,因为涉及到操作nginx
sudo su
wget -O - https://get.acme.sh | sh -s email=my@example.com
-
域名在 Cloudflare 解析
-
在某个域名的 dashboard 面板右侧找到
Account ID
, 记录下备用。 -
进入https://dash.cloudflare.com/profile/api-tokens,生成一个 API Token,选择
Edit Zone
模版,Zone Resources 选择All Zones
,生成,
把以下的信息保存到 ~/.bashrc
export CF_Token="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Account_ID="xxxxxxxxxxxxx"
source ~/.bashrc
如果有什么不清楚的,可以参考文档: https://github.com/acmesh-official/acme.sh/wiki/dnsapi
-
签发证书,运行
acme.sh --issue --dns dns_cf -d example.com --server letsencrypt
-
安装证书到指定目录:
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.crt \
--reloadcmd "service nginx force-reload"
之后 acme 会自动添加 cron 任务,自动续期期限
- nginx 配置参考
可以在这里 在线生成一份合适的 ssl 配置
生成后,首次需要初始化 Diffie-Hellman keys:openssl dhparam -out /etc/nginx/dhparam.pem 2048
然后运行 sudo nginx -t && sudo systemctl reload nginx