X509CertificateCollection certCollec =
new X509CertificateCollection(new X509Certificate[1] { xcert});
X509CertificateCollection certCollecpfx =
new X509CertificateCollection(new X509Certificate[1] { pfxCert });
SSLStream.AuthenticateAsClient(apsHost, certCollec, SslProtocols.Default, false);
certCollec包含PEM格式的证书
certCollecpfx包含PFX格式的证书
AuthenticateAsClient服务器仅适用于PFX格式,即使pem和pfx的X509Certificate2对象具有完全相同的原始数据。
这是为什么?它不断告诉我对SSPI的调用失败:数据格式错误。
为什么不接受pem格式?
然后我尝试将pem格式导出到pfx并且它仍然不接受它 - 同样的错误,即使我将它导出到pfx。
byte[] pemCertBytes = pemCert.Export(X509ContentType.Pfx, "620fpass");
File.WriteAllBytes(@"C:\test\MyCert.pfx", pemCertBytes);
答案 0 :(得分:0)
even though the X509Certificate2 object for the pem and the pfx has exactly the same raw data.
我认为只有当pem证书包含实际证书和私钥时才会出现这种情况。此外,它具有包含实际内容的特定标题,即BEGIN-CERTIFICATE
和END-CERTIFICATE
。 pfx或pkcs#12证书包含证书和私钥,可以选择使用密码加密。如果您曾经将证书导入Windows证书存储区,您可能已经注意到它在提示时输入密码,这主要用于加密证书的私钥。
I then tried to export the pem format into pfx and it still didn't accept it
我建议使用openssl来执行此操作。一般语法是
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt