PEM 与 DER 格式

PEM 是 Base64 文本(带 BEGIN/END 标记),DER 是二进制 ASN.1 编码;两者内容等价、可互转。Linux 系常见 PEM,Windows 组件与部分接口偏好 DER。

加密与证书速查安全更新于 2026-10-13

PEM 与 DER 是什么

PEM 与 DER 是同一份 ASN.1 数据的两种编码方式:DER 是紧凑的二进制,PEM 则把 DER 用 Base64 编码后加上 BEGIN/END 文本标记。两者内容完全等价,可以无损互转,区别只在是否可直接用文本工具查看与粘贴。Linux 侧(Nginx、Apache、OpenSSL)普遍使用 PEM,部分 Windows 组件、Java 接口与设备上传界面偏好 DER。

基本信息

PEM文本格式,便于配置引用,扩展名常见 .pem/.crt/.cer/.key
DER二进制格式,体积小,Java 与 Windows 场景常见 .der/.cer
互转命令openssl x509 -outform DER 与 -inform DER
识别方法看文件头是否出现 BEGIN 标记,不能只看扩展名
适用范围证书、私钥、CSR 都存在这两种编码

典型使用场景

  • 把 CA 下发的 DER 证书转成 PEM,供 Nginx 或 Apache 直接引用
  • 把老系统导出的 DER 私钥转成 PEM,让 OpenSSL 工具链能正常读取
  • 为 Java 或 Windows 组件准备 DER 编码的证书文件,避免导入界面报格式错误
  • 把多张证书按叶、中间、根的顺序拼成一个 PEM,作为完整证书链下发
  • 排查导入失败:先看文件头判断编码,再决定使用哪个 -inform 参数

互转与识别

互转与识别
head -1 cert.cer   # 出现 -----BEGIN 即 PEM;乱码则为 DER
openssl x509 -in cert.pem -outform DER -out cert.der   # PEM 转 DER
openssl x509 -inform DER -in cert.der -out cert.pem    # DER 转 PEM
openssl x509 -in cert.pem -noout -subject -dates       # 转换后复核字段
# 私钥转换:产物同样是敏感文件,权限要单独设置
openssl pkey -in key.pem -outform DER -out key.der

场景与格式对照

场景常见格式说明
Nginx/Apache 配置PEM直接以文本路径引用即可
Java KeyStore 导入DER 或 PKCS#12注意区分单纯证书与密钥容器
设备上传界面DER界面要求的格式必须严格照做
邮件或工单粘贴PEM文本可复制,DER 无法直接粘贴
证书、私钥、CSR 都有 PEM 与 DER 两种编码;私钥的 DER 版本常见于部分设备或系统的导入界面。
扩展名不可信:.crt 与 .cer 既可能是 PEM 也可能是 DER。自动化脚本应先检测文件头再决定转换方向,避免用 -inform 猜错导致解析失败。
PEM 内部的 Base64 换行位置与行宽不影响解析,解析器会忽略空白;但不要用会改写编码或补 BOM 的编辑器保存这类文件。
私钥不要与证书用同一类扩展名混放在一个目录:备份、拷贝与共享时极易把私钥当普通证书传出去,建议私钥单独目录存放并收紧读权限。

易错点

  • 按扩展名判断格式导致导入失败,应先看文件头
  • 在 Windows 用记事本编辑 PEM 引入 CRLF 或 BOM,个别老组件解析失败
  • 把私钥的 DER 版本随手放在共享目录:二进制文件不易被肉眼发现,权限配置容易漏
  • 多张证书合并进同一个 PEM 时顺序错乱,导致链验证失败
  • 转换时把 -inform 的方向弄反,会报错或产出损坏文件,转换后应复核字段

数据来源与参考

  • RFC 7468(PEM 文本编码)
  • ITU-T X.690(DER)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