2009-06-30 5 views
1

Ich habe ein PKCS # 12-Zertifikat ausgestellt, das für den Zugriff auf einen einfachen XML-basierten Webdienst verwendet werden soll. Wenn ich die PKCS # 12-Datei in Windows (Vista) lade, kann ich mit meinem Browser auf den Dienst zugreifen.Wie verwendet man eine PKCS # 12 Zertifikatsdatei in einer .NET WebRequest?

Der Versuch, den Service durch eine Anwendung zuzugreifen, ohne die PKCS Sammlungen # 12 in die OS-Zertifikat zu laden, habe ich den folgenden Code geschrieben:

// The certificate i'm using can not be authenticated as it is a development one. 
// For now, just ignore it. 
static bool myRemoteCertificateValidationCallback(
     Object sender, 
     X509Certificate certificate, 
     X509Chain chain, 
     SslPolicyErrors sslPolicyErrors 
) 
{ return true; } 

static void Main(string[] args) 
{ 
    ServicePointManager.ServerCertificateValidationCallback = myRemoteCertificateValidationCallback; 
    X509Certificate Cert = new X509Certificate(@"certificatefile.p12","medialab"); 
    HttpWebRequest Req = (HttpWebRequest)WebRequest.Create("https://ServiceURL"); 
    Req.ClientCertificates.Add(Cert); 

    Stream S = Req.GetResponse().GetResponseStream(); 
    TextReader TR = new StreamReader(S); 
    string Ret = TR.ReadToEnd(); 
    Console.Write(Ret); 

} 

Leider dieser Code nicht und ich bekomme eine System.Net .WebException: Die Anfrage wurde abgebrochen: Sicherer SSL/TLS-Kanal konnte nicht erstellt werden. Ich habe festgestellt, dass der Code plötzlich funktioniert, wenn ich die PKCS # 12-Datei in Windows lade.

Was muss ich tun, um mit der Datei alleine fertig zu werden und den Windows-Zertifikatspeicher zu vermeiden?

Danke, Boaz

Weitere Informationen: Nur SP1 auf meine Visual Studio angelegt und ich jetzt eine andere Ausnahme: "Ein Aufruf an SSPI failed finden Innere Ausnahme" mit einer inneren Ausnahme -> „The Die Nachricht wurde unerwartet oder falsch formatiert. "

Antwort

2

Sie müssen Ihr Zertifikat im Zertifikatsspeicher installiert haben. Der einfachste Weg ist, IE zu verwenden und das Zertifikat zu importieren.