"Die Zertifikatkette wurde von einer nicht vertrauenswürdigen Behörde ausgestellt" beim Verbinden der Datenbank in der VM-Rolle von der Azure-Website

189

Beim Verbinden von MY DB mit der VM-Rolle (ich habe die SQL-VM-Rolle) von der Azure-Website tritt ein Fehler auf. Sowohl die VM-Rolle als auch die Azure-Website befinden sich in der Westzone. Ich stehe vor folgendem Problem:

SqlException (0x80131904): Eine Verbindung zum Server wurde erfolgreich hergestellt, aber während des Anmeldevorgangs ist ein Fehler aufgetreten. (Anbieter: SSL-Anbieter, Fehler: 0 - Die Zertifikatkette wurde von einer nicht vertrauenswürdigen Behörde ausgestellt.)]

Ich kann über SSMS eine Verbindung zu meiner Datenbank herstellen. Der 1433-Port ist in meiner VM-Rolle geöffnet. Was ist los mit meiner Verbindung?

ZafarYousafi
quelle

Antworten:

365

Im vertrauenswürdigen Stammspeicher Ihrer SQL VM ist wahrscheinlich kein CA-signiertes Zertifikat installiert.

Wenn Sie Encrypt=Truein der Verbindungszeichenfolge haben, setzen Sie diese entweder auf Aus (nicht empfohlen) oder fügen Sie der Verbindungszeichenfolge Folgendes hinzu:

TrustServerCertificate=True

SQL Server erstellt ein selbstsigniertes Zertifikat, wenn Sie keines für die Verwendung installieren, es wird jedoch vom Aufrufer nicht als vertrauenswürdig eingestuft, da es nicht von der Zertifizierungsstelle signiert ist, es sei denn, Sie weisen die Verbindungszeichenfolge an, einem Serverzertifikat zu vertrauen Standard.

Langfristig würde ich empfehlen, Let's Encrypt zu nutzen, um ein CA-signiertes Zertifikat von einer bekannten vertrauenswürdigen CA kostenlos zu erhalten und es auf der VM zu installieren. Vergessen Sie nicht, es so einzurichten, dass es automatisch aktualisiert wird. Weitere Informationen zu diesem Thema finden Sie in den SQL Server-Büchern online unter den Themen "Verschlüsselungshierarchie" und "Verschlüsselung ohne Validierung verwenden".

Thiago Silva
quelle
1
Entschuldigung, mein schlechtes TTrusted_Connection = False wurde in der Verbindungszeichenfolge gesetzt. es wahr zu machen funktioniert für mich. Thanx sowieso
ZafarYousafi
1
@ZafarYousafi Sie sollten diese Antwort als richtig markieren.
Termato
5
Es ist nicht ratsam , die Einstellung TrustServerCertificateauf true--dies deaktiviert die Zertifikatprüfung. Das ist nicht besser als nur Einstellung Encryptzu false!
Matt Thomas
5
Der Ratschlag "TrustServerCertificate = True" in dieser Antwort könnte das Problem beseitigen, aber es ist ein schrecklicher Ratschlag. Beheben Sie die Ursache, NICHT die Symptome. Der andere Teil der Antwort, der die Installation eines CA-signierten Zertifikats vorschlägt, ist der richtige Weg.
Mitch Wheat
In neueren Versionen von SSMS finden Sie auf der Registerkarte "Verbindungseigenschaften" eine kleine Option namens "Vertrauensserverzertifikat". Das Überprüfen dieses Jungen hat den gleichen Effekt wie die oben aufgeführten Befehle.
Gwynbleidd
82

Wenn Sie SQL Management Studio verwenden, gehen Sie zu den Verbindungseigenschaften und klicken Sie auf "Trust Server Certified". Wenn Sie SQL Management Studio verwenden, gehen Sie zu den Verbindungseigenschaften und klicken Sie auf "Trust Server Certified".

