2010-01-28 3 views
5
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, потому что сторонний API, которому я отправляю запрос SOAP, требует версии 2.RemoteCertificateValidationCallback с X509Certificate2

ответ

1

Не понимаю, почему это проблема. X509Certificate2 наследует от X509Certificate и поэтому может быть отброшен в один.

EDIT:

Кроме того X509Certificate2 имеет конструктор, который принимает имя файла, так что вам не нужно FileStream. Также я не вижу, чтобы вы использовали buffer в любом месте?

0

Эти три строки кода наверху даже не делают ничего. FileStream никогда не загружается в buffer, а X509Certificate2 никогда не загружается нигде!

X509Certificate2 имеет перегрузку конструктора, которая принимает имя файла в качестве аргумента. Это то, что вы должны использовать, если хотите загрузить сертификат из файла.

Возможно, это не погрузка сертификата, поэтому ваш обратный вызов не работает. Также чрезвычайно важно, чтобы безопасность транспорта использовалась для SOAP-службы - если это является продолжением других вопросов API PayPal, вам вообще не нужен ServerCertificateValidationCallback, это для обеспечения безопасности транспорта, и большинство WCF использует защиту сообщений.

5

Класс 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; 
}; 
Смежные вопросы