ByteScope

443

連接埠 443 · HTTPS

TCP/UDPIANA 有指派Web 與 HTTP

HTTPS 的連接埠——而且自從 HTTP/3 之後它也是一個 UDP 連接埠,所以只查 TCP 會讓你以為沒人在聽,實際上一半的流量正被好好服務著。

查出是誰占用連接埠 443

照你的系統挑一行貼上去執行。它會直接印出占著這個連接埠的行程,以及它綁在哪個位址上——通常看到這兩件事答案就出來了。

從機器外面確認一次

`nmap -Pn -p 443 --reason example.com` 涵蓋 TCP 那一側:`open` 代表交握完成,`closed` 代表 reset 回來了,所以主機連得到但沒有人在聽,`filtered` 代表封包消失在防火牆裡。`--reason` 會印出實際觀察到的是哪一種,而不是推論的;`-sV` 讓 nmap 談 TLS 並回報伺服器與憑證細節。要看 HTTP/3 就另外跑一次 `nmap -Pn -sU -p 443 example.com`,而且要有心理準備會拿到 `open|filtered`——UDP 的沉默天生就含糊,nmap 不會替你猜。當連接埠是開的、事情卻還是失敗,就別再掃了,改跑 `openssl s_client -connect example.com:443 -servername example.com`,它會顯示憑證鏈、談成的協定版本,以及交握到底斷在哪裡。只掃你自己負責的主機。

連不上 443 的時候怎麼讀

你看到的訊息代表什麼
curl: (60) SSL certificate problem: unable to get local issuer certificate連線和交握都已經走到驗證憑證鏈那一步,所以連接埠和網路都沒問題。是伺服器沒有把它該送的中繼憑證送出來。瀏覽器常常會把這件事蓋掉,因為它從別的網站快取了中繼憑證,所以這個問題通常是先在 API 用戶端或 CI 工作裡冒出來。請去修伺服器出示的憑證鏈,不要加一個跳過驗證的旗標了事。
curl: (60) SSL: no alternative certificate subject name matches target host name 'example.com'你連到了 443 上的某台伺服器,而它回你一張別的名稱的憑證。通常是 SNI 的問題:用戶端沒有送出主機名稱,或者這個名稱根本沒設定,所以請求落到預設的虛擬主機上。用 `openssl s_client -connect <ip>:443 -servername example.com` 精確重現一次,再和不加 `-servername` 的同一個指令對照。
curl: (35) error:0A000410:SSL routines::sslv3 alert handshake failureTCP 成功了,TLS 沒有。兩邊沒有任何一個可接受的協定版本或加密套件是共通的——典型情況是老用戶端碰上已經停用 TLS 1.0 和 1.1 的伺服器,或者伺服器要求用戶端憑證而對方沒有提供。連接埠不需要動,要動的是協商參數。
curl: (7) Failed to connect to example.com port 443: Connection refusedreset 立刻就回來了:主機活著,而且沒有東西占著連接埠 443。網頁伺服器或負載平衡器停了、只在聽連接埠 80,或是綁在回送位址上。在伺服器上跑探測指令、讀綁定位址,再去假設是防火牆的問題。
The browser hangs and finally shows ERR_CONNECTION_TIMED_OUT什麼都沒回應,所以是過濾器把封包丟掉而不是拒絕——雲端安全群組、主機防火牆,或某條網路 ACL。長時間等待就是它的特徵:被拒絕是瞬間的。請從用戶端這個方向去檢查規則,因為你這邊的一條出站規則,症狀和對方少了一條入站規則一模一樣。
listen EADDRINUSE :::443, or EACCES permission denied on 443兩個不同的問題,訊息長得很像。EADDRINUSE 代表另一個行程占著這個連接埠——跑探測指令並讀綁定位址,因為萬用位址的監聽者會擋掉任何對特定位址的綁定。EACCES 代表這是特權連接埠:443 在 1024 以下,非特權行程在還沒檢查連接埠有沒有空著之前就被拒絕了。
The site loads but HTTP/3 never engages, or QUIC connections stall and fall backTCP 443 通,UDP 443 不通。很多防火牆和安全群組是只針對 TCP 寫的,於是瀏覽器嘗試 QUIC、等待,然後退回 TCP,多出來的延遲看起來就像沒來由的變慢。在 Linux 上用 `-u` 探測,在 macOS 上不要加協定過濾條件,然後把放行或封鎖 UDP 443 當成一個刻意的決定。

連接埠 443 上跑的是什麼