ct.tan
quelle
18
Es ist an sich kein schlechter Rat. Ich würde sagen, dass Sie es verwenden können, wenn Sie eine Verbindung zu einem Entwicklungsserver herstellen und Ihre Arbeit erledigen müssen, z. B. Codierung. Als Softwareentwickler habe ich ständig Probleme mit DevOps, die keine Zeit haben, Dinge schnell zu reparieren, und ich kann es mir nicht leisten, wertvolle Zeit gegen Fristen zu verschwenden. Das Abwägen der Datenexposition beim Deaktivieren dieser Option hängt stark von Ihrer Umgebung ab, ob sie lokal oder remote ist, wie Administratoren sie einrichten, IP-Einschränkungen und sie kann mit anderen Problemumgehungen leicht verringert werden. Sie können nicht sagen, dass es ein schlechter Rat ist, ohne ein paar Informationen über Ihre Infrastruktur zu haben.
OrizG
Du hast gerade meinen Tag gerettet. Danke @ ct.tan
Milinda Wickramasinghe
@OrizG Ich habe einen SQL Server auf einem lokalen Computer installiert und verwende ihn für persönliche Projekte. Im Moment möchte ich keinen Cent dafür ausgeben, also habe ich mir einen kostenlosen Host besorgt und versucht, den Server so zu konfigurieren, dass ich die Zertifikate signiere und sie zwischen dem Server und den Clients austausche, die ich habe. Ich werde verwenden, um darauf zuzugreifen. Aufgrund des kostenlosen Hosts habe ich dies mit Let's Encrypt jedoch nicht geschafft. Was genau sind die Nachteile dieser Lösung im Vergleich zum ordnungsgemäßen Austausch von Zertifikaten mit vertrauenswürdigen CA-signierten Zertifikaten?
ccoutinho
31

Wenn beim Versuch, eine Verbindung mit SSMS herzustellen, diese Fehlermeldung angezeigt wird, fügen Sie sie TrustServerCertificate=Truezu den zusätzlichen Verbindungsparametern hinzu.

vmanne
quelle
23
Mitch, Sie haben denselben Kommentar zu drei Antworten auf diese Frage abgegeben. Es könnte für andere Leser hilfreich sein, wenn Sie wesentliche Informationen oder Links angeben, warum dies "wirklich, wirklich schlechter Rat" ist.
Schuhlos
@Shoeless Mehrere Kommentare zur akzeptierten Antwort erklären.
Tom Blodget
4

Wenn Sie versuchen, über Datenverbindungen in Visual Studio 2015 darauf zuzugreifen und den oben genannten Fehler erhalten, gehen Sie zu Erweitert und stellen Sie ein, TrustServerCertificate=True dass der Fehler behoben wird.

Bhavjot
quelle
9
Es ist an sich kein schlechter Rat. Ich würde sagen, dass Sie es verwenden können, wenn Sie eine Verbindung zu einem Entwicklungsserver herstellen und Ihre Arbeit erledigen müssen, z. B. Codierung. Als Softwareentwickler habe ich ständig Probleme mit DevOps, die keine Zeit haben, Dinge schnell zu reparieren, und ich kann es mir nicht leisten, wertvolle Zeit gegen Fristen zu verschwenden. Das Abwägen der Datenexposition beim Deaktivieren dieser Option hängt stark von Ihrer Umgebung ab, ob sie lokal oder remote ist, wie Administratoren sie einrichten, IP-Einschränkungen und sie kann mit anderen Problemumgehungen leicht verringert werden. Sie können nicht sagen, dass es ein schlechter Rat ist, ohne ein paar Informationen über Ihre Infrastruktur zu haben.
OrizG
1

Wurde beim Zugriff auf SQLServer über IIS von demselben Problem betroffen. Das Hinzufügen von TrustServerCertificate = True hat nicht geholfen.

In MS-Dokumenten wurde möglicherweise ein Kommentar angezeigt : Stellen Sie sicher, dass das SQLServer-Dienstkonto Zugriff auf das von Ihnen verwendete TLS-Zertifikat hat. (NT Service \ MSSQLSERVER)

Öffnen Sie den persönlichen Speicher und klicken Sie mit der rechten Maustaste auf das Zertifikat -> Private Schlüssel verwalten -> Fügen Sie das SQL-Dienstkonto hinzu und geben Sie die volle Kontrolle.

Starten Sie den SQL-Dienst neu. Es funktionierte.

Kaavya T.
quelle
0

Das gleiche kann vom ssms-Client selbst erreicht werden. Öffnen Sie einfach die ssms, geben Sie den Servernamen ein und stellen Sie unter Optionen unter Überschrift Verbindungseigenschaften sicher, dass das Zertifikat des Vertrauensservers aktiviert ist.

Manas
quelle
0

Ich habe dieses Problem beim Importieren von Excel-Daten in SQLDatabase über SSMS. Die Lösung besteht darin, TrustServerCertificate = Trueim Sicherheitsbereich festzulegen

Kanna Reddy
quelle
0

Beim Versuch, den Profiler auszuführen, ist dieser Fehler aufgetreten, obwohl für meine Verbindung das Trust-Server-Zertifikat überprüft und TrustServerCertificate=Trueim Abschnitt "Erweitert" hinzugefügt wurde. Ich habe zu einer Instanz von SSMS gewechselt, die als Administrator ausgeführt wird, und der Profiler wurde ohne Probleme gestartet. (Ich hatte zuvor festgestellt, dass es lange dauerte, bis meine Verbindungen selbst zu lokalen Verbindungen hergestellt wurden, da das Ausführen als Administrator hilfreich war.)

Rechnung
quelle