1. SSL证书
先来了解几个概念
1.1 数字证书
包含加密用的公钥或私钥,还有一些身份附加信息。任何人都可以使用相关工具生成自己的数字证书,用来加密文件、邮件,或用于通讯加密。
1.2 SSL 协议
用于网络通讯的加密协议。通信过程需要一份数字证书,使用里面的公钥及私钥来发送随机生成的通信秘钥。在握手完成后,SSL证书并不用于通信内容的加密。
1.3 CA 证书
CA(Certification Authority),它的中文意思是证书授权,是一个单位,来管理发放数字证书。由它发放的证书就叫CA证书,以区别于个人使用工具随意生成的数字证书,查看CA 证书,里面有两项重要内容,一个是颂发给谁,另一个是由谁颂发的。CA证书分为3类,DV 域名验证证书,OV 组织机构验证证书,EV 增强的组织机构验证证书。一般个人使用DV证书完全够了,浏览器表现为地址栏前会有绿色的小锁。
1.4 CA 证书的信任链
如果你安装并信任了一个CA 机构的证书,以他为根,同样也信任了由这个CA 机构颂发的其它组织的证书,其它组织则可以创建自己的CA中心,颂发下一级的证书,依次往下,一层层会有许多 CA 中心和数字证书。这个最上层的CA 证书,即可以称为根证书。
2. Let’s Encrypt项目简介
Let’s Encrypt是由互联网安全研究小组(ISRG)提供的服务,2015年4月9日宣布与Linux基金会合作。Let’s Encrypt项目计划是为网站提供永久免费的SSL证书,用于加速互联网从HTTP向HTTPS过度。同时,https/2也必须使用https,StartSSL、Wosign有免费DV证书,便宜的还有Rapid、Comodo证书,其他证书价格一般较高。Let’s Encrypt证书签署快、免费、支持多域名,但是现阶段签署的证书只有三个月的有效期,需要通过自动化脚本续签。Let’s Encrypt 与 IdenTrust 的 DST Root CA 做了交叉认证,兼容所有主流的浏览器。在2015年12月,Let’s Encrypt项目已经开始公测。
SSL证书的意义不仅仅在于加密,更在于颁发机构提供的担保,也就是因CA机构的过失,造成经济损失时,会有一定额度的赔偿。对于廉价或者免费的证书,这种担保就没有太大意义,CA机构也不会提供担保。廉价和免费证书的意义在于对https的普及,避免ISP对http的劫持,对流量的加密。
3. 生成Let’s Encrypt证书
Let’s Encrypt 证书生成官方推荐 certbot 这套自动化工具来实现。在官网上有比较详细的教材,根据不同的操作系统适配生成环境。这里直接在GitHub上下载certbot,certbot是一个Python 脚本。
git clone https://github.com/certbot/certbot
cd certbot
在正式安装之前,需要关闭服务器,脚本会占用80和443端口。
./letsencrypt-auto certonly
脚本会自动生成环境
Creating virtual environment…
Installing Python packages…
Installation succeeded.
在 /etc/letsencrypt/ 目录下存放着证书和证书的配置
4. 服务器部署及自动化
在证书的存放目录下有四个文件:
privkey1.pem: 证书密钥
fullchain1.pem: 带证书链的域名证书
chain1.pem: The Let’s Encrypt 证书
cert1.pem: 域名证书
修改Nginx的配置文件nginx.conf中SSL相关的参数
ssl_certificate /etc/letsencrypt/live/XXX.com/fullchain1.pem;
ssl_certificate_key /etc/letsencrypt/live/XXX.com/privkey1.pem;
由于Let’s Encrypt有效期现阶段只有90天,我们可以配置一个自动化续签的脚本certrenew.h。
#!/bin/sh
# This script renews all the Let’s Encrypt certificates with a validity < 30 days
if ! /home/letsencrypt/letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then
echo Automated renewal failed:
cat /var/log/letsencrypt/renew.log
exit 1
fi
nginx -t && nginx -s reload
开启定时任务Cron
crontab -e
编辑任务内容
@daily /home/certrenew.sh
HTTPS网站安全性能测试:SSL Server Test