证书格式转换

CRT 转 PEM

把 .crt 或 .cer 文件转成 PEM,不管里面是 DER 二进制还是 PEM 文本,文件留在你的浏览器里。

浏览器本地运行 私钥在你的浏览器里(WebCrypto)生成和处理,不会离开你的设备,也不会上传到 ssl.sh。

模式

最后核实

CRT 转 PEM 工具把 .crt 和 .cer 文件转成 PEM。粘贴内容或选择文件,点 转换:如果是 DER 就转换,已经是 PEM 就整理干净并按证书链顺序排列。全部在浏览器里完成。

为什么 .crt 文件容易出问题

证书的扩展名只是习惯,不代表格式。CA、Windows、Java 工具都会写 .crt、.cer,有的是 PEM,有的是二进制 DER。Linux 上的服务器要的是 PEM,DER 格式的 .crt 会让 Nginx 报 PEM_read_bio_X509_AUX ... no start line 之类的错误;宝塔面板和云厂商上传证书时,也会提示证书格式不正确。

步骤

  1. 选择 .crt 或 .cer 文件(或粘贴 PEM 文本)。
  2. 点 转换。
  3. 下载 .pem 用于服务器配置。如果还有中间证书,放在同一个文件里站点证书的后面。

等价的 OpenSSL 命令

# 先看看是什么格式
openssl x509 -in certificate.crt -noout -subject 2>/dev/null && echo PEM || echo "不是 PEM,试试 DER"
# DER 格式的 .crt 转 PEM
openssl x509 -inform DER -in certificate.crt -out certificate.pem

想看证书里的字段,用证书解析工具打开。

常见问题

直接把 certificate.crt 改名成 certificate.pem 行不行?

只有它本来就是 PEM 文本(以 -----BEGIN CERTIFICATE----- 开头)时才行。如果是二进制 DER,改名没用,服务器照样加载失败。

Nginx 报 PEM_read_bio_X509_AUX failed 或 no start line,是这个原因吗?

经常是。Nginx 读到 DER 文件或带有多余文字的文件时就会报这个错。在这里转换 .crt,再把 ssl_certificate 指向输出的 PEM。

.crt 里有好几张证书可以吗?

PEM 格式的话可以。工具会保留全部证书,并按站点证书在前的顺序排列,这正是服务器需要的。

资料来源

  1. RFC 7468: PEM 文本编码
  2. RFC 5280: X.509 证书