2016-04-23 2 views
5

Ich versuche, SQL Server 2014 zu konfigurieren, so dass ich eine Remoteverbindung mit SSL herstellen kann. Ein gültiges Platzhalterzertifikat ist auf dem Server installiert, und der Domänenname des Zertifikats (example.com) stimmt mit dem FQDN des Servers (test.windows-server-test.example.com) überein.SSL-Zertifikat fehlt in Dropdown-Liste in SQL Server-Konfigurationsmanager

Das Problem ist, dass im SQL Server-Konfigurations-Manager das Zertifikat nicht aufgeführt ist, so dass ich es nicht auswählen kann.

blank dropdown

Das heißt, bin ich auf Schritt 2.E.2 von this MS tutorial stecken.

+1

Es kann sein, dass das SSL-Zertifikat, das Sie importiert haben, falsche KeySpec: 'AT_SIGNATURE' anstelle von' AT_KEYEXCHANGE' hat. Sie können PFX mit 'certutil.exe -dump -v My.pfx' untersuchen und nach' KeySpec = 1 - AT_KEYEXCHANGE' suchen. Sie können das Zertifikat entfernen (vorher zu PFX exportieren, wenn Sie es noch nicht als PFX haben) und es erneut importieren mit 'certutil.exe -v -importPFX My.pfx AT_KEYEXCHANGE' – Oleg

+0

Danke, ich habe überprüft, aber ich hatte' KeySpec = 1 - AT_KEYEXCHANGE' – Jonah

+1

Ist das Zertifikat im Zertifikatspeicher des Computers installiert? Ist der "CN" -Wert des Zertifikats der gleiche wie der vollständige DNS-Name des Computers (auf dem SQL Server ausgeführt wird)? Haben das Zertifikat den alternativen Antragstellernamen mit einem anderen "DNS-Namen"? – Oleg

Antwort

6

Nach der Kommunikation in Kommentaren kann ich annehmen, dass Ihr Hauptproblem der CN Teil des Zertifikats ist, das Sie verwenden. Um eine erfolgreiche TLS-Kommunikation für IIS Server zu haben, hat man keine so starken Einschränkungen wie SQL Server.

Microsoft erfordert (siehe here), dass Der Name des Zertifikats muss der voll qualifizierte Domänenname (FQDN) des Computers sein. Es bedeutet, dass der Gegenstand Teil des Zertifikats wie CN = sieht test.widows-server-test.example.com, wo test.widows-server-test.example.com die FQDN Ihres Computers . Es ist nicht genug, dass man zum Beispiel verwenden CN = * .example.com und Subject Alternative Name, die DNS Name=*.example.com und DNS Name=test.widows-server-test.example.com enthält, DNS Name=test1.widows-server-test.example.com, DNS Name=test.widows-server-test2.example.com und so weiter. Ein solches Zertifikat ist für TLS in Ordnung, aber SQL Server verwirft es. Siehe the article, in der nähere Probleme beschrieben werden.

Ich empfehle Ihnen, selbstsigniertes Zertifikat mit CN gleich FQDN des SQL Server zu erstellen und zu überprüfen, dass das Zertifikat von SQL Server Configuration Manager gesehen wird.

AKTUALISIERT: Ich analysierte das Problem ein wenig mehr mit Bezug auf Process Monitor und fand heraus, dass zwei Werte in dem Registrierungs wichtig sind für SQL Server Configuration Manager: die Werte Hostname und Domain unter dem Schlüssel

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 

Wenn ich Domain und Hostname zu den Werten ändern, die CN des Zertifikats entspricht, wird das Zertifikat bereits im SQL Server-Konfigurations-Manager angezeigt. Es könnte nicht alle Probleme sein, aber es zeigt, dass SQL Server viel mehr als Webserver (zum Beispiel IIS) benötigt.

