iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
佛心分享-IT 人自學之術

從零開始的 Linux 世界系列 第 18

【Day.18】滲透測試的第二步:HTTPS 加密封包測試

  • 分享至 

  • xImage
  •  

昨天我們試過 UDP、TCP、HTTP 協定的封包,也帶大家把 Packet Sender 安裝起來了。接著我們就要進入「加密封包」的世界,也是我們現在網頁最常使用到的協定「HTTPS」。

✒️ 設置 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://ithelp.ithome.com.tw/upload/images/20251002/20176048RXUqokw4Sd.jpg

這樣我們就成功的傳送了一個 HTTPS 加密封包!

一開始是我們熟悉的 TCP 三次握手 (SYN → SYN/ACK → ACK),和 HTTP 不一樣的地方是透過 TLSv1.3 加密,導致我們沒有辦法看到明文寫了什麼,最後才是實際的資料 Application Data,這邊才會實際的傳送我們的資訊給對方,但也是加密過後的內容,所以我們也不知道明文究竟是什麼。

目前最新的 TLS 版本為 1.3,早期因為大家都會在文章中把 SSL 對應 TLS 不同的版本,很容易讓讀者搞混。但實際上 SSL 3.0 在 2015 年以後就已經被淘汰了,更新為現在的 TLS 協議。

所以說 TLS 和 SSL 可以說是一樣的東西,只是隨著科技日新月異,加密的方法和協議也日漸更新!

⚙️ SSL 到 TLS 的歷史脈絡

  1. SSL 1.0(從未公開)
  2. SSL 2.0(2011 淘汰)
  3. SSL 3.0(2015 淘汰)
    SSL 到這裡就結束了,之後交由 IETF 標準化,名字改成 TLS。
  4. TLS 1.0 (RFC 2246, 1999):在設計上幾乎等同於 SSL 3.1。
  5. TLS 1.1 (RFC 4346, 2006) ≈ SSL 3.2。
  6. TLS 1.2 (RFC 5246, 2008) ≈ SSL 3.3。
  7. TLS 1.3 (RFC 8446, 2018):原本有人戲稱它是 SSL 4.0,但實際上 已經完全脫離 SSL 的血統,因為它改了大量機制(握手流程、加密演算法、棄用舊套件)。

可以去看 Miles 的鐵人賽文章,裡面寫得非常詳細,這邊就不再多提!

❓ 為什麼要有 HTTPS

昨天我們看了 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 介紹


上一篇
【Day.17】滲透測試的第二步:WireShark 協定測試
下一篇
【Day.19】從封包到握手,看懂 TLS 1.3 在幹嘛
系列文
從零開始的 Linux 世界20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言