忙了一上午,终于迎来的https!所有http流量都会被重定向到https(除了某些引用站外http的资源没法加密)
Update (2017年6月1日):增加关于配置证书链的内容。
所有这些都要感谢Certbot和免费的证书签发机构Let’s encrypty。它们让加密变得更加简单。
简单记录一下做的事情
首先参考Certbot的官方指导,完成我的CentOS 7的配置。包括设置证书对应的域名,web服务器根目录之类。
然后运行命令
certbot renew --dry-run
确认证书更新没有问题之后。准备编写用于更新证书的cron脚本。
由于我使用的是lighttpd,lighttpd接受的证书文件和Let’s Encrypt提供的有点点不同,参考这篇文章,编写一个更新证书的脚本:
#!/bin/sh certdir="/path/to/cert" certbot renew # 因为lighty需要的证书格式不完全是Let's Encrypt提供的现成的格式 # 所欲需要额外的一些操作 cat $certdir/privkey.pem $certdir/cert.pem > $certdir/cert4lighttpd.pem
保存到/root/bin/cert-renew.sh。
然后编辑root的crontab
crontab -e
设置为一天检查两次更新:
#minute hour date month weekday command 00 07 * * * /root/bin/cert-renew.sh >/root/cert-renew.log 2>&1 00 19 * * * /root/bin/cert-renew.sh >/root/cert-renew.log 2>&1
参考lighttpd的这篇文档,修改配置文件使lighttpd支持https。(注意,这一部要求lighttpd在编译时支持SSL。不过从Cent OS库中安装的都是支持的)
lighttpd配置文件中包含如下内容
ssl.engine = "enable" ssl.pemfile = "/path/to/cert/cert4lighttpd.pem"
参考这篇文档,把所有http流量全部重定向到https上去。
别忘了让防火墙允许433端口的进站流量。
到这里为止,所有承认Let’s Encrypt的浏览器(Chrome、Firefox、Edge)和操作系统都应该能够使用加密流量正常访问我的网站了。
但是还有相当一部分浏览器和操作系统(写这篇文章时候的Android)不承认Let’s Encrypt,这部分操作系统或者浏览器在通过https访问我的网站时必然会弹出警告窗。不知情况的用户多半会中止对网站的继续访问。
对于像我这样使用lighttpd的服务器,应付这种情况的方法是把证书链(certificate chain)的信息写入lighttpd的配置文件。关于Let’s Encrypt的证书链详情可以看这里。
参考certbot的这个帮助文件。仔细阅读“Where are my certificates?”部分,在lighttpd的配置文件中新增一行
ssl.ca-file = "/etc/letsencrypt/live/YourDomainName/chain.pem"
重启lighttpd之后,原来弹警告窗的应该就不会再弹了。