Let's Encrypt 使用的certbot工具需要安装一大堆系统库, 安装某些库可能会有墙的问题
所以我要介绍的是acme.sh 这个是用 Shell 脚本编写的,使用acme.sh来安装SSL证书更容易
安装 acme.sh
curl https://get.acme.sh | sh
目录里就会出现acme.sh等文件
申请 SSL 证书
acme.sh --issue -d www.anysgincom -w /usr/local/nginx/conf/ssl/
注: 命令执行时 /usr/local/nginx/conf/ssl/ 创建一个 .well-known 目录,
Let’ s Encrypt 将会通过你要注册的域名去访问那个目录来确定权限,
它可能会去访问 http://www.anysgincom/.well-known/
如果遇到.well-known无法访问请看:Let's Encrypt unauthorized 403 forbidden
执行后如果看到下列输出, 说明证书申请成功,并放到了 ~/.acme.sh/ 目录里面。
...
# Success
# Verify finished, start to sign.
# Cert success.
...
将 SSL 证书安装到网站的路径,并配置好 restart Nginx 的动作
./acme.sh --installcert -d www.anysgincom
--keypath /usr/local/nginx/conf/ssl/www.anysgincom.key
--fullchainpath /usr/local/nginx/conf/ssl/www.anysgincom.key.pem
--reloadcmd "sudo service nginx force-reload"
输出
# Installing key to:/usr/local/nginx/conf/ssl/www.anysgincom.key
# Installing full chain to:/usr/local/nginx/conf/ssl/www.anysgincom.key.pem
# Run Le_ReloadCmd: sudo service nginx force-reload
Restarting nginx: nginx.
# Reload success
生成 dhparam.pem 文件
openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
Nginx使用SSL证书
server {
listen 80 default_server;
# 新增
listen 443 ssl;
ssl_certificate /usr/local/nginx/conf/ssl/www.anysgincom.key.pem;
ssl_certificate_key /usr/local/nginx/conf/ssl/www.anysgincom.key;
# ssl_dhparam
ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
# 其他省略
}
保存重启
验证 SSL
访问 ssllabs.com 输入你的域名,检查 SSL 的配置是否都正常:
https://ssllabs.com/ssltest/analyze.html?d=www.anysgincom
后期维护
Let's Encrypt 的证书有效期是 90 天的, 到期需要重新renew申请.
使用系统定时任务来完成自动更新
# 每月更新一次
0 0 1 * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
一些注意事项
ssl_dhparam 未配置,将导致 ssllabs.com 的评分降到 B,
并给 This server supports weak Diffie-Hellman (DH) key exchange parameters. Grade capped to B. 的警告。
ssl_prefer_server_ciphers on 也是一个必要的配置,否则会 A+ 变成 A-;
如果你需要兼容老系统或老浏览器的话,你需要配置 ssl_ciphers,详见 Mozilla Server_Side_TLS 的介绍,
Nginx 里面 ssl_ciphers 默认值是 HIGH:!aNULL:!MD5; ref
本文暂时没有评论,来添加一个吧(●'◡'●)