0.前言
前一陣子想寫一個HTTPS的嗅探工具,之前只是大致了解SSL/TLS協議的加密流程,真正上起手來一步一步分析發現還是有點復雜的,於是我參考了wireshark的源碼以及各種RFC,弄清楚了SSL/TLS從證書傳遞到密鑰交換,再到數據傳輸的具體過程,算是小有收獲,在這里分享給大家。
因為我想結合一個具體的簡單的例子來做分析,所以本篇文章先介紹如何簡單搭建一個環境來幫助我們下一步的分析,因此不打算親自動手實踐的朋友可以跳過直接進入下一篇,當然本篇文章還是有些小知識點的。
1.前期准備
1.1 制作證書
我們這里使用openssl,由於只是演示,所以就制作個簡單的證書,CA簽名什么的就不弄了。
生成服務器私鑰:
openssl genrsa -out server.key 1024
生成服務器cer證書:
openssl req -new -x509 -key server.key -out server.cer -days 3650
合成pfx文件,會要求輸入密碼,輸不輸都可以,如果有密碼,之后導入證書都要輸入該密碼:
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.cer
1.2 導入證書
這里使用IIS搭建web服務,點擊IIS根節點,點擊右側Import,選擇之前生成好的server.pfx。
添加網站,類型選HTTPS,證書選擇剛才導入的證書。
訪問網站,忽略一切警告,看看網站有沒有搭好。
1.3 更改默認SSL加密套件(Cipher Suites)
因為我們重在分析加密流程,所以我們選擇一個簡單的加密算法。
運行->gpedit.msc->Administrative Templates->Network->SSL Configuration Settings,雙擊SSL Cipher Suite Order,里面有一個加密套件的順序,我們把TLS_RSA_WITH_RC4_128_SHA放到最前面,這樣加密就會優先選擇該套件。
1.4 配置Wireshark解密SSL
為方便流程分析,我們借用Wireshark解密SSL流量。
打開Wireshark->Edit->Preference->Protocols->SSL
在RSA keys list添加一項,IP填服務器的IP,端口填443,協議填HTTP,key文件選擇之前生成的server.key或者server.pfx。SSL debug file隨便選擇一個路徑,SSL加解密的每個步驟都會寫入該文件,很有助於我們的分析。
設置好以后,訪問網站,抓包可以看到SSL流量已經解密出來了。
查看SSL debug file,可以看到SSL加解密的過程已經非常詳細地寫到里面了。
至此,我們需要的環境算是搭好了,下一篇文章我們將結合代碼,從算法和二進制的角度去詳細分析一個完整的HTTPS加密流程。