IANA 把 `https` 登記在連接埠 443 上,TCP 和 UDP 都有,描述是「http protocol over TLS/SSL」,引用 RFC 9110。TCP 那筆是大家熟悉的:TLS 跑在 TCP 上,載著 HTTP/1.1 或 HTTP/2。UDP 那筆則是 HTTP/3 在用的,因為 QUIC 跑在 UDP 上,而且終結在同一個連接埠號上。這件事有一個大家一直踩的實際後果:一台伺服器可以在 443 上聽兩次,一種傳輸協定一次,而只過濾 TCP 的探測只看得到一半。如果瀏覽器拿得到 HTTP/3,而你的 `ss -tlnp` 輸出看起來卻不完整,加上 `-u`。傳輸層之上,443 是 TLS 發生的地方(TLS 1.3 見 RFC 8446),而讓現實世界最容易搞混的擴充是 SNI(RFC 6066):用戶端在交握裡指名它要的主機,所以一個 IP 位址、一個連接埠可以服務很多網站、很多張憑證。這就是為什麼連線在網路層成功了,拿到的卻是錯的憑證——你連對了 socket,走錯了虛擬主機。加密的 DNS 也住在這裡,也就是 DNS over HTTPS,而這是刻意的:它和一般網頁流量分不出來。這個連接埠上最好用的單一診斷工具不是掃描,而是 `openssl s_client -connect example.com:443 -servername example.com`,它會完成一次真正的交握,並印出伺服器實際送出的憑證鏈。

連接埠 443 該不該對外開

這是你本來就該對外開的連接埠,所以安全問題不是消失,而是往上層移動。入站這一側,風險在於它背後坐著什麼:一張過期或名稱對不上的憑證、跟正式站台共用同一個虛擬主機的管理介面、一台終結 TLS 之後把明文往你不完全信任的網段轉發的代理,或是一台同時還能從連接埠 80 碰到而且會回應的來源伺服器。憑證鏈要完整——少了中繼憑證,在會快取中繼憑證的瀏覽器上照樣能通,在每一個非瀏覽器的用戶端上卻會失敗,而那是弄壞一個 API 相當難查的方式。出站這一側則是多數政策做錯的地方:因為 443 到處都放行,它就成了通道、VPN 和 SSH-over-TLS 的預設逃生口,所以一條允許 443 到任意目的地的出站規則,實際上等於什麼都允許。在需要的地方依目的地限制出站 443;如果你的威脅模型要求,就檢查它的內容。最後,TCP 和 UDP 443 要嘛刻意都放行、要嘛刻意擋掉 UDP;把 UDP 443 留在半開狀態,會讓用戶端一再嘗試 HTTP/3、失敗、然後安靜地退回去,多出一段沒有人解釋得了的延遲。

服務
HTTPS
傳輸協定
TCP/UDP
登記狀態
IANA 有指派
分類
Web 與 HTTP

站上可以搭配的工具

這些全都在你的瀏覽器裡跑,不會上傳任何東西。

相關連接埠

查 443 的時候,通常也會順手看一下這幾個。

常見問題

明明就有東西在用,指令卻什麼都沒印出來?

幾乎都是權限問題。lsofss 會列出 socket,但別人的行程它不會顯示所有者,所以由系統帳號、容器執行環境或 launchd 啟動的服務,在你補上 sudo 之前就只是一個沒有主人的監聽項。Windows 則是反過來:netstat 什麼都沒有,綁定卻還是失敗,那代表這個號碼落在 Hyper-V、WSL2 或 Docker Desktop 開機時預留的範圍裡。

占著連接埠的那個行程可以直接砍掉嗎?

先看清楚它是什麼。沒收乾淨的開發伺服器砍掉沒事;正在寫入的資料庫不行,其他東西依賴的系統服務也不行。如果持有者是容器,請停容器,不要砍主機看到的那個行程——砍了執行環境只會把它拉起來。遇到真的不能動的,把自己的服務換一個連接埠反而更快。

為什麼本機連得到,別台機器就連不到?

因為它綁在 127.0.0.1 而不是 0.0.0.0。每一頁的指令之所以會把綁定位址跟行程名一起印出來,就是為了這件事:綁在回送位址上的服務,不管防火牆怎麼設,都只有這台機器自己連得到。現在不少框架是刻意這樣預設的,所以通常是一個參數的問題,不是 bug。如果已經是 0.0.0.0 還是不通,下一個要懷疑的就是主機防火牆或雲端的安全群組。

把服務換到冷門的連接埠會比較安全嗎?

幾乎沒有幫助。掃全網的機器持續在掃整段範圍,換號碼買到的是幾個小時,不是安全,代價卻是每個同事都得記住它。它確實能讓針對預設埠的無差別掃描少污染一點日誌,這算是實際但有限的好處。真正會改變結果的是認證、限制來源位址的防火牆,以及一開始就不要讓它對外。

連接埠 443 還是卡住嗎?看完整的連接埠對照表,或是回到上面,從你實際看到的那行錯誤往回追。