HTTPS 降級攻擊的場景剖析與解決之道

原文地址:HTTPS 降級攻擊的場景剖析與解決之道
博客地址:blog.720ui.com/javascript

HTTPS 必定安全麼

HTTP 協議,自己是明文傳輸的,沒有通過任何安全處理。那麼這個時候就很容易在傳輸過程當中被中間者竊聽、篡改、冒充等風險。這裏提到的中間者主要指一些網絡節點,是用戶數據在瀏覽器和服務器中間傳輸必需要通過的節點,好比 WIFI 熱點,路由器,防火牆,反向代理,緩存服務器等。HTTP 協議,中間者能夠竊聽隱私,使用戶的敏感數據暴露無遺;篡改網頁,例如往頁面插的廣告內容,甚至進行流量劫持,好比有的時候你會發現域名沒輸錯,結果卻跑到了一個釣魚網站上,由於被它劫持了。java

此時,HTTPS 的價值就體現出來了。HTTPS 協議在應用層的 HTTP 協議和以及傳輸層 TCP 協議之間的會話層加入了 SSL/TLS 協議,用做加密數據包。在真正數據傳輸以前,進行握手通訊,握手的信息交換主要包括:雙方確認加密協議的版本,確認身份(其中瀏覽器客戶端的身份有時是不須要確認的),確認傳輸真正數據的加密密碼(對稱加密)。在用做信息傳輸的加密密碼確認以後,接下來的通訊數據都會加密後再傳輸,從而達到防竊取的做用。原理剖析,能夠參考我以前的文章《HTTPS原理剖析與項目場景》瀏覽器

那麼,使用了 HTTPS 就能確保安全傳輸了嗎?理論上,是的,可是,現實卻不是如此。緩存

設計和實現 SSL/TLS 協議出現了漏洞,致使攻擊者一樣能夠攻擊一些舊版本的 SSL/TLS 協議。這其中就包括 SSL 3.0。安全

什麼是 HTTPS 降級攻擊

攻擊者可利用 SSL 3.0 漏洞獲取安全鏈接當中某些是SSL3.0加密後的明文內容。由於兼容性問題,當瀏覽器進行 HTTPS 鏈接失敗的時候,將會嘗試使用舊的協議版本,因而,加密協議由更加安全的協議,好比 TLS 1.2降級成 SSL 3.0。服務器

若是服務器提供有漏洞的 SSL 3.0 協議的支持,同時,攻擊者又能做爲中間人控制被攻擊者的瀏覽器發起漏洞版本的 HTTPS 請求,那雖然攻擊者監聽到的也是加密過的數據,但由於加密協議有漏洞,能夠解密這些數據。攻擊者能夠利用此漏洞,截獲用戶的隱私數據,好比 Cookie,這樣攻擊者就能夠拿到這些隱私數據,進行更深層次的攻擊,進而形成了用戶隱私的泄漏。微信

解決之道

目前,惟一解決問題的方法是禁用 SSL 3.0 加密協議,防止TLS 1.2 或者 TLS 1.1 或者 TLS 1.0降級到 SSL 3.0 加密協議。網絡

禁用的策略有不少,這裏主要講解下 Nginx 如何防止 TLS 降級到 SSL 3.0 如下版本,從而防止 HTTPS 降級攻擊。網站

原先的配置以下。值得注意的是,隱性默認是SSLv3 TLSv1 TLSv1.1 TLSv1.2。ui

ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;複製代碼

禁用的操做很簡單,如今改爲這樣便可。

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;複製代碼

總結

HTTPS 能確保安全傳輸了嗎?答案是,不必定,由於舊的版本存在安全漏洞,可能會被攻擊者進行 HTTPS 的降級攻擊。因此,SSL 3.0 協議如下版本並不安全,所以,爲了防止 HTTPS 的降級攻擊,咱們須要禁用它。

(完)

更多精彩文章,盡在「服務端思惟」微信公衆號!

相關文章
相關標籤/搜索