Let’s Encrypt it

相信有建站经验的朋友都对 Let’s Encrypt 项目有所了解,Let’s Encrypt 让站长不用再花大把的钱买几大厂商的数字证书,Let’s Encrypt 提供免费的公开的数字证书,并且提供自动的及时更新技术方案。

Let’s Encrypt 只提供三个月的有效期,到期要renewal,也就是续约。缩短有效期,就要求及时更新数字证书,更安全,因此也要求有自动更新方案。要不三个月一次的更新周期会把运维人员累死。

为了您的购物安全,小贴画的技术最近就在部署https,用的就是Let’s Encrypt 签发的数字证书。目前已经实现了全站加密传输,前端和接口都加上了https。

在实施的过程中,首先遇到的问题就是阿里云的OSS加密的问题,查了一下阿里云的的管理后台,在CDN部分,有https设置选项,进去后,看到可以自己提交证书,果断决定,方案可行,本来还以为只能用阿里云的云盾证书服务呢。

在OSS加密的实施过程中,目前还是手动进行的,暂时没看到阿里云有相关接口可以做到自动续约证书,也许是我们没有找到。

手动签发Let’s Encrypt证书如下:

$ sudo certbot certonly --manual

当然,你要先装上certbot程序。

根据提示向导,过程还算顺利,在验证过程中,Let’s Encrypt要求您在服务器上,在它指定的链接上,放它指定的文件内容。

接口实施签发Let’s Encrypt证书,我们已经很熟悉,因为旧版的小贴画网站已经做过同样的过程。

之前我们是通过 acme-client gem, 自己写的capistrano rake完成的,然后用whenever gem做的定时任务,两个月执行一次自动续约,过程十分完美,以至于时间久了,我都忘记证书续约这件事了。

新版针对接口站点,我们不想那么复杂,直接用的letsencrypt_plugin gem执行生成证书,替换nginx指定证书所在目录文件,十分简单。

其实在配置nginx ssl时候有点复杂,记得配置 rails应用服务器:

config.force_ssl = true

后,一定不要忘记nginx配置:

proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;

否则,会导致https跳转无限循环而报错。

大家在实施过程中有什么问题,可以随时在微博上留言,一起讨论一下。

最后,我们都那么喜欢Let’s Encrypt,上线Let’s Encrypt贴纸是一定要的啊,喜欢Let’s Encrypt的朋友不要错过哦。