我在 .Net 中面临 2 路 ssl 配置的一些问题。不知何故,当我在构造函数中使用 .cer 文件和密码创建 X509Certificate2 对象时,密码被忽略(我输入了错误的密码并且它起作用了 - 响应成功返回)。另一方面,当我使用 .p12 文件时,行为符合预期(密码错误导致结果不成功)
有任何想法吗?
谢谢。
我在 .Net 中面临 2 路 ssl 配置的一些问题。不知何故,当我在构造函数中使用 .cer 文件和密码创建 X509Certificate2 对象时,密码被忽略(我输入了错误的密码并且它起作用了 - 响应成功返回)。另一方面,当我使用 .p12 文件时,行为符合预期(密码错误导致结果不成功)
有任何想法吗?
谢谢。
.cer 文件仅包含(通常情况下)未加密形式的 X509 证书。在这种情况下,解码证书不需要密码。我想 X509Certificate2 构造函数尝试确定 Byte[] 参数的编码格式,并在不需要时忽略密码参数。而且很可能在创建后,PrivateKey
对象的属性是null
.
加载 .cer 文件时,您应该使用仅采用 1 Byte[] 参数的构造函数。该构造函数的文档清楚地指定了支持的数据格式:
此构造函数使用字节数组中的证书信息创建一个新的 X509Certificate2 对象。字节数组可以是二进制 (DER) 编码或 Base64 编码的 X.509 数据。字节数组也可以是 PKCS7(Authenticode)签名文件;签名者证书用于创建对象。
PKCS#12 格式(.p12 或 .pfx 文件)是证书和私钥的容器格式。在这种情况下,需要密码才能解密加密的私钥。实际上,在 X509Certificate2 构造函数文档中指定了 PKCS#12 文件的行为:
此构造函数与包含证书私钥的 PKCS12 (PFX) 文件一起使用。使用正确的密码调用此构造函数会解密私钥并将其保存到密钥容器中。