2017年来了,新年新气象,公司网站也迎来了全站HTTPS。HTTPS的好处有很多,安全是第一位的(远离运营商劫持)。各个大厂商推广HTTPS也是不遗余力,Google优先收录此类链接,苹果和微信小程序接口都走HTTPS。
上一家公司因为前端CDN的问题,部署HTTPS一拖再拖。新公司网站还不大,现在部署成本低。感觉再拖延下去等以后复杂了,更加没人想干了,赶在新年前部署了。:-D
简单的Checklist:
- 申请SSL证书
- LB配置证书
- CDN配置证书
按照以上的列表,一个一个来。
申请SSL证书
公司有个业务需要使用Apple Wallet
,当时在RapidSSL
申请了公司二级域名的通配符证书。这个我向以前的同事咨询,获取到了相关的数据。
LB配置证书
公司网站运行在AWS的云服务上,AWS的负载均衡器很方便的就可以部署证书,将证书上传到IAM(Identity and Access Management)
之后,直接启用。配置好之后是HTTP和HTTPS都可以正常调用接口,过一阵子等移动端的客户端都更新之后,再强制全部跳转HTTPS。
CDN配置证书
公司CDN使用的网宿的,部署HTTPS需要上传私钥,我不太想把通配符证书上传到一个第三方的网站,好在现在腾讯云、阿里云、七牛等都联合赛门铁克,免费提供了明细域名一年时间的DV证书。免费申请了static
和media
这两个静态资源二级域名的证书,专门用于CDN。这个问题也顺利解决。
遇到的问题
安卓上证书不受信任(微信、浏览器等打不开)
macOS和iPhone上都没有问题,但是安卓手机上会出现证书不受信任的错误。看到了v2ex t183715这个帖子,判断是一样的问题,证书链不完整。通过SSL LABS检测网站,直接获得了网站带完整证书链的证书,重新部署完整证书链的证书,问题解决。
总共试了两次,第一次因为遇到上面的问题,回滚了。第二天仔细了解了一下证书链,完善之后再部署,这次成功,浏览器、微信、Android端调用都没有问题。这让我想到了以前搭建的一个内部系统出现的问题:A是使用Docker搭建的Jenkins,用于自动测试和部署;B是Gitlab仓库,用于代码管理。A、B网址均开启HSTS
,A通过OAuth插件使用B的权限管理。刚开始A访问B,证书不受信。我是手动进到A的Container里面,在JVM导入了B的证书,临时解决了问题。因为内部系统,没多想,能用了之后就没关注。现在想来应该是一样的问题。一开始的通配符证书不带完整的证书链,中级证书不会自动下载,所以不受信。