证书格式

SSL Certificate Format

我正在开始一些 C++ 编程以使用 libcrypto (OpenSSL) 读取证书,我很好奇证书(“crt”或“cert”)文件的格式。

在文件中,当我用文本编辑器查看时,有多个证书部分,如下所示:

-----BEGIN CERTIFICATE-----
XXXXXXXXXXXX
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
YYYYYYYYYYYY
-----END CERTIFICATE-----

当我在 Windows 中查看此证书时(只需双击“.crt”文件,它只显示证书路径中的一个条目。这些证书部分是否有定义的顺序是?

另外,当我使用 C# 读取证书时,如下所示:

X509Certificate2 cert = new X509Certificate2(@"E:\somePath\device.crt");
var bytes = cert.GetRawCertData();
string temp = Convert.ToBase64String(bytes);

变量 temp 仅显示包含文件中第一个 begin/end 部分的数据。即temp包含“XXXXXXXXXXXX”

该证书也是客户端证书。

所以我很好奇:一个文件中的两个“证书”是什么?

谢谢!

在正常情况下,一个.crt文件只包含一个证书。但是,在某些情况下,某些应用程序可能允许一个文件包含多个证书。

例如,一些应用程序可能期望文件包含证书链的全部或部分证书。但是,在典型情况下,此类文件的扩展名为 .p12 (PKCS#12) 或 .pfx

扩展名.crt表示文件内容是证书,但扩展名并没有说明文件格式。文件格式可能是 PEM(隐私增强邮件)(RFC 7468), DER (Distinguished Encoding Rules) (X.690) 或其他格式。如果文件内容为文本数据,包含-----BEGIN ?????----,则文件格式为PEM。另一方面,如果文件包含二进制数据,则文件格式很可能是DER。

下图来自 Illustrated X.509 Certificate" illustrate relationship among ASN.1 (X.680), DER (X.690), BASE64 (RFC 4648) and PEM (RFC 7468).

我猜你手头的 .crt 文件代表了整个或部分证书链。