# KEY 文件（.key 私钥文件）是什么？定义、例子与常见误区

> KEY 文件是按惯例存放私钥的 .key 文件，通常为 PEM 编码，但扩展名本身并不说明里面的具体格式。

Source: https://ssl.sh/zh/glossary/key-file/
Last updated: 2026-11-10

.key 文件是存放 TLS 服务器[私钥](https://ssl.sh/zh/glossary/private-key/)的惯用文件名。扩展名只是习惯，关键看内容，绝大多数是 [PEM](https://ssl.sh/zh/glossary/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)"一栏粘贴的也是它。私钥和证书不配套是部署时很常见的错误，上线前应先核对两者的公钥是否一致。

## 例子
```bash
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](https://ssl.sh/zh/glossary/der/)。
- **把 .key 改名成 .pem 就转换了格式。** 扩展名只是标签，转换格式要用 OpenSSL 等工具。
- **可以把 .key 发给 CA 或主机商客服。** 私钥不应离开负责 TLS 的服务器。

## 相关术语

- [私钥](https://ssl.sh/zh/glossary/private-key/): 私钥是非对称密钥对中保密的那一半，TLS 服务器用它证明自己拥有证书里的那把公钥。
- [PEM](https://ssl.sh/zh/glossary/pem/): PEM 是一种把 DER 二进制数据做 Base64 编码、再用 BEGIN 和 END 行包起来的文本格式，是存放证书和私钥最常见的方式。
- [CRT 文件](https://ssl.sh/zh/glossary/crt-file/): CRT 文件是存放 X.509 证书的 .crt 或 .cer 文件，内容可能是 PEM 文本，也可能是二进制 DER，取决于生成它的平台。
- [PKCS#12](https://ssl.sh/zh/glossary/pkcs12/): PKCS#12 是一种用口令保护的二进制容器格式，可以把私钥、证书和证书链打包进一个文件，扩展名通常是 .p12 或 .pfx。
- [CSR](https://ssl.sh/zh/glossary/csr/): CSR 是证书签名请求，包含申请者的公钥和希望写入证书的身份信息，用私钥签名后提交给 CA 以申请证书。
- [DER](https://ssl.sh/zh/glossary/der/): DER 是 ASN.1 的二进制编码规则，保证每个值只有唯一一种字节表示，X.509 证书和密钥都以它为基础。
