🔑 也谈 HTTPS - 如何内测
(图片来自 茶杯中的可爱小白鼠 壁纸 - 2560x1920-堆糖,美好生活研究所)
在上篇文章 🔒 也谈 HTTPS - HTTPDNS + HTTPS 中, 我们谈了如何基于 HTTPDNS 来部署无坚不摧的 HTTPS 通信环境, 这次我们讨论另外一个比较头疼的问题:部署。
小站点部署 HTTPS 相对成本低,改改前端代码,就可以上线了。 但作为业务有一定复杂度的大网站,就没办法这么暴力上线了。
前端在基础库中调整 Scheme 之后,仍然可能存在很多边边角角没有覆盖到。 比如 JS 里面写死了 HTTP,那在 HTTPS 下请求 HTTP XHR
的话, 浏览器会将请求拦截掉。 一旦出现这种故障,用户就无法正常使用业务,小白用户往往也不懂得自己将 https://
换成 http://
使用。
解决的思路是足够的内测,找一群人帮我在 HTTPS 环境下使用足够长时间。 让他们当小白鼠,提前发现问题并解决。 于是,我把目光转向了身边的一大大群小白鼠,整个办公室的同事~😄
没错, ** 我要强制所有同事使用 HTTPS 的公司网站** ,从而靠他们帮我发现问题。
靠发邮件、QQ 广播呼吁大家使用 HTTPS 站点的方法,估计是不行的。 没有利益驱动,推动力是不足的,我必须想点强制的手段让他们使用 HTTPS。
有三种方法来达到这个效果:
- 业务系统内入口判断用户身份,是雇员的话,切换到 HTTPS
- Nginx 入口系统判断 IP 来源,办公室 IP 则切换到 HTTPS
- 改造办公室网络,访问站点时候,自动切换到 HTTPS
为了避免对线上业务系统、基础设施造成影响,我采用了第三条方案。
说干就干,直接对公司网络出口设备是 ROSvia 动起刀子。
实现的原理如下:
- A:办公室网络的 🐁 们请求站点 http://www.duitang.com
- B:操作 RouterOS 的防火墙,将 dst 为 www.duitang.com IP 的 TCP 请求都 dst-nat 到新的一台 Nginx 服务器 proxy.duitang.com
- C:这台 proxy.duitang.com 做过特别定制,将所有针对 *.duitang.com 请做一次 302 请求,将 http://www.duitang.com 请求都转发到 https://www.duitang.com
- D:Client 收到 302 请求,重新请求 https://www.duitang.com
- E:同 B
- F:proxy.duitang.com 将请求转发到真正的 www.duitang.com 服务器
PS:这里要小心的是,需要配置 proxy.duitang.com 的 resolver
避免 Nginx 内部请求。
流程图:
这样操作之后,在办公室网络下,所有访问公司网站的 HTTP 流量都会跳转到 HTTPS。
PS:我原始方案想使用 ROS 的 L7 防火墙 直接抓 HTTP 包,match HTTP 头数据, 再修改返回的 TCP 包。 但测试下来发现 ROS L7 Firewall 不支持写 TCP 数据。 所以我最后只能使用中间跳转的方案。
如果不是使用 ROS 的朋友也不用担心,原理和流程已经讲清楚了, 无非是使用 Cisco / Huawei 网络设备的防火墙命令实现需要的功能。
上篇文章发完之后,好几个朋友问我 IP 证书供应商的事情。我就简单说一下我了解的情况。
国内 SSL 证书供应商们会给他们兜售的产品起各种各样花里胡哨的名字, 什么超真、超强、超安、超快,国外有些企业也会搞什么 Pro / Super / Premium / Essential, 其实 SSL 证书的区分,笼统来说就三种类型:DV / OV / EV, Domain Validation / Orgnization Validation / Extented Validation。 他们区别除了字面意思,就是所有权审核流程一个比一个麻烦。
想基于 IP 直接搞所有权审核,要看对应供应商的证书是否支持。 去年年底我做了一个调查,支持 IP 证书的厂家如下:
- Rapid SSL 不支持 ip
- wosign OV 级别支持
- OV 需要验证 需要验证申请单位的营业执照、等其他证明文件
- 浏览器支持情况
- Firefox 32 https://mozillacaprogram.secure.force.com/CA/IncludedCACertificateReport
- 交叉认证了 Startcom 的证书,可以支持老版本
- GlobalSign OV 支持
- Geotrust 明确表示不支持 https://www.geocerts.com/faq#Q47
现在 Wosign 爆了丑闻,于是支持 IP SSL 又少了一家。 只剩下 GlobalSign 了,但是 GlobalSign OV 又贵审核又麻烦, 不知道看到此文的大神们有没有更好的推荐。
参考链接:
- domain name - SSL certificate for a public IP address? - Server Fault
- ROS Filter
- ROS NAT
- ROS Firewall L7
- How to block and redirect website - MikroTik RouterOS
- Mikrotik IP REDIRECT using firewall - MikroTik RouterOS
- Redirect all traffic from a spesific ip number to a web page - MikroTik RouterOS
原文链接: https://blog.alswl.com/2016/12/https-2/
3a1ff193cee606bd1e2ea554a16353ee
欢迎关注我的微信公众号:窥豹
Tips: Until now, everytime you want to store your article, we will help you store it in Filecoin network. In the future, you can store it in Filecoin network using your own filecoin.
Support author:
Author's Filecoin address:
Or you can use Likecoin to support author: