現在大多數網站都不直接用明文的 HTTP,而是把 HTTP 包在一層加密層裡,變成 HTTPS(HTTP over TLS/SSL)。簡單講就是:你看的「網頁內容」還是用 HTTP 的格式,但在你電腦和網站之間傳輸時,整個 HTTP 內容都被 TLS(以前叫 SSL)加密了。
這對使用者是好事,因為「加密」可以保護帳號、密碼和私人資料不會被中間人直接看見;但對我們用 Wireshark 觀察封包來說,結果就是:
Wireshark 抓到的封包的確還是會顯示為 TCP,且目的 port 常常是 443(HTTPS 的標準 port),
但在應用層你不會看到HTTP的Request/Response明文;你看到的會是TLS、SSL、或Encrypted Application Data,內容是加密後的位元,沒辦法直接讀出「URL、表單內容、Cookie」等細節。
為什麼會這樣?因為TLS在TCP之上做了兩件事:
驗證對方身份(Server 證書):確認你連的是正確的網站,不是假冒的。
建立加密通道(協商session keys):把雙方的通訊內容加密,只有持有正確session key的雙方能還原明文。現代TLS(使用ECDHE等)還會提供Forward Secrecy,使得即使之後拿到伺服器私鑰,也不能還原既有會話的明文。
下圖就是加密後的結果
那下期我們會教如何合法的解密這種http格式的封包。