Wie eine PKCS # 12-Zertifikatdatei in einer .NET WebRequest benutzen?
-
21-08-2019 - |
Frage
Ich habe für den Zugriff auf einen einfachen XML-basierten Web-Service ein PKCS # 12-Zertifikat ausgestellt verwendet werden sollte. Wenn ich die PKCS # 12-Datei in dem Windows (Vista) laden, kann ich den Dienst mit meinem Browser zugreifen.
Der Versuch, den Service durch eine Anwendung zuzugreifen, ohne die PKCS # 12 in die OS-Zertifikat Laden Sammlungen, 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 Anforderung wurde abgebrochen: Es konnte keine sichere SSL / TLS-Kanal erstellen. Ich habe bemerkt, dass, wenn ich die # 12-Datei in Windows-PKCS tun laden, der Code plötzlich funktioniert.
Was muss ich tun, um mit der Datei zu machen allein zu tun und vermeiden Sie den Windows-Zertifikatspeicher verwenden?
Danke, Boaz
Weitere Informationen: Nur angewandt SP1 auf meine Visual Studio und jetzt bekomme ich eine andere Ausnahme: „Ein Aufruf von SSPI fehlgeschlagen, siehe Innere Ausnahme“ mit einer inneren Exception -> „Die empfangene Nachricht war unerwartet oder falsch formatierte.“
Lösung
Sie haben Ihr Zertifikat im Zertifikatspeicher installiert haben. Der einfachste Weg ist IE zu verwenden und das Zertifikat importiert werden.