2010-01-28 7 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; 

Mam problem z powyższym kodzie jest to, że RemoteCertificateValidationCallback akceptuje tylko starszego typu X509Certificate2 X509Certificate nie jako parametr. Potrzebuję certyfikatu X509Certificate2, ponieważ interfejs API innej firmy, do którego wysyłam żądanie SOAP, wymaga wersji 2.RemoteCertificateValidationCallback z X509Certificate2

Odpowiedz

1

Nie rozumiem, dlaczego to jest problem. X509Certificate2 dziedziczy po X509Certificate i dlatego może być rzutowany na jeden.

EDIT:

Ponadto X509Certificate2 ma konstruktora, który przyjmuje nazwę pliku, dzięki czemu nie trzeba FileStream. Poza tym nie widzę, że używasz buffer w dowolnym miejscu?

0

Te trzy linie kodu na górze nic nie robią. FileStream nigdy nie zostanie załadowany do buffer, a X509Certificate2 nigdy nie jest załadowany z dowolnego miejsca!

Parametr X509Certificate2 ma przeciążenie konstruktora, które pobiera jako argument nazwę pliku. To właśnie powinieneś użyć, jeśli chcesz załadować certyfikat z pliku.

To nie ładowanie certyfikatu jest prawdopodobnie powodem, dla którego nie działa wywołanie zwrotne. Jest również bardzo nietypowe, aby zabezpieczenia transportu były używane w usłudze SOAP - jeśli jest to kontynuacja innych pytań interfejsu API systemu PayPal, w ogóle nie potrzebujesz ServerCertificateValidationCallback, to jest dla bezpieczeństwa transportu, a większość WCF korzysta z zabezpieczeń wiadomości.

5

Klasa X509Certificate2 ma konstruktor, który jako parametr przyjmuje certyfikat X509. Możesz to zrobić:

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; 
}; 
Powiązane problemy