江邊望海的技術人生
分享真知
Let's Encrypt 泛域名证书申请过程
  1. 首先安装acme.sh
  2. 由于我的域名是阿里云购买的,需要验证所有权
  3. 申请证书
  4. 安装证书
  5. 修改 Nginx 启用 SSL
  6. 检查 Nginx 配置是否正确后重启

微洽作为一个在线沟通的WebIM,为了数据传输安全,站点支持SSL是标配。申请SSL证书首选 Let's Encrypt。今年3月14日官方宣布正式对 ACMEv2 和泛域名证书提供支持,为搭建全站的ssl提供的条件。

申请Let’s Encrypt数字证书,首选使用 acme.sh,亲测,申请和部署还是非常简单的。

首先安装acme.sh

curl https://get.acme.sh | sh

如果acme.sh 命令未找到,执行一下这个 source ~/.bashrc

由于我的域名是阿里云购买的,需要验证所有权
export Ali_Key="xxx"
export Ali_Secret="xxxxxxxx"

获取Ali_Key 和 Ali_Secret的方法,其他地方注册的请参考这里

申请证书

设置好域名的密钥后,就可以执行申请命令了。

acme.sh --issue --dns dns_ali -d xxx.com -d *.xxx.com

# 如果出现下面的提示,说明申请成功了
[Mon Apr 30 15:35:14 CST 2018] Your cert is in  /root/.acme.sh/xxx.com/xxx.com.cer
[Mon Apr 30 15:35:14 CST 2018] Your cert key is in  /root/.acme.sh/xxx.com/xxx.com.key
[Mon Apr 30 15:35:14 CST 2018] The intermediate CA cert is in  /root/.acme.sh/xxx.com/ca.cer
[Mon Apr 30 15:35:14 CST 2018] And the full chain certs is there:  /root/.acme.sh/xxx.com/fullchain.cer

申请的证书会放到 ~/.acme.sh/ 目录里面,所有的 acme.sh 配置都记录在 ~/.acme.sh/ 目录里面,acme.sh 有自动的配置读取,并按域名划分,下次你再次执行的时候,它知道你之前是用的那个目录,只需要告诉它域名就好了。

安装证书
acme.sh --installcert -d xxx.com \
             --keypath       /data/nginx/ssl/xxx.com.key  \
             --fullchainpath /data/nginx/ssl/xxx.com.key.pem \
             --reloadcmd     "/data/nginx/sbin/nginx -s reload"
# /data/nginx/ssl/ 是证书安装目录
# reloadcmd 是nginx 的reload 命令

#如果出现下面的提示,说明安装成功了
[Mon Apr 30 16:19:32 CST 2018] Installing key to:/data/nginx/ssl/xxx.com.key
[Mon Apr 30 16:19:32 CST 2018] Installing full chain to:/data/nginx/ssl/xxx.com.key.pem
[Mon Apr 30 16:19:32 CST 2018] Run reload cmd: /data/nginx/sbin/nginx -s reload
[Mon Apr 30 16:19:32 CST 2018] Reload success
修改 Nginx 启用 SSL
http {
  # 新增
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  # 兼容其他老浏览器的 ssl_ciphers 设置请访问 https://wiki.mozilla.org/Security/Server_Side_TLS

  server {
    listen 80 default_server;
    # 新增
    listen 443 ssl;
    ssl_certificate         /data/nginx/ssl/www.xxx.com.key.pem;
    ssl_certificate_key     /data/nginx/ssl/www.xxx.com.key;
    # ssl_dhparam
    ssl_dhparam             /data/nginx/ssl/dhparam.pem;

    # 其他省略
  }
}
检查 Nginx 配置是否正确后重启
/data/nginx/sbin/nginx -t
# 检查无误后,重启nginx
/data/nginx/sbin/nginx -s reload

另外,证书的有效期是三个月,证书续期可以执行

acme.sh --renew -d "xxx.com" -d "*.xxx.com" --dns