# CRT 文件（.crt / .cer 证书文件）是什么？

> CRT 文件是存放 X.509 证书的 .crt 或 .cer 文件，内容可能是 PEM 文本，也可能是二进制 DER，取决于生成它的平台。

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

.crt 或 .cer 文件里装的是公开的 X.509 证书，不包含私钥。两个扩展名都只是命名习惯而不是格式：在 Linux 和大多数 Web 服务器文档里，.crt 通常是以 `-----BEGIN CERTIFICATE-----` 开头的 [PEM](https://ssl.sh/zh/glossary/pem/) 文本；Windows 习惯用 .cer，证书导出向导里可以选"DER 编码二进制 X.509 (.CER)"或"Base64 编码 X.509 (.CER)"，前者就是 [DER](https://ssl.sh/zh/glossary/der/)。在 Windows 上双击这两种文件都会打开证书查看器。

## 为什么重要
编码不对时，工具往往只报一个含糊的错误，比如 OpenSSL 提示无法加载证书，其实只是文件是 DER 格式。.crt 也可能只包含站点证书本身，所以 nginx 需要把中间证书拼接进去的 [fullchain](https://ssl.sh/zh/glossary/fullchain/) 文件。腾讯云下载包中名为 `xxx_bundle.crt` 的文件通常已经包含了中间证书。看一眼文件开头就能判断编码，数一数 BEGIN 行就知道里面有几张证书。

## 例子
```bash
head -c 30 example.com.cer; echo        # PEM 以 -----BEGIN CERTIFICATE----- 开头
openssl x509 -in example.com.cer -inform DER -noout -subject -enddate
openssl x509 -in example.com.cer -inform DER -out example.com.crt   # DER 转 PEM
grep -c "BEGIN CERTIFICATE" example.com.crt                         # 文件里有几张证书
```

## 常见误区
- **.crt 和 .cer 是两种格式。** 两者都可能是 PEM 或 DER，只看内容。
- **.crt 文件里带私钥。** 证书是公开的，私钥在单独的 .key 文件或 PKCS #12 容器里。
- **一个 .crt 文件就是一张证书。** PEM 文件可以依次存放多张证书，比如 CA 证书包或完整证书链。

## 相关术语

- [PEM](https://ssl.sh/zh/glossary/pem/): PEM 是一种把 DER 二进制数据做 Base64 编码、再用 BEGIN 和 END 行包起来的文本格式，是存放证书和私钥最常见的方式。
- [DER](https://ssl.sh/zh/glossary/der/): DER 是 ASN.1 的二进制编码规则，保证每个值只有唯一一种字节表示，X.509 证书和密钥都以它为基础。
- [X.509](https://ssl.sh/zh/glossary/x509/): X.509 是 ITU-T 制定的公钥证书标准格式，其互联网配置规范 RFC 5280 规定了 TLS 所用证书的结构和验证方法。
- [KEY 文件](https://ssl.sh/zh/glossary/key-file/): KEY 文件是按惯例存放私钥的 .key 文件，通常为 PEM 编码，但扩展名本身并不说明里面的具体格式。
- [fullchain](https://ssl.sh/zh/glossary/fullchain/): fullchain 是依次包含站点证书和中间证书的 PEM 文件，让客户端能把站点证书连到受信任的根证书。
- [PKCS#7](https://ssl.sh/zh/glossary/pkcs7/): PKCS#7 是一种用于签名和加密数据的格式，在 .p7b 或 .p7c 文件中常用来打包一组证书，不含私钥。
- [SSL 证书](https://ssl.sh/zh/glossary/ssl-certificate/): SSL 证书是由 CA 签名的 X.509 证书，把公钥与一个或多个域名（或 IP 地址）绑定，供 TLS 客户端验证服务器身份。
