私钥 (Private Key)
定义
私钥是非对称密钥对中保密的那一半,TLS 服务器用它证明自己拥有证书里的那把公钥。
私钥是 RSA、ECDSA 等非对称密钥对中必须保密的一半。与之配对的公钥写在证书里公开,私钥则留在服务器上或 HSM 里。TLS 1.3 握手时,服务器用私钥对握手记录签名(CertificateVerify 消息),证明自己是证书的合法持有者;真正加密数据的会话密钥则来自另一次临时密钥交换。
为什么重要
谁拿到私钥,谁就能在证书有效期内冒充这个网站。私钥泄露后必须吊销证书,并用新私钥重新申请,否则新证书和旧证书一样不安全。使用 ECDHE 这类前向安全的密钥交换时,私钥被盗也解不开以前录下的流量;而老式的 RSA 密钥交换做不到这一点。私钥文件只应让服务账号可读,不要出现在备份、工单、聊天记录和代码仓库里,把 .key 文件提交到公开的 Git 仓库是常见的泄露途径。在宝塔面板部署证书时,"密钥(KEY)"一栏粘贴的就是私钥。
例子
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out example.com.key
chmod 600 example.com.key
# 检查私钥和证书是否配对:两个哈希值必须一致
openssl pkey -in example.com.key -pubout | openssl sha256
openssl x509 -in example.com.crt -noout -pubkey | openssl sha256
常见误区
- CA 手里有我的私钥。 自己在本地生成 CSR 时,CA 只见过公钥。
- 泄露后吊销证书就够了。 还必须换一对新密钥。
- 给私钥加了密码就可以随便放。 服务器启动时通常需要解密后的私钥,文件权限和访问控制才是主要防线。