中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Java 配合 mitmproxy HTTPS 抓包調(diào)試

2018-07-02    來源:importnew

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

今天對接接口,對方給的 Demo 和已有項目用的 HTTP 工具不是一個;后來出現(xiàn)人家的好使,我的死活不通的情況;無奈之下開始研究 Java 抓包,所以怕忘了記錄一下……

一、mitmproxy 簡介

mitmproxy 是一個命令行下的強(qiáng)大抓包工具,可以在命令行下抓取 HTTP(S) 數(shù)據(jù)包并加以分析;對于 HTTPS 抓包,首先要在本地添加 mitmproxy 的根證書,然后 mitmproxy 通過以下方式進(jìn)行抓包:

mitmproxy1

  • 1、客戶端發(fā)起一個到 mitmproxy 的連接,并且發(fā)出HTTP CONNECT 請求
  • 2、mitmproxy作出響應(yīng)(200),模擬已經(jīng)建立了CONNECT通信管道
  • 3、客戶端確信它正在和遠(yuǎn)端服務(wù)器會話,然后啟動SSL連接。在SSL連接中指明了它正在連接的主機(jī)名(SNI)
  • 4、mitmproxy連接服務(wù)器,然后使用客戶端發(fā)出的SNI指示的主機(jī)名建立SSL連接
  • 5、服務(wù)器以匹配的SSL證書作出響應(yīng),這個SSL證書里包含生成的攔截證書所必須的通用名(CN)和服務(wù)器備用名(SAN)
  • 6、mitmproxy生成攔截證書,然后繼續(xù)進(jìn)行與第3步暫停的客戶端SSL握手
  • 7、客戶端通過已經(jīng)建立的SSL連接發(fā)送請求,
  • 8、mitmproxy通過第4步建立的SSL連接傳遞這個請求給服務(wù)器

二、抓包配置

2.1、安裝 mitmproxy

mitmproxy 是由 python 編寫的,所以直接通過 pip 即可安裝,mac 下也可使用 brew 工具安裝

# mac
brew install mitmproxy
# Linux
pip install mitmproxy
# CentOS 安裝時可能會出現(xiàn) "致命錯誤:libxml/xmlversion.h:沒有那個文件或目錄"
# 需要安裝如下軟件包即可解決
yum install libxml2 libxml2-devel libxslt libxslt-devel -y

2.2、HTTPS 證書配置

首先由于 HTTPS 的安全性,直接抓包是什么也看不到的;所以需要先在本地配置 mitmproxy 的根證書,使其能夠解密 HTTPS 流量完成一個中間人的角色;證書下載方式需要先在本地啟動 mitmproxy,然后通過設(shè)置本地連接代理到 mitmproxy 端口,訪問?mitm.it?即可,具體可查看?官方文檔

首先啟動 mitmproxy

mitmproxy -p 4000 --no-mouse

瀏覽器通過設(shè)置代理訪問 mitm.it

access

選擇對應(yīng)平臺并將其證書加入到系統(tǒng)信任根證書列表即可;對于 Java 程序來說可能有時候并不會生效,所以必須?修改 keystore,修改如下

# Linux 一般在 JAVA_HOME/jre/lib/security/cacerts 下
# Mac 在 /Library/Java/JavaVirtualMachines/JAVA_HOME/Contents/Home/jre/lib/security/cacerts
sudo keytool -importcert -alias mitmproxy -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit -trustcacerts -file ~/.mitmproxy/mitmproxy-ca-cert.pem

2.4、Java 抓包調(diào)試

JVM 本身在啟動時就可以設(shè)置代理參數(shù),也可以通過代碼層設(shè)置;以下為代碼層設(shè)置代理方式

public void beforeTest(){
    logger.info("設(shè)置抓包代理......");
    System.setProperty("https.proxyHost", "127.0.0.1");
    System.setProperty("https.proxyPort", "4000");
}

然后保證在發(fā)送 HTTPS 請求之前此代碼執(zhí)行即可,以下為抓包示例

zhuabao

通過方向鍵+回車即可選擇某個請求查看報文信息

detail

三、Java 其他代理設(shè)置

Java 代理一般可以通過 2 種方式設(shè)置,一種是通過代碼層,如下

// HTTP 代理,只能代理 HTTP 請求
System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "9876");
 
// HTTPS 代理,只能代理 HTTPS 請求
System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("https.proxyPort", "9876");

// 同時支持代理 HTTP/HTTPS 請求
System.setProperty("proxyHost", "127.0.0.1");
System.setProperty("proxyPort", "9876");
 
// SOCKS 代理,支持 HTTP 和 HTTPS 請求
// 注意:如果設(shè)置了 SOCKS 代理就不要設(shè) HTTP/HTTPS 代理
System.setProperty("socksProxyHost", "127.0.0.1");
System.setProperty("socksProxyPort", "1080");

另一種還可以通過 JVM 啟動參數(shù)設(shè)置

-DproxyHost=127.0.0.1 -DproxyPort=9876

本文參考:

  • Java 和 HTTP 的那些事
  • 一步一步教你https抓包

標(biāo)簽: CentOS linux ssl ssl連接 ssl證書 安全 代碼 服務(wù)器 通信

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:深入Spring Boot:快速集成Dubbo + Hystrix

下一篇:Spring Boot 自動配置的 “魔法” 是如何實現(xiàn)的?