微洽作为一个在线沟通的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
申请 大专栏 Let's Encrypt 泛域名证书申请过程 [ 江邊望海的技術人生 ]的证书会放到 ~/.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