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