Ich dachte wirklich, ich hätte dieses Problem behoben, aber es wurde nur vorher getarnt.
Ich habe einen WCF-Dienst, der in IIS 7 mithilfe von HTTPS gehostet wird. Wenn ich auf diese Seite in Internet Explorer durchsuchen, es funktioniert wie ein Charme, ist dies , weil ich habe das Zertifikat auf den lokalen Stammzertifizierungsstelle Speicher hinzugefügt.
Ich entwickle auf einem Computer, daher sind Client und Server derselbe Computer. Das Zertifikat ist direkt vom IIS 7-Verwaltungs-Snap-In selbstsigniert.
Ich bekomme jetzt ständig diesen Fehler ...
Es konnte keine Vertrauensbeziehung für den sicheren SSL / TLS-Kanal mit Berechtigung hergestellt werden.
... wenn von der Client-Konsole aus aufgerufen.
Ich habe mir manuell Berechtigungen und Netzwerkdienste für das Zertifikat erteilt, verwendet findprivatekey
und verwendet cacls.exe
.
Ich habe versucht, über SOAPUI eine Verbindung zum Dienst herzustellen, und das funktioniert. Daher muss es sich um ein Problem in meiner Clientanwendung handeln, bei dem es sich um Code handelt, der auf dem basiert, was früher mit http funktioniert hat.
Wo sonst kann ich suchen? Ich habe anscheinend alle Möglichkeiten ausgeschöpft, warum ich keine Verbindung herstellen kann.
quelle
Antworten:
Als Abhilfe können Sie einen Handler für das Add
ServicePointManager
‚sServerCertificateValidationCallback
auf der Client - Seite:Beachten Sie jedoch, dass dies keine bewährte Methode ist, da das Serverzertifikat vollständig ignoriert wird und dem Service Point Manager mitgeteilt wird, dass jedes Zertifikat in Ordnung ist, was die Client-Sicherheit ernsthaft beeinträchtigen kann. Sie können dies verfeinern und einige benutzerdefinierte Überprüfungen durchführen (für Zertifikatsnamen, Hash usw.). Zumindest können Sie Probleme während der Entwicklung umgehen, wenn Sie Testzertifikate verwenden.
quelle
Wenn ich dieses Problem habe, liegt es daran, dass die client.config ihre Endpunkte hatte wie:
aber das Zertifikat erwartete
Das Ändern der Endpunkte entsprechend dem vollqualifizierten Domänennamen des Servers behebt mein Problem. Ich weiß, dass dies nicht die einzige Ursache für dieses Problem ist.
quelle
Die ersten beiden verwenden Lambda, die dritte verwendet regulären Code. Ich hoffe, Sie finden ihn hilfreich
quelle
Ihr Problem tritt auf, weil Sie einen selbstsignierten Schlüssel verwenden. Der Client vertraut diesem Schlüssel weder, noch stellt der Schlüssel selbst eine zu validierende Kette oder eine Zertifikatsperrliste bereit.
Sie haben einige Möglichkeiten - Sie können
Deaktivieren Sie die Zertifikatsüberprüfung auf dem Client (schlechter Zug, viele Angriffe in der Mitte gibt es zuhauf)
Verwenden Sie makecert, um eine Stammzertifizierungsstelle zu erstellen und daraus Zertifikate zu erstellen (ok, verschieben, aber es gibt noch keine CRL).
Erstellen Sie eine interne Stammzertifizierungsstelle mit Windows Certificate Server oder einer anderen PKI-Lösung und vertrauen Sie dann diesem Stammzertifikat (ein bisschen mühsam zu verwalten).
Kauf eines SSL-Zertifikats von einer der vertrauenswürdigen Zertifizierungsstellen (teuer)
quelle
Eine einzeilige Lösung. Fügen Sie dies an einer beliebigen Stelle hinzu, bevor Sie den Server auf der Clientseite aufrufen:
Dies sollte nur zu Testzwecken verwendet werden, da der Client SSL / TLS-Sicherheitsüberprüfungen überspringt.
quelle
Ich bin auf dasselbe Problem gestoßen und konnte es mit zwei Lösungen beheben: Erstens habe ich das MMC-Snap-In "Zertifikate" für das "Computerkonto" verwendet und das selbstsignierte Zertifikat in den Ordner "Vertrauenswürdige Stammzertifizierungsstellen" gezogen . Dies bedeutet, dass der lokale Computer (derjenige, der das Zertifikat generiert hat) diesem Zertifikat jetzt vertraut. Zweitens habe ich festgestellt, dass das Zertifikat für einen internen Computernamen generiert wurde, aber auf den Webdienst unter einem anderen Namen zugegriffen wurde. Dies führte zu einer Nichtübereinstimmung bei der Validierung des Zertifikats. Wir haben das Zertifikat für computer.operations.local generiert, aber über https://computer.internaldomain.companydomain.com auf den Webdienst zugegriffen . Als wir die URL auf die URL umstellten, mit der das Zertifikat erstellt wurde, wurden keine Fehler mehr angezeigt.
Vielleicht hätte nur das Wechseln der URLs funktioniert, aber wenn Sie das Zertifikat als vertrauenswürdig einstufen, vermeiden Sie auch den roten Bildschirm in Internet Explorer, auf dem angegeben wird, dass das Zertifikat nicht vertrauenswürdig ist.
quelle
Wenn Sie .net Core verwenden, versuchen Sie Folgendes:
quelle
Bitte führen Sie folgende Schritte aus:
Öffnen Sie den Service-Link im IE.
Klicken Sie auf den in der Adressleiste angegebenen Zertifikatfehler und dann auf Zertifikate anzeigen.
Scheck ausgestellt an: Name.
Nehmen Sie den ausgegebenen Namen und ersetzen Sie die Erwähnung von localhost im Dienst- und Client-Endpunkt-Basisadressnamen durch einen vollqualifizierten Domänennamen (FQDN).
Zum Beispiel: https: // localhost : 203 / SampleService.svc An https: // INL-126166-.groupinfra.com : 203 / SampleService.svc
quelle
Zusätzlich zu den obigen Antworten kann dieser Fehler auftreten, wenn auf Ihrem Client die falsche TLS-Version ausgeführt wird, z. B. wenn auf dem Server nur TLS 1.2 ausgeführt wird.
Sie können das Problem beheben, indem Sie Folgendes verwenden:
quelle
Ich hatte das gleiche Problem. Ich hatte auch CA-Zertifikate im lokalen Geschäft hinzugefügt, aber ich tat es auf die falsche Weise.
Mit der mmc-Konsole (Start -> Ausführen -> mmc ) sollten Sie das Zertifikat- Snap-In als Dienstkonto (Auswahl des Dienstkontos von IIS) oder Computerkonto (wird für jedes Konto auf dem Computer hinzugefügt) hinzufügen.
Hier ein Bild von dem, wovon ich spreche
Von hier aus können Sie Zertifikate von Zertifizierungsstellen ( vertrauenswürdige Stammzertifizierungsstellen und Zwischenzertifizierungsstellen ) hinzufügen , und alles funktioniert einwandfrei
quelle
Ich hatte ein ähnliches Problem mit dem selbstsignierten Zertifikat. Ich könnte es beheben, indem ich den Zertifikatsnamen verwende, der dem FQDN des Servers entspricht.
Idealerweise sollte der SSL-Teil auf der Serverseite verwaltet werden. Der Client muss kein Zertifikat für SSL installieren. In einigen der genannten Beiträge wurde auch die Umgehung von SSL aus dem Clientcode erwähnt. Aber damit bin ich überhaupt nicht einverstanden.
quelle
Ich habe das Zertifikat einfach in den Ordner "Trusted Root Certification Authorities" gezogen und voila alles hat gut funktioniert.
Oh. Und ich habe zuerst Folgendes über eine Administrator-Eingabeaufforderung hinzugefügt:
Ich bin mir nicht sicher, welchen Namen Sie für den Benutzer benötigen (meiner ist norwegisch, wie Sie sehen können!) :
user=NT-AUTHORITY/INTERACTIVE
?Sie können alle vorhandenen URLs anzeigen, indem Sie den folgenden Befehl eingeben:
netsh http show urlacl
quelle
Dies trat auf, wenn versucht wurde, eine Verbindung zum WCF-Dienst über herzustellen. die IP zB
https://111.11.111.1:port/MyService.svc
bei Verwendung eines Zertifikats, das an einen Namen gebunden ist, zB mysite.com.Wechsel zum
https://mysite.com:port/MyService.svc
gelösten Problem.quelle
Dies trat auf, wenn versucht wurde, eine Verbindung zum WCF-Dienst herzustellen, indem nur der Hostname verwendet wurde, z. B. https: //host/MyService.svc, während ein Zertifikat verwendet wurde, das an einen Namen gebunden war, z. B. host.mysite.com.
Durch Wechseln zu https://host.mysite.com/MyService.svc wurde das Problem behoben.
quelle
Habe gerade ein ähnliches Problem behoben.
Mir wurde klar, dass ich einen Anwendungspool hatte, der unter einem Konto ausgeführt wurde, das nur Leseberechtigung für das verwendete Zertifikat hatte.
Die .NET-Anwendung konnte das Zertifikat korrekt abrufen, diese Ausnahme wurde jedoch nur beim Aufruf von GetRequestStream () ausgelöst.
Zertifikatsberechtigungen können über die MMC-Konsole verwaltet werden
quelle
Wenn Sie den .net-Kern verwenden, können Sie während der Entwicklung die Zertifikatsüberprüfung mithilfe von Compiler-Anweisungen umgehen. Auf diese Weise wird das Zertifikat nur für die Freigabe und nicht für das Debuggen validiert:
quelle
Fügen Sie dies Ihrem Client-Code hinzu:
quelle