Laden...

Wie kann ich bei WCF ein Zertifikat validieren?

Erstellt von DNS46 vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.728 Views
D
DNS46 Themenstarter:in
21 Beiträge seit 2020
vor 4 Jahren
Wie kann ich bei WCF ein Zertifikat validieren?

Hallo zusammen,

vielleicht kann mir hier jemand nen Tipp geben. Ich nutze VS Express und möchte via WebService eine Verbindung mit verschiedenen Zielservern aufbauen. Die URLs sind SSL verschlüsselt.


Session.SessionWebServiceClient session = null;
session = new Session.SessionWebServiceClient("SessionWebService", url + "/ws/services/SessionWebService");
bool connected = session.hasSubject(); // Checks if a user is logged-in for the current session.
if (!connected)
{
   //Try to connect
   try
   {
      session.logIn(user, password);
   }
}

Funktionierte bisher bisher gut. Bei einem neu hinzugekommener Server wirft session.hasSubject() eine System.ServiceModel.Security.SecurityNegotiationException.
Das Zertifikat wird nicht erkannt/ gefunden

Ja und jetzt die Frage … Wo/ Wie muss des Zertifikat hinterlegt werden?
Im Windows certmgr habe ich es importiert. Ich ging bisher davon aus, dass dieser abgeprüft wird.
Scheint aber nicht so zu sein. Hat VS einen eigenen Store bzw. Wäre schön wenn jemand die Technolgie kurz erläutern könnte.
Danke Euch

16.806 Beiträge seit 2008
vor 4 Jahren

VS ist eine Entwicklungsumgebung; keine Runtime. Daher kann VS auch nicht irgendeinen Store haben.

Mir ist unklar, was für eine Art Webservice Du hast, aber ich rate einfach mal, dass Du einen SOAP Service hast und die Service-Generierung in Visual Studio verwendet hast.
SecurityNegotiationException riecht zumindest nach (dem bereits abgekündigten) WCF.

Wenn Du hier im Forum nach nach SecurityNegotiationException suchst wirst Du rausfinden, dass Du nicht der erste mit dem Problem bist.
Vermutlich wird bei Dir auch das ServerCertificateValidationCallback helfen, sofern es sich um ein eigenes Zertifikat handelt.

D
DNS46 Themenstarter:in
21 Beiträge seit 2020
vor 4 Jahren

Danke Abt,
ja richtig. Es handelt sich um einen generieren WebService zu SOAP und benutzte ein Self-Zertifikat. Wenn man die IDE ausschließen kann ist da ja schon mal ne Eingrenzung - Danke, ich schau mal weiter.

D
DNS46 Themenstarter:in
21 Beiträge seit 2020
vor 4 Jahren

Ok - immerhin lässt sich der Zertifikate Check pauschal akzeptieren.

ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);

Das haben zuvor ja doch schon so einige so gelöst. Da ich’s ich nur für das Testsystem benötige ist das OK.

Wenn jemand einen Hinweis liefern könnte, wäre es dennoch interessant zu wissen, wie man Zertifikatsinformationen abfragen kann.

ServicePoint servicecPoint = ServicePointManager.FindServicePoint(new Uri(@"https://www.google.de/"));
X509Certificate cert = svcPoint.Certificate;

cert enthält in dem Fall nichts. Wird es evtl. erst später nachgeladen?

16.806 Beiträge seit 2008
vor 4 Jahren

Dann hast Du offenbar immer noch nicht die Forensuche verwendet.

Wie Du im Snippet von ServerCertificateValidationCallback siehst kann der entsprechende certificate Parameter im Delegate für manuelle Prüfungen verwendet werden.
Pauschal true zurück zu liefern ist ohnehin eine Sicherheitslücke.

Ich vermute auch, dass Du bisher leider nicht in die Dokumentation geschaut hast.
Daher der Verweis auf WCF: Working with Certificates