HTTPS是 HTTP over SSL/TLS,即在HTTP與TCP之間增長了一個安全套接層SSL/TLShtml
詳細原理請參考 : http://blog.jobbole.com/110354/linux
雖然不少網站都是使用了HTTPS,以保證數據不被修改或被第三方看見,可是因爲HTTPS有一些隱含的缺陷或者服務器驗證不嚴格這些緣由,HTTPS被劫持仍是有可能的。web
https要避免劫持,前提是必須用受信任的SSL證書(權威CA機構頒發的SSL證書)。使用自簽證書,瀏覽器會給出警告提示「此網站安全證書存在問題」。不少用戶不明白這是什麼意思,就點了繼續,這就有可能容許了黑客的僞證書,HTTPS流量所以被劫持。瀏覽器
這就要說到爲何Fiddler等抓包工具能解密https的包了?經過假裝CA證書來欺騙瀏覽器和服務器,在真正的https服務器面前假裝成瀏覽器,在瀏覽器面前假裝成https服務器,來截獲通訊解密HTTPS。而使用Fiddler須要先在設備上安裝一個Fiddler自簽發的CA root證書,不然瀏覽器是不會相信Fiddler發送過來的僞造的網站證書的。安全
解決辦法:網站使用權威機構頒發的證書,用戶在看到「此網站安全證書存在問題」時應中止訪問。服務器
也稱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的網站時,注意觀察證書是否安全。工具
Android https開發中常見的安全缺陷:網站
解決辦法:檢查服務器端證書是否有問題,要和app預埋的證書做對比。對服務器證書域名進行強校驗(STRICT_HOSTNAME_VERIFIER)。另外並非說強校驗了就不能讓別人抓到包,而是在竊聽上有難度,仍然能夠HOOK繞過校驗。
目前有不少應用用webview來加載h5頁面,若是服務端使用的是可信的CA頒發的證書,在 webView.setWebViewClient(webviewClient) 時重載 WebViewClient的onReceivedSslError() ,若是出現證書錯誤,直接調用handler.proceed()會忽略錯誤繼續加載證書有問題的頁面,若是調用handler.cancel()能夠終止加載證書有問題的頁面,證書出現問題了,能夠提示用戶風險,讓用戶選擇加載與否,若是是須要安全級別比較高,能夠直接終止頁面加載,提示用戶網絡環境有風險。
詳細參考:http://www.cnblogs.com/alisecurity/p/5939336.html