簡體   English   中英

如何代理和記錄SSL流量

[英]How to proxy and log SSL traffic

我在計算機上運行本地HTTP代理服務器並執行一些日志記錄。 我也想記錄SSL流量。 為此,我運行了另一個用Python編寫的代理服務器,該服務器充當SSL服務器,帶有我的自簽名證書,HTTP服務器禁止向該代理服務器發出CONNECT請求。 SSL代理用於SSL處理“ ssl”標准Python模塊。 該SSL代理應將SSL流量轉發到目標Web服務器。

HTTP代理成功轉發了來自瀏覽器的CONNECT請求,並且瀏覽器與SSL代理之間的連接建立了OK。 SSL代理使用SSL套接字功能“讀取”從瀏覽器接收SSL數據包,這大概應該返回已經解密的數據。 這是在SSL代理上接收到的示例數據包:

'\x16\x03\x01\x00\xc5\x01\x00\x00\xc1\x03\x03\xeb\xd09\x12\xe3=$Id:\xe5\xf9<Px\xf0\xda\x81R&\x02\xcau\xd2t=@\xe9\x95\xf8\x7f\x86\x00\x00\x18\xc0+\xc0/\xc0\n\xc0\t\xc0\x13\xc0\x14\x003\x002\x009\x00/\x005\x00\n\x01\x00\x00\x80\x00\x00\x00\x17\x00\x15\x00\x00\x12wiki.archlinux.org\xff\x01\x00\x01\x00\x00\n\x00\x08\x00\x06\x00\x17\x00\x18\x00\x19\x00\x0b\x00\x02\x01\x00\x00#\x00\x003t\x00\x00\x00\x10\x00#\x00!\x05h2-15\x05h2-14\x02h2\x08spdy/3.1\x08http/1.1\x00\x05\x00\x05\x01\x00\x00\x00\x00\x00\r\x00\x12\x00\x10\x04\x01\x05\x01\x02\x01\x04\x03\x05\x03\x02\x03\x04\x02\x02\x02'

可以將其識別為握手SSL數據包,其前導0x16字節,長度為197字節。 目標服務器地址(wiki.archlinux.org)和協議(spdy和http)都是可讀的,但是此數據的一般格式是什么? 是否有一些工具或庫可用來解析這些數據包?

這些數據的通用格式在TLS1.2及以下的RFC中進行了描述。 您需要解析的是一個像這樣的ASN.1解析器。 但是在您這樣做之前,您可能應該了解所獲得的信息類型。 否則,您會發現為時已晚,在所有情況下都無法在SSL數據中找到目標服務器,因為只有在客戶端使用服務器名稱指示擴展名時才給出目標服務器。 盡管所有現代瀏覽器都不會使用此舊版瀏覽器,並且某些移動應用程序或腳本也不會這樣做。 這意味着您應該改用CONNECT請求中給定的目標。

有關如何編寫此類代理的更多詳細信息,我建議您看一下mitmproxy ,它可能已經完成了您要實現的目標,或者提供了libmproxy庫來幫助您編寫自己的代理。 它是用python編寫的,因此您至少可以從開源中學到如何實現必要的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM