如何把 PEM 转为 DER
- 把 PEM 块粘贴到输入框,或拖入
.pem、.crt、.key或.csr文件。 - 在 转换为 中选择输出:
- DER:单行 Base64:去掉头尾标记行和换行的 PEM 正文,可以直接放进 JSON 字段或环境变量。
- DER:hex:同样的字节,以 hex 表示,用于字节数组和协议跟踪。
- PEM(64 列) 和 公钥(PEM) 用于反向转换和提取公钥。
- 点击 下载 .der 保存二进制文件,或按 复制输出 获取文本形式。
转换器能自动识别证书、CSR、CRL、公钥和私钥(PKCS#1、PKCS#8、SEC1 EC),所以不需要选择输入类型。
转换做了什么
PEM 是包在 DER 外面的一层文本。以这个证书为例(已缩短):
-----BEGIN CERTIFICATE-----
MIIBtzCCAV2gAwIBAgIUfX6gOa1S96OttEsj3WbuIdu0cE0wCgYIKoZIzj0EAwIw
...
-----END CERTIFICATE-----
去掉两行标记,把其余各行连起来,做 Base64 解码,就得到了 DER 文件:这里是 443 字节,以 30 82 01 b7 开头,即 ASN.1 SEQUENCE 头部。唯一丢失的信息是标记行中的标签。DER 文件不带标签,所以读取 DER 的工具要么需要被告知文件是什么,要么只能根据结构去猜。
| 形式 | 这个证书的大小 | 使用场合 |
|---|---|---|
| PEM | 656 字节 | nginx、Apache、HAProxy、大多数 Linux 工具 |
| 单行 Base64 DER | 592 个字符 | JSON API、JWK 中的 x5c 数组、环境变量 |
| DER(二进制) | 443 字节 | Java 和 Windows 工具、固件、application/pkix-cert 下载 |
哪些地方需要 DER
- 嵌入式设备和固件:以字节数组形式编译进 C 代码的证书几乎都是 DER。使用 hex 输出,粘贴到数组中。
- Apple 平台:
SecCertificateCreateWithData接受的是 DER 数据,而不是 PEM 文本。 - JWK 的
x5c参数 和 SAML 元数据中的<ds:X509Certificate>元素,存放的是不带 PEM 头尾的 Base64 DER。 - 证书中的 CA Issuers URL 通常提供 DER 格式的
.cer文件。 - Windows:
.cer文件两种形式都有可能,但一些较老的导入对话框和设备只接受 DER。
用 OpenSSL、Python 和 certutil 把 PEM 转为 DER
openssl x509 -in cert.pem -outform der -out cert.der
openssl req -in app.csr -outform der -out app.der
openssl pkey -in key.pem -outform der -out key.der
grep -v -- '-----' cert.pem | tr -d '\n'
最后一行会打印单证书文件的单行 Base64 DER。在 Python 中,ssl.PEM_cert_to_DER_cert(open("cert.pem").read()) 返回证书的 DER 字节。在 Windows 上,certutil -decode cert.pem cert.der 会去掉标记并解码。更多内容见 在 OpenSSL 中使用 Base64 和 Python 中的 Base64。
常见问题
- 一个文件中有多个块:文本输出会转换每一个块,但 下载 .der 只保存第一个对象,因为一个 DER 文件只能容纳一个对象。请先拆分证书链,或在 证书解码器 中从各个证书的卡片下载。
-----BEGIN ENCRYPTED PRIVATE KEY-----:可以正常转换,但得到的 DER 仍是加密的。解密需要密码,这里不提供。Proc-Type: 4,ENCRYPTED头部:旧版 OpenSSL 加密没有对应的 DER 形式。请先用密码运行openssl pkey -in key.pem -out plain.pem。-----BEGIN OPENSSH PRIVATE KEY-----:它根本不是 ASN.1,所以无法生成 DER。要获取它的公钥,请使用 SSH 密钥工具。
常见问题
PEM 就是 DER 的 Base64 吗?
是的。PEM 文件就是 DER 字节的 Base64 编码,每 64 个字符换行,夹在 -----BEGIN label----- 和 -----END label----- 两行之间。去掉这两行并解码 Base64,就能得到完全相同的 DER 文件。
怎样把 PEM 私钥转为 DER?
粘贴到这里,选择 DER:单行 Base64 或 下载 .der;也可以运行 openssl pkey -in key.pem -outform der -out key.der。密钥永远不会离开页面,其中的机密值也不会显示。
为什么我的 DER 文件比 PEM 小?
Base64 把每 3 个字节变成 4 个字符,PEM 还会加上换行和两行头尾标记。一个 443 字节的 DER 证书会变成 656 字节的 PEM 文件,大约大 48%。