微洽作为一个在线沟通的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