KEY 文件 (.key 私钥文件)
定义
KEY 文件是按惯例存放私钥的 .key 文件,通常为 PEM 编码,但扩展名本身并不说明里面的具体格式。
.key 文件是存放 TLS 服务器私钥的惯用文件名。扩展名只是习惯,关键看内容,绝大多数是 PEM 文本,第一行就能看出具体格式:
-----BEGIN PRIVATE KEY-----:未加密的 PKCS #8,OpenSSL 3.x 的默认输出。-----BEGIN ENCRYPTED PRIVATE KEY-----:用口令加密的 PKCS #8。-----BEGIN RSA PRIVATE KEY-----:较老的 PKCS #1 RSA 格式。-----BEGIN EC PRIVATE KEY-----:椭圆曲线私钥的 SEC 1 格式。
为什么重要
nginx、Apache 等服务器要求私钥以单独的 PEM 文件放在证书旁边,所以要搞清楚手里是哪种格式、有没有加密。带口令的私钥会让 nginx 启动时停下来等待输入口令,除非配置了 ssl_password_file,否则服务器无人值守重启就会失败。国内云厂商下载的 Nginx 格式证书包里,通常就是一个 .key 文件加一个 .pem 或 .crt 文件;宝塔面板里"密钥(KEY)"一栏粘贴的也是它。私钥和证书不配套是部署时很常见的错误,上线前应先核对两者的公钥是否一致。
例子
head -1 example.com.key
openssl pkey -in example.com.key -out example.com.pkcs8.key # 转为 PKCS #8
openssl rsa -in example.com.pkcs8.key -traditional -out example.com.rsa.key # 转回 PKCS #1
openssl pkey -in encrypted.key -out decrypted.key # 去掉口令
常见误区
- 所有 .key 文件格式都一样。 可能是 PKCS #1、SEC 1 或 PKCS #8,可能加密也可能没加密,偶尔还是二进制的 DER。
- 把 .key 改名成 .pem 就转换了格式。 扩展名只是标签,转换格式要用 OpenSSL 等工具。
- 可以把 .key 发给 CA 或主机商客服。 私钥不应离开负责 TLS 的服务器。