8

我们正在为我们的一位客户添加 SSL 握手中的服务器证书验证。作为密码学和 C 世界的新手,我想我首先要弄清楚我对这些东西的概念,然后再开始实施。

所以,我在 Google 上搜索了很多,主要是为了寻找证书概念,但无法更好地清理我的概念,让我更满意。实际上它增加了更多的混乱。:)

这里有一些我几乎不明白的东西: 1.什么是base64格式?它和DER一样吗?2. PEM文件总是包含base64内容?3. Windows 证书存储使用什么格式?是二进制的吗?

有人可以在这里帮助我吗?如果这些事情为我清除,将非常感谢。

4

1 回答 1

11

X.509 证书的结构是使用ASN.1定义的。以下是X.509 证书的整体结构定义的摘录:

Certificate  ::=  SEQUENCE  {
    tbsCertificate       TBSCertificate,
    signatureAlgorithm   AlgorithmIdentifier,
    signatureValue       BIT STRING  }

TBSCertificate  ::=  SEQUENCE  {
    version         [0]  EXPLICIT Version DEFAULT v1,
    serialNumber         CertificateSerialNumber,
    signature            AlgorithmIdentifier,
    issuer               Name,
    validity             Validity,
    subject              Name,
    subjectPublicKeyInfo SubjectPublicKeyInfo,
    issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                         -- If present, version MUST be v2 or v3
    subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                         -- If present, version MUST be v2 or v3
    extensions      [3]  EXPLICIT Extensions OPTIONAL
                         -- If present, version MUST be v3
    }

使用DER格式(一种二进制格式)Certificate对值(填充了包含的值)进行编码。

Base64是一种将二进制序列编码为文本的通用方法,通过减少用于可读 ASCII 字符的字节集(因此这种表示形式更长)。

PEM 格式的证书是证书的 DER 编码的 Base64 编码,每个 64 字符块的末尾有一个换行符,放置在分隔符之间:

-----BEGIN CERTIFICATE-----
MIIB2zCCAUSgAwIBAwIBADANBgkqhkiG9w0BAQQFADAYMRYwFAYDVQQDEw1OZXRn
...
-----END CERTIFICATE-----

您还可以拥有 PEM 格式的私钥,例如,在这种情况下,分隔符将是-----BEGIN RSA PRIVATE KEY-----(并且匹配END)。

在网络上,在 TLS 连接期间,使用 DER。

Windows 证书存储在内部使用什么并不重要,它应该能够导入/导出 DER 或 PEM/Base64 证书。


证书“类型”是比 DER/base64 格式更广泛的主题。大多数用于 SSL/TLS 的证书都是 X.509 证书。然后你会得到使用配置文件。最常见的是Internet X.509 公钥基础设施证书和证书撤销列表 (CRL) 配置文件,它基本上定义了证书颁发机构应如何颁发证书以及实体应如何验证远程证书。

您可能还对这些问题感兴趣:

更一般地说,买一本关于 PKI 的书应该会有所帮助。

于 2012-07-27T17:18:03.740 回答