?? 也談 HTTPS - 如何內測

(圖片來自 茶杯中的可愛小白鼠 壁紙 - 2560x1920-堆糖,美好生活研究所)

在上篇文章 ?? 也談 HTTPS - HTTPDNS + HTTPS 中, 我們談了如何基於 HTTPDNS 來部署無堅不摧的 HTTPS 通信環境, 這次我們討論另外一個比較頭疼的問題:部署。

小站點部署 HTTPS 相對成本低,改改前端代碼,就可以上線了。 但作為業務有一定複雜度的大網站,就沒辦法這麼暴力上線了。

前端在基礎庫中調整 Scheme 之後,仍然可能存在很多邊邊角角沒有覆蓋到。 比如 JS 裡面寫死了 HTTP,那在 HTTPS 下請求 HTTP XHR 的話, 瀏覽器會將請求攔截掉。 一旦出現這種故障,用戶就無法正常使用業務,小白用戶往往也不懂得自己將 https:// 換成 http:// 使用。

解決的思路是足夠的內測,找一群人幫我在 HTTPS 環境下使用足夠長時間。 讓他們當小白鼠,提前發現問題並解決。 於是,我把目光轉向了身邊的一大大群小白鼠,整個辦公室的同事~??

沒錯,我要強制所有同事使用 HTTPS 的公司網站,從而靠他們幫我發現問題。

靠發郵件、QQ 廣播呼籲大家使用 HTTPS 站點的方法,估計是不行的。 沒有利益驅動,推動力是不足的,我必須想點強制的手段讓他們使用 HTTPS。

有三種方法來達到這個效果:

  1. 業務系統內入口判斷用戶身份,是僱員的話,切換到 HTTPS
  2. Nginx 入口系統判斷 IP 來源,辦公室 IP 則切換到 HTTPS
  3. 改造辦公室網路,訪問站點時候,自動切換到 HTTPS

為了避免對線上業務系統、基礎設施造成影響,我採用了第三條方案。

說干就干,直接對公司網路出口設備是 ROSvia 動起刀子。

實現的原理如下:

  • A:辦公室網路的 ?? 們請求站點 堆糖,美好生活研究所
  • B:操作 RouterOS 的防火牆,將 dst 為 堆糖,美好生活研究所 IP 的 TCP 請求都 dst-nat 到新的一台 Nginx 伺服器 proxy.duitang.com
  • C:這台 proxy.duitang.com 做過特別定製,將所有針對 *.duitang.com 請做一次 302 請求,將 堆糖,美好生活研究所 請求都轉發到 堆糖,美好生活研究所
  • D:Client 收到 302 請求,重新請求 堆糖,美好生活研究所
  • E:同 B
  • F:proxy.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 mozillacaprogram.secure.force.com
      • 交叉認證了 Startcom 的證書,可以支持老版本
  • GlobalSign OV 支持
    • $349 * 6 * 8 = 16752
    • Securing a Public IP Address - SSL Certi...
    • 需要認證 RIPE ip, Webupdates
  • Geotrust 明確表示不支持 Frequently Asked Questions

現在 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 - 如何內測

歡迎關注我的微信公眾號:窺豹

weixin.qq.com/r/dTt3b_b (二維碼自動識別)

3a1ff193cee606bd1e2ea554a16353ee
推薦閱讀:

各位有什麼提高前端部署速度的經驗呢?
多台雲主機的如何實現一鍵自動部署發布?
一位老極客的眼中的開發和部署

TAG:HTTPS | 运维 | 部署 |