Ich habe einen ganzen Tag hier verbracht und sehe keinen Ausweg mehr, außer meine Kameraden hier zu fragen.
Wir haben eine Web-API, die ein X509-Zertifikat akzeptiert, aber der folgende Code gibt mir sowohl auf localhost als auch auf dem dev-Server immer null.
unten ist mein Code, um das Zertifikat zu erhalten:
%Vor% Ich habe ein ActionFilterAttribute
erstellt und in seinem OnActionExecuting
versuche ich das Client-Zertifikat wie oben erwähnt zu bekommen.
Vorher habe ich das Zertifikat mithilfe von Windows PowerShell erstellt. Befolgen Sie dazu die Anweisungen auf diesem Link :
Der Befehl, den ich benutzt habe, war folgender:
%Vor%Das Zertifikat wurde erstellt und ich habe sichergestellt, dass es sich um vertrauenswürdige Zertifikate handelt. Dann habe ich von meiner Beispiel-Client-App den folgenden Code verwendet, um das Zertifikat an meine Web-API zu senden:
%Vor%Aber als dieser Code in meinem Web-API-Zertifikat ausgeführt wurde, war das Zertifikat null. Ich dachte, dass es wegen localhost sein könnte, und ich habe die Web-API auf dem Entwicklungsserver bereitgestellt, das Zertifikat war immer noch null.
Ich habe auch versucht, das Zertifikat von einem bestimmten Windows-Speicherort statt aus dem Speicher zu erhalten, das Ergebnis war das gleiche.
Ich habe viel gegoogelt und gegoogelt, aber nichts hat mir geholfen.
Setzen Sie ServerCertificateValidationCallback
Eigenschaft für Ihre request
:
ServerCertificateValidationCallback ist eine Methode um das Serverzertifikat zu validieren. Als Ergebnis wird request
Zertifikatsfehler ignorieren.
Wenn Sie .NET Framework mit weniger als v4.5 verwenden, können Sie denselben Rückruf für festlegen
ServicePointManager.ServerCertificateValidationCallback . Wenn Sie möchten, können Sie die benutzerdefinierte Validierung für Ihr Zertifikat überprüfen.
Sie müssen <security><access sslFlags="SslNegotiateCert" /></security>
zu Ihrer Webkonfigurationsdatei hinzufügen, wie von Spilarix angegeben, und ein Zertifikat aus dem Serverzertifikat exportieren und es installieren und für den Client verwenden, damit der Client über ein Zertifikat verfügt, das auf dem Serverzertifikat basiert (und kann validiert werden aber getrennt certicate (ich weiß, dass sie beide auf der gleichen Maschine sind). Das sollte dein Problem beheben
Tags und Links asp.net-web-api c# ssl x509certificate ssl-certificate