全站 HTTPS 没你想象的那么简单

对自己无知这件事本身的无知真的挺可怕
认知偏差现象一直存在于我们每个人身上,谁也避免不掉,不过是有的人了解这件事儿,有的人不怎么知道而已,这就产生了「无知而不自知」的认知偏差 。当然,这时候你自己忽悠自己倒没什么,顶多让自己每天感觉自己挺厉害的,沉浸于虚幻的优越感中,以为自己比大多数人都优秀,这倒不是一件什么坏事情,但是,如果你和别人沟通交流中展现出来,那挺可怕的,况且有时候你自己并不知道,达克效应(Dunning-Kruger Effect)描述的就是这种现象 。避免这种现象在自己身上的存在,没什么特殊方法,多学习那些本身就极其优秀的人是怎么思考和生存的,表现出谦逊算其中一种,还有就是多读书 。就这样...
全站 HTTPS 必要准备工作做任何一件事情最好的情况就是你刚好做过,这倒没什么可说的,因为第二次总是要比第一次好 。如果你没做过这件事怎么办?没事,去看看别人怎么做的 。
升级全站 HTTPS 工作在两年前左右应该是讨论最火的了,在2014年底,google Chromium 安全团队提议将所有的 HTTP 协议网站标注为不安全,市场占有率较高的 Chrome 浏览器也是这么做的,所以在接下来一段时间内,各个大厂、大公司都逐步升级了 HTTPS 协议,当然,去年 Apple 也宣布所有应用开发者必须在 2017 年 1 月 1 日之前实现所有的 App 接入安全地服务器,即网络传输协议使用 HTTPS 。所以呢,我们就简单的看一下国内这些顶尖互联网企业如何实现全站 HTTPS 的:

  • 淘宝启用全站HTTPS后不仅更安全而且更快 看淘宝是如何做到的
  • 百度大型网站的HTTPS实践一:HTTPS协议和原理HTTPS对网站性能seo有哪些影响?大型网站HTTPS实践三:基于协议和配置的优化大型网站的HTTPS实践四:协议层以外的实践
看完这些文章后,估计你就可以知道要买 SSL 证书了,也可以去买 SSL 证书了,具体是使用各个云服务商家的免费单域名证书,还是业务需要更强大的泛域名证书、OV 证书等等,你就需要看看我写的这两篇文章了(好不要脸吖..):
  • 让你的网站免费支持 HTTPS 及 Nginx 平滑升级
  • 一篇文章让你搞懂 SSL 证书
分析整个系统制定计划有计划才能没变化 。其实也没什么要做的,只有一件事,你接下来要做的唯一一件事就是了解整个系统 。统计出所有已用到的域名,需要购买什么类型域名证书,是二级域名、三级域名还是各种乱七八糟的域名,自己分析;再然后,了解每个域名背后的服务是如何运作的,这里边会涉及到前端页面、一些资源文件的固定协议引用,后端代码中关于协议获取是写死的还是动态的,数据库中存储的网址链接等等,这些统统要考虑到 。
分析完系统后,其中肯定会存在混合协议访问请求,HTTPS 下浏览器会拦截掉所有 HTTP 请求的,不同页面间跳转、不同服务域名间跳转如果是以固定的 HTTP 协议写死的,要支持全站 HTTPS 协议,首要解决的是以当前协议来灵活的区分不同域名服务间的跳转 。其次,HTTPS 协议首次请求存在多次握手,因此网络耗时变长问题,可能会影响系统访问速度 。所以,我是建议计划分为两个阶段来进行全站 HTTPS 升级:
  • 一阶段:将目前所有域名配置为支持 HTTP 和 HTTPS 两种协议,不做 HTTP 请求强制 HTTPS 跳转 。在验证及测试完成 HTTPS 下,系统所有服务以及访问速度均无问题后,进行实施二阶段计划 。
  • 二阶段:在上阶段不强制 HTTPS 访问验证通过后,域名做强制 HTTPS 协议 。即当用户以 HTTP 协议访问系统时,如用 Nginx 做强制 301 跳转到 HTTPS 协议,做到全站 HTTPS 安全访问协议 。
不出意外,按照这两步计划,应该可以稳妥是进行全站 HTTPS 升级工作,当然,期间不可避免的会踩一些坑,因为每个公司业务不同、系统环境不同等原因,都会遇到不可预估的问题,一个个解决就行了 。我下面会写一下升级期间共性的、也就是每个人都必须要踩的坑和如何解决这些问题 。
十条注意事项1.浏览器拦截混合访问请求由于浏览器安全规则,在 HTTPS 请求下通过 JAVAScript 请求 HTTP 请求或引入 HTTP 协议资源文件,会报“Mixed Content”错误,导致请求无法继续 。
全站 HTTPS 没你想象的那么简单

文章插图
 
Mixed Content: The page at 'https://domain.com/' was loaded over HTTPS, but requested an insecure script 'http://domain.com/'. This request has been blocked; the content must be served over HTTPS.


推荐阅读