風雨同舟科技有限公司

十年經(jīng)驗 聚焦客戶 用心溝通

服務熱線 400-028-5186

整站采用HTTPS沒(méi)你想象的那麼(me)簡單

發(fā)布時間:2017-08-24    來源:風雨同舟科技

  對(duì)自己無知這(zhè)件事(shì)本身的無知真的挺可怕  成(chéng)都(dōu)網站設計
  認知偏差現象一直存在于我們每個人身上,誰也避免不掉,不過(guò)是有的人了解這(zhè)件事(shì)兒,有的人不怎麼(me)知道(dào)而已,這(zhè)就産生了「無知而不自知」的認知偏差。當然,這(zhè)時候你自己忽悠自己倒沒(méi)什麼(me),頂多讓自己每天感覺自己挺厲害的,沉浸于虛幻的優越感中,以爲自己比大多數人都(dōu)優秀,這(zhè)倒不是一件什麼(me)壞事(shì)情,但是,如果你和别人溝通交流中展現出來,那挺可怕的,況且有時候你自己并不知道(dào),達克效應(Dunning-Kruger Effect)描述的就是這(zhè)種(zhǒng)現象。
  避免這(zhè)種(zhǒng)現象在自己身上的存在,沒(méi)什麼(me)特殊方法,多學(xué)習那些本身就極其優秀的人是怎麼(me)思考和生存的,表現出謙遜算其中一種(zhǒng),還(hái)有就是多讀書。就這(zhè)樣(yàng)...
  全站 HTTPS 必要準備工作
  做任何一件事(shì)情最好(hǎo)的情況就是你剛好(hǎo)做過(guò),這(zhè)倒沒(méi)什麼(me)可說的,因爲第二次總是要比第一次好(hǎo)。如果你沒(méi)做過(guò)這(zhè)件事(shì)怎麼(me)辦?沒(méi)事(shì),去看看别人怎麼(me)做的。
  升級全站 HTTPS 工作在兩(liǎng)年前左右應該是讨論最火的了,在2014年底,Google Chromium 安全團隊提議將(jiāng)所有的 HTTP 協議網站标注爲不安全,市場占有率較高的 Chrome 浏覽器也是這(zhè)麼(me)做的,所以在接下來一段時間内,各個大廠、大公司都(dōu)逐步升級了 HTTPS 協議,當然,去年 Apple 也宣布所有應用開(kāi)發(fā)者必須在 2017 年 1 月 1 日之前實現所有的 App 接入安全地服務器,即網絡傳輸協議使用 HTTPS。所以呢,我們就簡單的看一下國(guó)内這(zhè)些頂尖互聯網企業如何實現全站 HTTPS 的:
  淘寶
  啓用全站HTTPS後(hòu)不僅更安全而且更快 看淘寶是如何做到的
  百度
  大型網站的HTTPS實踐一:HTTPS協議和原理
  HTTPS對(duì)網站性能(néng)SEO有哪些影響?
  大型網站HTTPS實踐三:基于協議和配置的優化
  大型網站的HTTPS實踐四:協議層以外的實踐
  看完這(zhè)些文章後(hòu),估計你就可以知道(dào)要買 SSL 證書了,也可以去買 SSL 證書了,具體是使用各個雲服務商家的免費單域名證書,還(hái)是業務需要更強大的泛域名證書、OV 證書等等,你就需要看看我寫的這(zhè)兩(liǎng)篇文章了(好(hǎo)不要臉吖..):
  讓你的網站免費支持 HTTPS 及 Nginx 平滑升級
  一篇文章讓你搞懂 SSL 證書
  分析整個系統制定計劃
  有計劃才能(néng)沒(méi)變化。其實也沒(méi)什麼(me)要做的,隻有一件事(shì),你接下來要做的唯一一件事(shì)就是了解整個系統。統計出所有已用到的域名,需要購買什麼(me)類型域名證書,是二級域名、三級域名還(hái)是各種(zhǒng)亂七八糟的域名,自己分析;再然後(hòu),了解每個域名背後(hòu)的服務是如何運作的,這(zhè)裡(lǐ)邊會涉及到前端頁面(miàn)、一些資源文件的固定協議引用,後(hòu)端代碼中關于協議獲取是寫死的還(hái)是動态的,數據庫中存儲的網址鏈接等等,這(zhè)些統統要考慮到。
  分析完系統後(hòu),其中肯定會存在混合協議訪問請求,HTTPS 下浏覽器會攔截掉所有 HTTP 請求的,不同頁面(miàn)間跳轉、不同服務域名間跳轉如果是以固定的 HTTP 協議寫死的,要支持全站 HTTPS 協議,首要解決的是以當前協議來靈活的區分不同域名服務間的跳轉。其次,HTTPS 協議首次請求存在多次握手,因此網絡耗時變長(cháng)問題,可能(néng)會影響系統訪問速度。所以,我是建議計劃分爲兩(liǎng)個階段來進(jìn)行全站 HTTPS 升級:
  一階段:將(jiāng)目前所有域名配置爲支持 HTTP 和 HTTPS 兩(liǎng)種(zhǒng)協議,不做 HTTP 請求強制 HTTPS 跳轉。在驗證及測試完成(chéng) HTTPS 下,系統所有服務以及訪問速度均無問題後(hòu),進(jìn)行實施二階段計劃。
  二階段:在上階段不強制 HTTPS 訪問驗證通過(guò)後(hòu),域名做強制 HTTPS 協議。即當用戶以 HTTP 協議訪問系統時, 如用 Nginx 做強制 301 跳轉到 HTTPS 協議,做到全站 HTTPS 安全訪問協議。
  不出意外,按照這(zhè)兩(liǎng)步計劃,應該可以穩妥是進(jìn)行全站 HTTPS 升級工作,當然,期間不可避免的會踩一些坑,因爲每個公司業務不同、系統環境不同等原因,都(dōu)會遇到不可預估的問題,一個個解決就行了。我下面(miàn)會寫一下升級期間共性的、也就是每個人都(dōu)必須要踩的坑和如何解決這(zhè)些問題。
  十條注意事(shì)項
  1、浏覽器攔截混合訪問請求
  由于浏覽器安全規則,在 HTTPS 請求下通過(guò) JavaScript 請求 HTTP 請求或引入 HTTP 協議資源文件,會報“Mixed Content”錯誤,導緻請求無法繼續。
  

 
  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.
  2、前端 HTML、JS 資源引用存在 HTTP
  前端頁面(miàn)及 js 文件中,寫死的 http:// 協議資源及跳轉改爲根據當前協議切換(//)。
  使用相對(duì)協議,如:
  <script src="//domain.com/jquery.js</script>
  <img src="//domain.com/img/logo.png">
  或者代碼自行判斷都(dōu)可以。如果一個頁面(miàn)内包含多個域名請求,需所有域名均支持https,否則部分浏覽器會有警告提醒或打不開(kāi)。
  3、移動端适配 HTTPS
  如果你們存在移動客戶端(APP)也需要适配 HTTPS,所以必須做調用接口的相應修改,當然,要注意運營商 DNS 劫持(尤其是移動)也會對(duì) HTTPS 請求成(chéng)功率造成(chéng)很大影響,其實可以做好(hǎo) HTTP/HTTPS 兩(liǎng)種(zhǒng)協議都(dōu)支持,做好(hǎo)出問題随時動态降級切換準備。
  4、項目中存在的配置問題
  項目中用到的配置文件中存在 HTTP 鏈接,要充分了解其用途。如果不是可以統一動态更新的配置文件,都(dōu)要考慮更改後(hòu)做服務的發(fā)布,這(zhè)時候要來考慮對(duì)生成(chéng)環境業務的影響以及測試、開(kāi)發(fā)環境的影響等問題。如頁面(miàn)間跳轉、權限、登錄驗證、第三方服務(支付、推送)回調這(zhè)些配置等。
  5、關于 request.getScheme() 這(zhè)個坑
  如果你的架構上使用了 Nginx + Tomcat 集群, 且 Nginx 下配置了 SSL ,Tomcat 沒(méi)有配置 SSL ,這(zhè)時候其實客戶端已經(jīng)是使用 HTTPS 協議了,但你的 Tomcat 中用 request.getScheme()、request.getRequestURL() 會獲取到的是 HTTP,并不是 HTTPS 。當然可以代碼中避免,或者通過(guò)配置 Nginx 和 Tomcat 解決,看這(zhè)篇文章:http://www.cnblogs.com/interdrp/p/4881785.html
  6、SSL 證書類型
  在之前說選購 SSL 證書的時候,你就要充分考慮業務上域名需要的證書類型,避免需要泛域名證書而你買了單域名證書,當然泛域名證書還(hái)是分爲支持級别的,如購買 *.example.com 證書,那麼(me)該證書支持 a.example.com, a1.example.com, a2.example.com 以此類推域名,但是不支持 b.a.example.com(另一級), b1.a.example.com 類域名,如需支持,需另外再購買一張 *.a.example.com 證書。
  7、Nginx 配置同一個 server 段不支持配置多個證書
  8、Nginx 配置 HTTP 強制跳轉 HTTPS
  通過(guò)配置 Nginx 域名 HTTP 請求 302 跳轉實現全站 HTTPS。千萬不能(néng)有 POST 請求,這(zhè)時候浏覽器會先做 302 跳轉,在以 Get 方法請求會導緻 Post Body 丢失。
  具體配置如下:
  server {
  listen 80;
  listen 443 ssl;
  server_name www.domain.com;
  ssl on;
  ssl_certificate 1_www.domain.com_bundle.crt;
  ssl_certificate_key 2_www.domain.com.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  ssl_prefer_server_ciphers on;
  if ($scheme != 'https') {
  rewrite ^(.*)$ https://$server_name$1 permanent;
  }
  location / {
  root html;
  index index.html index.htm;
  }
  }
  9、所有環境均要進(jìn)行升級
  不僅僅要考慮生成(chéng)環境進(jìn)行全站 HTTPS 升級問題,包括開(kāi)發(fā)、測試、預發(fā)布等多種(zhǒng)不同環境均要進(jìn)行升級,來保持與生産環境的一緻性,減小不可預估因素的發(fā)生。如果你沒(méi)有完善的運維系統,一個個配置文件改的可是真的很痛苦,你試試想想看上百個配置,淚...
  10、打死你都(dōu)想不到的地方
  太多了,自由發(fā)揮吧。做到兵來將(jiāng)擋水來土掩,佛來斬佛,魔來斬魔就行了。
  注意事(shì)項寫完了,現在插播一條硬廣,我們團隊目前正需要對(duì)技術有追求的小夥伴一起(qǐ)來共同學(xué)習進(jìn)步,看到這(zhè)篇文章有想換個工作環境的,當然你要基本了解使用過(guò)分布式架構,快快聯系我。
  總結一下
  不知道(dào)這(zhè)一篇算不算所謂的「幹貨」了,現在好(hǎo)多人都(dōu)喊著(zhe)要所謂的幹貨,其實哪有那麼(me)多幹貨阿。這(zhè)一篇主要寫了一下在全站升級 HTTPS 的過(guò)程與注意點,幾乎都(dōu)是在實際工作中步驟的重現了,當然,升級完成(chéng)我們還(hái)是需要對(duì)整個系統進(jìn)行性能(néng)、速度的測試,以及如何更好(hǎo)的利用 HTTPS ,比如上 HTTP 2.0 ,據說提升很大的。
  希望對(duì)你有所幫助。

還(hái)沒(méi)開(kāi)展互聯網業務? 馬上開(kāi)始

關注風雨同舟公衆号