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