SSH 与 RSA 密钥详解:生成、使用和保护您的密钥对
SSH 和 RSA 密钥对实用指南——了解其工作原理、如何在浏览器中生成密钥,以及如何将其用于安全的服务器访问和加密。
公钥密码学是安全互联网通信的基础——SSH 连接、HTTPS、JWT 签名以及加密电子邮件都依赖于它。理解密钥对的工作原理,能让你成为更高效的开发者,也能让你在安全意识上更上一层楼。
核心概念:公钥与私钥
密钥对由两个数学上相互关联的密钥组成:
- 私钥 — 保存在你的本地机器上,切勿分享。把它看作你的身份凭证。
- 公钥 — 可自由分享。你可以将其放在服务器上、GitHub 中或 JWT 配置里。
这种数学关系具有单向性:用公钥加密的数据只能用对应的私钥解密。而用私钥签名的数据,可以用公钥进行验证——且不会泄露私钥。
SSH 密钥:无密码服务器访问
SSH(Secure Shell)是远程服务器访问的标准协议。密码认证虽然可用,但存在弱点——密码可能被猜测、钓鱼攻击或泄露。SSH 密钥认证从根本上更为安全:
- 客户端使用私钥提供一个加密证明
- 服务器根据你安装的公钥验证该证明
- 网络中不传输任何密码——因此没有可被截获的内容
配置 SSH 密钥认证:
# 生成密钥对(Ed25519 是现代标准)
ssh-keygen -t ed25519 -C "your-email@example.com"
# 将公钥复制到服务器
ssh-copy-id user@yourserver.com
# 连接服务器——无需输入密码
ssh user@yourserver.com
公钥存放在服务器的 ~/.ssh/authorized_keys 文件中,私钥永远不会离开你的本地机器。
SSH 中的 Ed25519 与 RSA
Ed25519 是目前的推荐选择:
- 密钥更短(256 位),安全性等同甚至优于 RSA-4096
- 签名生成和验证速度更快
- 所有现代 SSH 服务器均支持
RSA 目前仍被广泛使用,尤其是在拥有旧系统的企业环境中:
- 2048 位是当今可接受的最小密钥长度
- 4096 位为长期使用的密钥提供额外的安全余量
- 密钥越大,认证速度会略微变慢
使用我们的 SSH Key Generator 在浏览器中生成 SSH 密钥——支持 Ed25519 和 ECDSA,基于 Web Crypto API 实现,密钥材料不会离开你的浏览器。
RSA 密钥:加密与签名
RSA 密钥的用途不止于 SSH——还用于 TLS 证书、JWT 签名、加密邮件(PGP)以及 API 认证。
RSA 的常见应用场景:
使用 RS256 的 JWT(JSON Web Tokens):
- 用 RSA 私钥对令牌进行签名
- 客户端使用公钥进行验证
- 与 HS256(对称加密)不同,验证方无需获知签名密钥
代码签名:
- 用私钥对发布的产物进行签名
- 用户使用你公开的公钥验证签名
- 证明该产物来自你本人且未被篡改
TLS/SSL 证书:
- 证书颁发机构用其私钥对你的公钥进行签名
- 浏览器使用内置的 CA 公钥进行验证
使用我们的 RSA Key Generator 在浏览器中生成 PEM 格式的 RSA 密钥对——支持 2048 位和 4096 位,完全在本地浏览器中运行。
PEM 格式说明
RSA 和 SSH 密钥通常以 PEM(Privacy Enhanced Mail)格式分发:
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7o4qne60...
-----END PRIVATE KEY-----
头部和尾部标识密钥类型,中间部分是经过 base64 编码的密钥数据。不同的头部对应不同的密钥类型:
BEGIN RSA PRIVATE KEY— 传统 PKCS#1 格式BEGIN PRIVATE KEY— PKCS#8 格式(现代工具中更为常见)BEGIN PUBLIC KEY— PKCS#8 格式的公钥BEGIN OPENSSH PRIVATE KEY— OpenSSH 自有的 SSH 密钥格式
保护私钥
私钥的安全至关重要:
- 切勿提交到 git — 将
*.pem、id_rsa和id_ed25519添加到.gitignore - 使用密码短语 — 对静态存储的密钥进行加密。即使有人获取了密钥文件,没有密码短语也无法使用。
- 限制文件权限 — SSH 要求私钥文件执行
chmod 600;若其他用户可读,SSH 将拒绝使用该密钥 - 泄露后立即轮换 — 生成新密钥对,并从所有服务器上移除旧公钥
# 为私钥设置正确的文件权限
chmod 600 ~/.ssh/id_ed25519
密钥指纹
指纹是公钥的简短哈希值,用于在不比较完整密钥的情况下验证身份:
ssh-keygen -lf ~/.ssh/id_ed25519.pub
# 输出:256 SHA256:abc123... your-email@example.com (ED25519)
首次连接服务器时,SSH 会显示该服务器的指纹并请你确认。在接受前,请通过独立渠道(如服务器提供商的文档)核实此指纹。
总结
SSH 和 RSA 密钥对提供的认证与加密能力,在本质上比密码更为安全。SSH 推荐使用 Ed25519,签名和加密推荐使用 RSA-4096,私钥务必使用密码短语保护,并在本地生成密钥——切勿让第三方服务为你生成私钥。