HTTPS安全總結

0. HTTPS通訊原理

HTTPS是 HTTP over SSL/TLS,即在HTTP與TCP之間增長了一個安全套接層SSL/TLShtml

詳細原理請參考 : http://blog.jobbole.com/110354/linux

1. 瀏覽器

雖然不少網站都是使用了HTTPS,以保證數據不被修改或被第三方看見,可是因爲HTTPS有一些隱含的缺陷或者服務器驗證不嚴格這些緣由,HTTPS被劫持仍是有可能的。web

  1. ssl劫持

https要避免劫持,前提是必須用受信任的SSL證書(權威CA機構頒發的SSL證書)。使用自簽證書,瀏覽器會給出警告提示「此網站安全證書存在問題」。不少用戶不明白這是什麼意思,就點了繼續,這就有可能容許了黑客的僞證書,HTTPS流量所以被劫持。瀏覽器

這就要說到爲何Fiddler等抓包工具能解密https的包了?經過假裝CA證書來欺騙瀏覽器和服務器,在真正的https服務器面前假裝成瀏覽器,在瀏覽器面前假裝成https服務器,來截獲通訊解密HTTPS。而使用Fiddler須要先在設備上安裝一個Fiddler自簽發的CA root證書,不然瀏覽器是不會相信Fiddler發送過來的僞造的網站證書的。安全

解決辦法:網站使用權威機構頒發的證書,用戶在看到「此網站安全證書存在問題」時應中止訪問。服務器

  1. SSLStrip攻擊

也稱https降維攻擊,攻擊者攔截用戶流量後,欺騙用戶與攻擊者進行http通訊,攻擊者與服務器保持正常(http或者https)通訊,從而獲取用戶信息。網絡

使用sslstrip工具,再配合attercap進行arp欺騙便可進行SSLStrip攻擊(詳情請看:http://www.linuxde.net/2011/11/2522.html)app

解決辦法:網站在配置HTTPS服務的時候加上HTTP Strict Transport Security配置項;或者是在代碼中將全部HTTP的請求強制轉移到HTTPS上,使用URL REWRITE也能夠達到一樣的效果。對於用戶登陸ID和密碼等關鍵信息,在發送前先通過加密處理。另外用戶在訪問支持https的網站時,注意觀察證書是否安全。工具

2. Android

Android https開發中常見的安全缺陷:網站

  1. 在自定義實現X509TrustManager時,checkServerTrusted中沒有檢查證書是否可信
  2. 在重寫WebViewClient的onReceivedSslError方法時,忽略證書驗證錯誤信息繼續加載頁面
  3. 在自定義實現HostnameVerifier時,沒有在verify中嚴格證書校驗
  4. 在setHostnameVerifier中使用ALLOW_ALL_HOSTNAME_VERIFIER,信任全部Hostname

解決辦法:檢查服務器端證書是否有問題,要和app預埋的證書做對比。對服務器證書域名進行強校驗(STRICT_HOSTNAME_VERIFIER)。另外並非說強校驗了就不能讓別人抓到包,而是在竊聽上有難度,仍然能夠HOOK繞過校驗。

3. Webview

目前有不少應用用webview來加載h5頁面,若是服務端使用的是可信的CA頒發的證書,在 webView.setWebViewClient(webviewClient) 時重載 WebViewClient的onReceivedSslError() ,若是出現證書錯誤,直接調用handler.proceed()會忽略錯誤繼續加載證書有問題的頁面,若是調用handler.cancel()能夠終止加載證書有問題的頁面,證書出現問題了,能夠提示用戶風險,讓用戶選擇加載與否,若是是須要安全級別比較高,能夠直接終止頁面加載,提示用戶網絡環境有風險。

詳細參考:http://www.cnblogs.com/alisecurity/p/5939336.html

相關文章
相關標籤/搜索