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 的编辑器保存这类文件。
私钥不要与证书用同一类扩展名混放在一个目录:备份、拷贝与共享时极易把私钥当普通证书传出去,建议私钥单独目录存放并收紧读权限。