DER 二进制 (.der)
ITU-T 标准Distinguished Encoding Rules (DER) 是 ASN.1 数据结构的严格且规范的二进制编码标准,为安全证书和密码密钥提供无歧义、按位精确的表示形式。
将 DER 转换为 PEM
免费的浏览器端 DER 转 PEM 转换器。在您的设备上即时转换文件。
检查与元数据
操作系统和文件分析器通过检查开头的二进制字节序列来识别 DER 文件:
字节级文件头签名 (魔数)
操作系统和文件分析器通过检查开头的二进制字节序列来识别 DER 文件:
十六进制签名 (偏移量 0):
没有通用的签名(ASN.1 DER 编码)ASCII 表示形式: 没有固定签名
标准化: ITU-T Recommendation X.690
技术规格
| 容器架构 | 使用标签-长度-值(TLV)三元组对 ASN.1 结构进行严格、规范的二进制编码 |
| 压缩方式 | 未压缩的二进制数据 |
| 字节序 | ASN.1 大端序编码 |
| 色彩空间 | 不适用(密码学二进制流) |
| 通道与结构 | 密码密钥、X.509 证书、证书吊销列表(CRL)和 PKCS 结构 |
| 最大尺寸 | ASN.1 长度不设上限 |
| 透明度 | 二进制 ASN.1 数据结构 |
| 流式传输与渐进式加载 | 确定性的单遍规范解码 |
技术对比矩阵:DER 对比同类产品
| 技术属性 | DER (当前) | PEM | CRT | P12 |
|---|---|---|---|---|
| 数据表示 | 严格的二进制 ASN.1 编码 | Base64 ASCII 编码文本 | Base64 PEM 或二进制 DER | 加密的二进制 PKCS #12 存档 |
| 确定性哈希 | 100% 规范位流 | 取决于空白/横幅 | 取决于格式 | 使用盐值/IV 加密 |
| 文件大小 | 最小(比 PEM 小约 33%) | 由于 Base64 而更大 (+33%) | 由于 Base64 而更大 (+33%) | 由于加密包装而更大 |
| Java 与硬件支持 | 原生标准 | 在 Java 中需要转换 | 在 Java 中需要转换 | 支持作为密钥库 |
常见损坏模式与十六进制恢复指南
OpenSSL 错误:'asn1 encoding routines:ASN1_get_object:header too long'。
根本原因: ASN.1 序列头中的标签-长度-值 (TLV) 字节损坏。
恢复方法: 使用 File2File.app 证书工具进行转码,以重建有效的 DER 规范字节。
安全分析与解析器攻击向量
DER 解码器会解析长度描述符,其中整数下溢/溢出可能会在原生密码库中触发缓冲区溢出。
已知攻击向量
- 在深度嵌套的 ASN.1 不定长解码期间发生整数溢出。
- 解析格式错误的位字符串时发生越界读取。
- 通过嵌套的 ASN.1 递归炸弹实施拒绝服务攻击。
防御性最佳实践: 使用强制实施最大递归深度限制的内存安全 ASN.1 解析器。
历史渊源与里程碑
2021ITU-T X.690 修订版统一并明确了现代硬件令牌所用的 ASN.1 DER 规范。
1997被 Java 加密体系结构 (JCA) 采用,用于二进制密钥编码 (X509EncodedKeySpec)。
1988作为基本编码规则 (BER) 的严格子集,在 CCITT / ITU-T 建议书 X.690 下标准化。
核心优势与特点
- 规范且确定:保证相同的数据始终产生完全相同的二进制哈希,这对于数字签名至关重要。
- 比 PEM 更紧凑:通过省略 Base64 编码和 ASCII 横幅,节省了约 33% 的开销。
- 硬件安全模块 (HSM)、智能卡和 Java 密钥库的原生格式。
技术局限与劣势
- 二进制格式无法在文本编辑器中查看、编辑或复制粘贴。
- 在网络托管环境中不太常见;这类环境绝大多数更偏好基于文本的 PEM/CRT 文件。
- 严格的编码规则意味着任何微小的填充差异都会导致解析拒绝。
趣味技术冷知识
- DER 是 BER(基本编码规则)的严格子集;虽然 BER 允许多种有效方式来编码值,但 DER 仅允许一种规范方式。
- 如果对 DER 文件进行 Base64 编码,并用“-----BEGIN CERTIFICATE-----”标记将其包裹起来,就会得到标准 PEM 文件。
- Java 的 KeyFactory 要求以原始 DER 格式提供 RSA 公钥和私钥。
常见技术问题
DER 和 PEM 有什么区别?
DER 是证书或密钥的原始二进制格式。PEM 只是将相同的 DER 文件转换为可读的 Base64 文本,并带有 '-----BEGIN...-----' 标头。
如何将 DER 转换为 PEM?
将您的 .der 文件上传到 File2File.app,即可直接在浏览器中用一秒钟将其转换为标准的 .pem 文本证书。
为什么 Java 使用 DER 密钥?
Java 密码学架构 (JCA) 使用 DER 编码的 PKCS#8 和 X.509 字节数组作为其原生密钥规范。