歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> 為什麼Wireshark無法解密HTTPS數據

為什麼Wireshark無法解密HTTPS數據

日期:2017/3/6 9:33:59   编辑:學習Linux

為什麼Wireshark無法解密HTTPS數據


為什麼Wireshark無法解密HTTPS數據


導讀由於需要定位一個問題,在服務器上tcpdump抓取https數據包,然後下載到本地打開wireshark分析。然後我們下載域名私鑰配置到wireshark,發現數據包居然無法解密。是wireshark配置密鑰的方法不對?但谷歌了好多文章都是說這樣配置的。由於對HTTPS認識不夠深,一時不知道如何入手解決。沒辦法,只能先了解tls這個協議了,於是查看了TLS1.2的RFC文檔,終於勉強解答了這個疑惑。TLS握手整個過程

在解決這個問題之前,先整體了解一下TLS的握手全過程。省略了不常見的過程。如圖:
為什麼Wireshark無法解密HTTPS數據為什麼Wireshark無法解密HTTPS數據
下面按順序介紹各握手步驟。

Client Hello

這是TLS握手的第一步,由客戶端發起請求。此協議主要包括了一個客戶端生成的隨機字符串(用來下面生成session key),還有客戶端支持的加密套件列表。如圖:
為什麼Wireshark無法解密HTTPS數據為什麼Wireshark無法解密HTTPS數據

Server Hello

服務器收到客戶端的Client Hello數據包之後,根據客戶端發來的加密套件列表,選擇一個加密套件,也生成一個隨機字符串返回給客戶端。我們看到下圖中的加密套件為,密鑰交換算法使用ECDHE_RSA,對稱加密算法使用AES_256_GCM_SHA384,如圖:
為什麼Wireshark無法解密HTTPS數據為什麼Wireshark無法解密HTTPS數據

Server Certificate

Server Key Exchange協議包,由服務器返回,主要目的是與客戶端交換用於數據對稱加密的密鑰。如圖:
為什麼Wireshark無法解密HTTPS數據為什麼Wireshark無法解密HTTPS數據

Server Hello Done

服務器返回此協議數據,告訴客戶端已經完成返回所需用於密鑰交換的數據。服務器等待客戶端響應。

Client Key Exchange

客戶端根據服務器返回的DH密鑰數據生成DH公共數據也發給服務器,用來生成最終的pre-master-secret。如圖:
為什麼Wireshark無法解密HTTPS數據為什麼Wireshark無法解密HTTPS數據

Change Cipher Spec

此協議用於客戶端和服務器相互告知也完成密鑰交換過程,可以切換到對稱加密過程。
到這裡大概的TLS握手過程就結束了。為解決本文中的問題,還需要了解密鑰交換的算法,RSA和Diffie–Hellman。

密鑰交換算法

密鑰交換算法目前常用的有RSA和Diffie-Hellman。
對於密鑰交換使用RSA算法,pre-master-secret由客戶端生成,並使用公鑰加密傳輸給服務器。
對於密鑰交換使用Diffie-Hellman算法,pre-master-secret則通過在Key Exchange階段交換的信息,由各自計算出pre-master-secret。所以pre-master-secret沒有存到硬盤,也沒有在網絡上傳輸,wireshark就無法獲取session key,也就無法解密應用數據。那我們是否可以反向計算出pre-master-secret呢?理論上可以,但是非常困難。
對Diffie-Hellman算法感興趣的可以參考https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

解決方法

說了這麼多,究竟有什麼辦法可以讓wireshark解密數據?我們可以通過下面幾種方法來使wireshark能解密https數據包。
1. 中間人攻擊;
2. 設置web服務器使用RSA作為交換密鑰算法;
3. 如果是用chrome,firefox,可以設置導出pre-master-secret log,然後wireshark設置pre-master-secret log路徑,這樣就可以解密了。

原文地址:https://www.centos.bz/2015/12/why-wireshark-can-not-decrypt-https-data/

轉載地址:http://www.linuxprobe.com/linux-wireshark-https.html ‎


http://xxxxxx/Linuxjc/1139902.html TechArticle

Copyright © Linux教程網 All Rights Reserved