X509Certificate2 certificate = new X509Certificate2();
FileStream fileStream = File.Open(@"C:\openssl\bin\cert_key.p12", FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[fileStream.Length];
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(certificate.ValidateRemoteCertificate);
Client.ClientCredentials.ClientCertificate.Certificate = certificate;我在上面的代码中遇到的问题是,RemoteCertificateValidationCallback只接受较旧的X509Certificate而不是X509Certificate2类型作为参数。我需要X509Certificate2,因为我向其发送SOAP请求的第三方API需要版本2。
发布于 2010-10-20 07:39:15
X509Certificate2类有一个以X509Certificate作为参数的构造函数。所以你可以这样做:
RemoteCertificateValidationCallback callback = delegate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors sslError) {
X509Certificate2 certv2 = new X509Certificate2(cert);
// more code here that sends soap request
return false;
};发布于 2010-01-29 00:37:34
我不明白为什么这是一个问题。X509Certificate2继承自X509Certificate,因此可以强制转换为one。
编辑:
此外,X509Certificate2有一个接受文件名的构造函数,因此您不需要FileStream。我也没看到你在使用buffer anywhere?
发布于 2010-01-29 00:42:19
顶部的那三行代码甚至什么也没做。FileStream永远不会加载到buffer中,并且X509Certificate2实际上也不会从任何地方加载!
X509Certificate2有一个以文件名作为其参数的构造函数重载。如果你想从一个文件中加载证书,你就应该使用它。
证书的这种未加载可能是回调不起作用的原因。传输安全性用于SOAP服务也是非常罕见的-如果这是其他WCF问题的后续问题,那么您根本不需要ServerCertificateValidationCallback,这是用于传输安全性的,并且大多数PayPal使用消息安全性。
https://stackoverflow.com/questions/2156116
复制相似问题