acme.sh申请、续签、自动部署Let’s Encrypt证书
1.申请证书
申请有两种方式
- http方式
- dns方式
dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.
acme.sh 目前支持 ali, cloudflare, dnspod, cloudxns, godaddy 以及 aws 等数十种解析商的自动集成.
点击DNS提供商申请密钥
这里主讲dns申请证书
1.1申请前准备好DNS提供商密钥
这里以ali为例
SAVED_Ali_Key='9dvkgJmgCx0dwcsxLghgPv86'
SAVED_Ali_Secret='Qx6gVfdkxgvxvnaqyyhh0x5rdfMfDEv74tZstrvihk'
申请好保存到~/.acme.sh/account.conf中
1.2 申请证书
acme.sh --issue --dns dns_ali -d qujiazhen.com -d *.qujiazhen.com
1.3 部署证书到nginx
acme.sh --install-cert -d qujiazhen.com \
--key-file /usr/local/nginx/conf/ssl/qujiazhen.com.key \
--fullchain-file /usr/local/nginx/conf/ssl/qujiazhen.com.crt \
--reloadcmd "service nginx force-reload"
- 注意:__这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload
2.续签证书
acme.sh --renew --dns dns_ali -d qujiazhen.com -d *.qujiazhen.com \
--key-file /usr/local/nginx/conf/ssl/qujiazhen.com.key \
--fullchain-file /usr/local/nginx/conf/ssl/qujiazhen.com.crt \
--reloadcmd "service nginx force-reload"
加入--force 强制更新
acme.sh --renew --dns dns_ali -d qujiazhen.com -d *.qujiazhen.com \
--key-file /usr/local/nginx/conf/ssl/qujiazhen.com.key \
--fullchain-file /usr/local/nginx/conf/ssl/qujiazhen.com.crt \
--reloadcmd "service nginx force-reload"
3.自动更新证书
Let's 的证书有效期为60天
目前手动添加DNS获取证书的方式无法自动更新,但是使用DNS API的方式进行获取证书可以在 60 天以后会自动更新, 你无需任何操作.
强制执行更新任务
acme.sh --cron -f
4.配置nginx
在nginx的配置文件中配置如下:
server {
listen 80;
listen 443 ssl http2;
ssl_certificate /usr/local/nginx/conf/ssl/qujiazhen.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/qujiazhen.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
server_name www.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
}
log
使用dns模式获取TXT`acme.sh --issue -d example.com --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
认证DNSacme.sh --renew -d '*.example.com' --yes-I-know-dns-manual-mode-enough-go-ahead-please