我们正在为我们的一个客户在SSL握手中添加服务器证书验证。作为密码学和C世界的新手,我想首先要清楚我对这些事情的概念,然后从实施开始。
所以,我搜索了很多关于证书概念的内容,但是无法更好地理解我的概念,令我满意。实际上它增加了更多的混乱。 :)
以下是一些我几乎完全听不懂的事情: 1.什么是base64格式?与DER相同吗? 2. PEM文件总是包含base64内容? 3. Windows证书库使用的格式是什么?它是二进制的吗?
有人可以帮我。 如果这些事情得到了解决,我将非常感激。
答案 0 :(得分:11)
使用ASN.1定义X.509证书的结构。以下是an X.509 certificate的整体结构定义的摘录:
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 }
Certificate
值(填写了包含的值)使用DER格式进行编码,这是一种二进制格式。
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 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile,它实质上定义了证书颁发机构应如何颁发证书以及实体应如何验证远程证书。
您可能也对这些问题感兴趣:
更一般地说,获得一本关于PKI的书应该有所帮助。