昨天我們試過 UDP、TCP、HTTP 協定的封包,也帶大家把 Packet Sender 安裝起來了。接著我們就要進入「加密封包」的世界,也是我們現在網頁最常使用到的協定「HTTPS」。
首先在 Kali Linux 的桌面上建立一個資料夾,存放我們的金鑰、憑證、和 HTTP 伺服器
mkdir ~/https-test
cd https-test
openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 30
這裡指令的意義是:
-newkey rsa:2048
→ 建立一組 RSA 2048 bits 金鑰。-nodes
→ 不要幫私鑰加密(避免啟動伺服器時每次都要輸入密碼)。-keyout key.pem
→ 輸出私鑰檔。-out cert.pem
→ 輸出憑證檔。-days 30
→ 憑證有效期 30 天。接著我們用 nano
撰寫一個 python 執行檔,裡面要放我們的 HTTP 服務
nano https_server.py
然後把以下的指令貼進去執行檔中
from http.server import HTTPServer, SimpleHTTPRequestHandler
import ssl
server_address = ('0.0.0.0', 8443)
httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
# 建立一個 SSLContext
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain(certfile="cert.pem", keyfile="key.pem")
# 把 socket 包裝成 TLS
httpd.socket = context.wrap_socket(httpd.socket, server_side=True)
print("Serving HTTPS on port 8443...")
httpd.serve_forever()
我們把建立好的 HTTP 服務啟用
python3 https_server.py
把 Wireshark 打開監聽 eth0
,接著到 Packet Sender 設定,你可以把它儲存下來,之後就可以直接使用:
PacketName:HTTPS Test Packet
Request:/
Address:<your_linux_IPv4>
Port:8443
Method:HTTPS/GET
這樣我們就成功的傳送了一個 HTTPS 加密封包!
一開始是我們熟悉的 TCP 三次握手 (SYN → SYN/ACK → ACK),和 HTTP 不一樣的地方是透過 TLSv1.3 加密,導致我們沒有辦法看到明文寫了什麼,最後才是實際的資料 Application Data,這邊才會實際的傳送我們的資訊給對方,但也是加密過後的內容,所以我們也不知道明文究竟是什麼。
目前最新的 TLS 版本為 1.3,早期因為大家都會在文章中把 SSL 對應 TLS 不同的版本,很容易讓讀者搞混。但實際上 SSL 3.0 在 2015 年以後就已經被淘汰了,更新為現在的 TLS 協議。
所以說 TLS 和 SSL 可以說是一樣的東西,只是隨著科技日新月異,加密的方法和協議也日漸更新!
可以去看 Miles 的鐵人賽文章,裡面寫得非常詳細,這邊就不再多提!
昨天我們看了 UDP、TCP、HTTP 封包,HTTP 是明文傳輸的協定,代表任何人只要能監聽網路,就能直接讀取我們傳送的內容。
舉個例子:如果你登入一個 HTTP 網站,你輸入的帳號密碼可能會被竊聽。
所以我們需要一個「加密」的版本,也就是 HTTPS(HTTP over TLS/SSL)。
HTTPS 會在 TCP 傳輸層之上,加上一層 TLS 加密協定,確保資料在傳輸過程中不會被竊聽或竄改。
所以我們可以對照下表來看一下這兩天測試的四種協議,差別在哪裡?
模式 | 能輸入 ASCII? | 是否加密? | 適用情境 |
---|---|---|---|
UDP | ✅ | ❌ | 測試無連線的傳輸(直播、遊戲訊息) |
TCP | ✅ | ❌ | 傳送任意明文(HTTP、文字資料) |
HTTP | ❌ | ❌ | 快速測試 API,軟體幫你組裝標準 HTTP request |
HTTPS | ❌ | ✅ | 測試加密後的 API / 網站,軟體幫你跑 TLS 握手 |
從昨天到今天,我們已經體驗了從 明文傳輸(UDP/TCP/HTTP) 到 加密傳輸(HTTPS) 的差異。接下來我們會繼續探索更多協定與安全相關的封包,讓大家一步步理解網路安全背後的原理!
有機會我們也會介紹到解密工具,讓大家可以截取封包後抓取裡面可用的資料!
CloudFlare TLS 介紹
CloudFlare SSL 介紹
CloudFlare HTTPS 介紹