解码 ASN.1、DER 和 PKCS 格式的技术指南
在安全和密码学领域,数据很少以 JSON 或 XML 等人类可读的格式存储。相反,它被打包成遵循几十年前建立的标准的高密度二进制结构。如果您曾经遇到过 .der、.p12 或 .csr 文件并想知道里面是什么,那么您就遇到了 ASN.1 家族。
本指南解释了这些二进制格式的工作原理以及如何解码它们。
1. 什么是 ASN.1?
ASN.1 (Abstract Syntax Notation One) 是一种标准的接口描述语言,用于定义可以跨平台序列化和反序列化的数据结构。它是安全数据的“源代码”。
DER 编码
ASN.1 定义了结构,而 DER (Distinguished Encoding Rules) 定义了如何将该结构转换为二进制。DER 是一种标签-长度-值 (TLV) 编码,这意味着每条数据都以一个标识其类型(标签)的字节开始,后跟其长度,然后是实际数据。
2. 解码常见的二进制格式
CSR (证书签名请求) 解码器
CSR 包含您的公钥和身份信息。它通常以 Base64(PEM 格式)编码,但其底层是一个 DER 编码的 ASN.1 结构。
- 如何解码:您可以使用 OpenSSL (
openssl req -in request.csr -noout -text) 或在线 CSR 解码器来查看主题、组织和公钥。
PKCS#7 (P7B) 解码器
PKCS#7 常用于分发证书链。它通常包含证书以及验证该证书所需的任何中间证书。
- 如何解码:与简单的证书不同,PKCS#7 文件可以包含多个对象。解码它可以揭示内部的证书“包”。
PKCS#12 (P12/PFX) 解码器
PKCS#12 是一个受密码保护的归档文件,可以存储私钥及其对应的证书。
- 如何解码:因为它已加密,所以您必须拥有密码。解码它可以让您将私钥和证书提取到单独的 PEM 文件中。
3. ASN.1 和 DER:“树”视图
当您解码原始 DER 文件(如 X.509 证书)时,您会得到一个树状结构:
- SEQUENCE:项目列表。
- OBJECT IDENTIFIER (OID):代表特定字段(例如“常用名称”)的一系列数字(如
2.5.4.3)。 - BIT STRING / OCTET STRING:原始二进制数据,通常包含公钥或签名。
4. PGP 和 GPG 密钥查看
虽然 PGP (Pretty Good Privacy) 使用其自己的基于数据包的格式 (RFC 4880),但它与 X.509 具有相同的目标:将身份绑定到公钥。
- PGP 密钥查看器:检查 PGP 密钥可以揭示用户 ID、创建日期以及用于签名和加密的子密钥。
解码器工具摘要
| 格式 | 扩展名 | 内容类型 | 如何“查看”内部 |
|---|---|---|---|
| X.509 | .der, .crt |
公共证书 | openssl x509 -inform der -text |
| CSR | .csr |
签名请求 | openssl req -text -noout |
| PKCS#12 | .p12, .pfx |
证书 + 私钥 | openssl pkcs12 -info |
| PGP | .asc, .gpg |
PGP 密钥/消息 | gpg --list-packets |
结论
解码二进制安全格式就像玩解谜游戏。一旦您理解了现代 PKI 中的几乎所有内容都是建立在 ASN.1 和 DER 的基础之上,“随机”的字节就开始变得有意义了。无论您是使用 OpenSSL 等命令行工具还是基于 Web 的解码器,能够检查证书或请求的原始结构对于任何具有安全意识的开发者来说都是一项基本技能。
需要验证文件的完整性吗?使用我们的 哈希生成器 为您的安全文件计算校验和。