AKTUALISIERT 2: suchte ich das Problem noch einmal in Einzelheiten und ich glaube, ich den Weg gefunden habe, wie ein gemeinsames SSL-Zertifikat konfigurieren, die Sie bereits (für von Let's Encrypt, StartSSL oder einem anderen zertifizierten kostenlosen SSL Beispiel) haben .

Es ist wichtig zu unterscheiden, was SQL Server-Konfigurationsmanager aus der von SQL Server erforderlichen Konfiguration unterscheidet. Die Registerkarte Zertifikat der Eigenschaften des Konfigurations-Managers hat mehr harte Einschränkungen als SQL Server. Ich beschreibe oben nur die Einschränkungen von SQL Server Configuration Manager, aber man kann die Konfiguration direkt in der Registrierung vornehmen, um ein häufigeres SSL/TLS-Zertifikat von SQL Server zu verwenden.Ich beschreibe unten, wie man das machen kann.

Was man tun muss, kann in der Registry unter dem Schlüssel wie HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\MSSQLServer\SuperSocketNetLib, wo der Teil MSSQL12.SQL2014 kann ein wenig anders in Ihrem Fall sein. Der SQL Server Configuration Manager helfen uns zwei Werte in der Registry zu setzen: ForceEncryption und Certificate:

enter image description here

Der Certificate Wert ist SHA1-Hash, die durch die Untersuchung der Eigenschaften des Zertifikats zu finden ist:

enter image description here

oder erweiterten Eigenschaften des Zertifikats, die Sie durch Verwendung siehe certutil.exe -store My:

enter image description here

Man muss nur den Wert "Cert Hash (sha1)" kopieren, alle Leerzeichen entfernen und als Wert Certificate Wert in der Registrierung platzieren. Nachdem Sie die Einstellungen und der Neustart von SQL Server Windows-Dienst wird man in der Datei ERRORLOG in C:\Program Files\Microsoft SQL Server\...\MSSQL\Log Verzeichnis der Zeilen wie

2016-04-25 21 sehen: 44: 25.89 Server das Zertifikat [Cert Hash (SHA1) „C261A7C38759A5AD96AC258B62A308A26DB525AA "] wurde erfolgreich für die Verschlüsselung geladen.

+0

Danke, also habe ich den Computernamen in "test.example.com" geändert wegen der [Warnung hier] (https://support.dnsimple.com/articles/ssl-certificate-hostname /), und jetzt in "HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Dienste \ Tcpip \ Parameters" war sowohl Domain "example.com" als auch Hostname "test". Das Zertifikat erschien immer noch nicht. Ich habe den Hostnamen manuell in "example.com" geändert, aber das Zertifikat wird immer noch nicht angezeigt. Vermisse ich einen Schritt? – Jonah

+0

@Jonah: Legen Sie im SQL Server-Konfigurations-Manager "Verschlüsselung erzwingen" auf Ja fest? Haben Sie SQL Server neu gestartet? Kann der SQL Server neu gestartet werden? Kannst du im SQL ERRORLOG etwas wie "Das Zertifikat [Cert Hash (sha1) ...] wurde erfolgreich für die Verschlüsselung geladen"? Was für ein Problem hast du gerade? Welche Fehlermeldung hast du? – Oleg

+0

Ich habe gerade versucht, die Einstellung "Verschlüsselung erzwingen" auf "Ja" zu setzen und SQL Server von Diensten erfolgreich neu gestartet. Der einzige möglicherweise relevante Eintrag in ERRORLOG ist: 'Ein selbst erzeugtes Zertifikat wurde erfolgreich für die Verschlüsselung geladen. Beachten Sie, dass * sich * nicht auf das Platzhalter-Cert bezieht, den ich zu laden versuche, der nicht selbst generiert wird. Mein aktuelles Problem ist das gleiche wie im OP: Das Zertifikat-Dropdown ist noch leer. Ich kann kein Zertifikat auswählen, das von SQL Server verwendet werden soll. – Jonah