由于https 使用了 TLS/SSL 加密條件,我們無法直接在wireshark的中讀取到數據內容,我們先看一下正常的http包的內容。
可以直接讀取到http的header 和body。
但如果是https 則不行,顯示的是加密的串,可以看到使用的TLS 1.2 。
為了解開這個加密的串,我們需要獲得 TLS 握手后的對稱秘鑰。
如果是通過瀏覽器打開網站的話,我們需要設置環境變量。
export SSLKEYLOGFILE=~/.ssl-key.log
如果是通過代碼請求,比如Go 語言發送https 請求,可以指定 KeyLog 文件。
func main() {
f, err := os.OpenFile("keylog.txt", os.O_WRONLY|os.O_CREATE|os.O_AppEND, 0664)
if err != nil {
log.Fatal(err)
}
client := http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
KeyLogWriter: f,
InsecureSkipVerify: true,
},
},
}
_, err = client.Get("https://tech.wonter.net")
if err != nil {
log.Fatal(err)
}
}
當請求發出后,便可以通過wireshark SSL 中配置這個秘鑰文件解析加密的body。
如果是新版的wireshark則是配置 TLS。這點需要注意。
解析的效果如下: