SSL/TLS 和 SSH 都是使用公鑰密碼學的加密協議。但它們解決的是不同使用者群的不同問題。SSL/TLS 保護網路連線(HTTPS)。SSH 保護遠端伺服器訪問(終端/命令列)。
快速對比
| SSL/TLS | SSH | |
|---|---|---|
| 全稱 | Secure Sockets Layer / Transport Layer Security | Secure Shell |
| 用途 | 加密網路流量 | 遠端伺服器訪問 |
| 使用者 | 瀏覽器、Web 伺服器、API | 系統管理員、開發者 |
| 埠 | 443(HTTPS) | 22 |
| 認證方式 | CA 簽發的證書 | 公鑰或密碼 |
| 需要憑證授權機構 | 是(用於公共信任) | 否 |
| 典型使用者 | 網站訪問者(不知不覺) | 伺服器管理員(主動操作) |
| 連線型別 | 用戶端(瀏覽器)→ 伺服器 | 使用者終端 → 伺服器 |
| 加密內容 | HTTP 請求/響應 | Shell 命令、檔案傳輸 |
| 示例 | HTTPS 網站、API、郵件(IMAPS) | ssh user@server、scp、sftp |
SSL/TLS 一句話
SSL/TLS 加密瀏覽器和伺服器之間的連線。當你訪問 https://example.com 時,瀏覽器驗證伺服器的 SSL 證書(由憑證授權機構簽發),協商加密引數,所有流量透過加密通道傳輸。使用者無需做任何事——HTTPS 是透明的。
SSH 一句話
SSH 加密使用者終端和遠端伺服器之間的連線。當你執行 ssh user@server.com 時,SSH 用戶端驗證伺服器的公鑰(首次連線時確認),認證你的身份(用密碼或 SSH 金鑰對),並給你一個加密的 Shell 會話。SSH 由開發者和管理員使用——普通使用者很少接觸。
它們使用相似的密碼學
兩種協議使用相同的底層數學:
| 概念 | 在 SSL/TLS 中 | 在 SSH 中 |
|---|---|---|
| 非對稱加密 | 證書中的伺服器公鑰 | 伺服器主機金鑰 + 使用者 SSH 金鑰 |
| 金鑰交換 | ECDHE Diffie-Hellman | Diffie-Hellman 或 ECDH |
| 對稱加密 | AES-GCM、ChaCha20 | AES、ChaCha20 |
| 完整性 | HMAC / AEAD | HMAC / AEAD |
| 前向保密 | 透過 ECDHE(TLS 1.3 中強制) | 透過 DH/ECDH |
演算法幾乎相同。區別在於協議層和信任模型。
信任模型的區別
SSL/TLS:憑證授權機構
SSL/TLS 使用第三方信任。你的瀏覽器信任約 100-150 個憑證授權機構。當伺服器出示由受信任 CA 簽名的證書時,瀏覽器自動接受。
你信任 CA 來驗證 google.com 的證書確實屬於 Google。
SSH:首次使用信任(TOFU)
SSH 使用直接信任。首次連線伺服器時,SSH 會詢問:
The authenticity of host 'server.com' can't be established.
ED25519 key fingerprint is SHA256:xyz...
Are you sure you want to continue connecting? (yes/no)
你驗證一次指紋,SSH 記住它(~/.ssh/known_hosts),後續連線據此驗證。無需 CA 參與。
能同時使用嗎?
可以——它們是互補的,不是競爭的:
- SSL/TLS 保護訪客看到的網站(
https://example.com) - SSH 保護你管理執行網站的伺服器的方式(
ssh admin@server) - 你可能會 SSH 到伺服器來在 Nginx 上安裝 SSL 證書
大多數伺服器同時開放埠 443(HTTPS 使用 SSL/TLS)和埠 22(SSH)。
常見問題
哪個更安全?
都一樣——正確配置後同等安全。兩者使用相同的密碼學演算法。這個問題就像問”前門的鎖和車門的鎖哪個更安全?“它們保護的是不同的東西。
我兩個都需要嗎?
對於 Web 伺服器:通常是的。SSL/TLS 保護你的訪客(HTTPS)。SSH 保護你對伺服器的訪問(管理)。它們服務於不同目的。
SFTP 和 FTPS 是一樣的嗎?
不是。SFTP(SSH File Transfer Protocol)執行在 SSH 上(埠 22)。FTPS(FTP Secure)執行在 SSL/TLS 上(埠 990 或 21 使用 STARTTLS)。兩者都加密檔案傳輸,但使用不同的協議。SFTP 更常見且配置更簡單。
SSL/TLS 能替代 SSH 嗎?
不能。SSL/TLS 不提供 Shell 或命令列介面。你不能用 TLS “SSH 到伺服器”。一些基於 Web 的終端(如 Wetty 或 ttyd)透過 HTTPS/WebSocket 提供 Shell 訪問,但底層概念不同。