带有X509Certificate2的RemoteCertificateValidationCallback

Pos*_*Guy 5 c#

    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;
Run Code Online (Sandbox Code Playgroud)

我对上面的代码的问题是RemoteCertificateValidationCallback只接受旧的X509Certificate而不是X509Certificate2类型作为参数.我需要X509Certificate2,因为我发送SOAP请求的第三方API需要版本2.

λ J*_*kas 6

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;
};
Run Code Online (Sandbox Code Playgroud)


Kla*_*sen 1

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

编辑:

此外,X509Certificate2还有一个采用文件名的构造函数,因此您不需要FileStream. 我也没有看到你在buffer任何地方使用?