首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用X509Certificate2的RemoteCertificateValidationCallback

使用X509Certificate2的RemoteCertificateValidationCallback
EN

Stack Overflow用户
提问于 2010-01-29 00:33:40
回答 3查看 6.5K关注 0票数 6
代码语言:javascript
复制
    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。

EN

回答 3

Stack Overflow用户

发布于 2010-10-20 07:39:15

X509Certificate2类有一个以X509Certificate作为参数的构造函数。所以你可以这样做:

代码语言:javascript
复制
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;
};
票数 6
EN

Stack Overflow用户

发布于 2010-01-29 00:37:34

我不明白为什么这是一个问题。X509Certificate2继承自X509Certificate,因此可以强制转换为one。

编辑:

此外,X509Certificate2有一个接受文件名的构造函数,因此您不需要FileStream。我也没看到你在使用buffer anywhere?

票数 1
EN

Stack Overflow用户

发布于 2010-01-29 00:42:19

顶部的那三行代码甚至什么也没做。FileStream永远不会加载到buffer中,并且X509Certificate2实际上也不会从任何地方加载!

X509Certificate2有一个以文件名作为其参数的构造函数重载。如果你想从一个文件中加载证书,你就应该使用它。

证书的这种未加载可能是回调不起作用的原因。传输安全性用于SOAP服务也是非常罕见的-如果这是其他WCF问题的后续问题,那么您根本不需要ServerCertificateValidationCallback,这是用于传输安全性的,并且大多数PayPal使用消息安全性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2156116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档