Hoe's Notes

使用 acme.sh 安装 Let’s Encrypt SSL 证书


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.hoehub.com -w /usr/local/nginx/conf/ssl/

注: 命令执行时 /usr/local/nginx/conf/ssl/ 创建一个 .well-known 目录,
Let’ s Encrypt 将会通过你要注册的域名去访问那个目录来确定权限,
它可能会去访问 http://www.hoehub.com/.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.hoehub.com
          --keypath       /usr/local/nginx/conf/ssl/www.hoehub.com.key
          --fullchainpath /usr/local/nginx/conf/ssl/www.hoehub.com.key.pem
          --reloadcmd     "sudo service nginx force-reload"

输出

# Installing key to:/usr/local/nginx/conf/ssl/www.hoehub.com.key
# Installing full chain to:/usr/local/nginx/conf/ssl/www.hoehub.com.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.hoehub.com.key.pem;
    ssl_certificate_key     /usr/local/nginx/conf/ssl/www.hoehub.com.key;
    # ssl_dhparam 
    ssl_dhparam             /usr/local/nginx/conf/ssl/dhparam.pem;

    # 其他省略
}

保存重启

验证 SSL

访问 ssllabs.com 输入你的域名,检查 SSL 的配置是否都正常:
https://ssllabs.com/ssltest/analyze.html?d=www.hoehub.com

验证 SSL

后期维护

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

已有 3 条评论

  1. lopsided
    lopsided   Mac OS X Mozilla Compatible

    SSL证书太贵了,Let's Encrypt开源太给力了

    时间: 2018-10-29 at 22:16 回复
  2. 安
    安   Windows 10 x64 Edition Google Chrome 69.0.3497.81

    大赞Let’s Encrypt

    时间: 2018-10-29 at 21:49 回复
    1. Hoe
      Hoe 博主   Mac OS X Safari 11.0

      https时代到来了,ssl必不可少啊

      时间: 2018-10-29 at 22:51 回复

添加新评论