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 访问,但底层概念不同。