Verbindung vom ACMP Server zum SQL Server einrichten
Verschlüsselte Verbindung zwischen dem ACMP Server und dem SQL Server herstellen
Es ist möglich eine verschlüsselte Verbindung zwischen dem ACMP Server und dem SQL Server herzustellen. Für die Transport Verschlüsselung stehen Ihnen zweierlei Optionen zur Wahl:
- Nutzen Sie einen Transport Layer Security, um die Daten zu verschlüsseln.
- Bauen Sie einen IPSec Tunnel auf, in der die Kommunikationsdaten geleitet werden.
Transport Layer Security
Ein SQL Server kann Transport Layer Security (TLS) verwenden, damit die Daten verschlüsselt übertragen werden.
Zertifikat erstellen
Am einfachsten können Sie ein Zertifikat mit dem nachfolgenden PowerShell Skript anlegen. Hierfür benötigen Sie jedoch Administratorrechte:
Powershell Skript zum Erzeugen des Zertifikats
$dnsname = ([System.Net.Dns]::GetHostByName((hostname)).HostName)
#Create SSL Certificate (replace with PKI function)
New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -subject
$Subject -DnsName $dnsname -FriendlyName SQLServer -NotAfter (Get-Date).AddMonths(24) -KeySpec KeyExchange
Sollten Sie einen anderen Weg gehen und Zertifikate aus MakeCert.exe, OpenSSL oder aus einer anderen CA benutzen, müssen Sie jedoch beachten, dass das Zertifikat bestimmte Eigenschaften aufweist:
- Sowohl CN des Subject als auch in der SAN Erweiterung muss der FQDN des SQL Servers eingetragen sein.
- In der Erweiterung Key Usage muss Digital Signature und Key Encipherment aufgelistet sein.
- In der Erweiterung Enhanced Key Usage muss Server Authentication (1.3.6.1.5.5.7.3.1) aufgelistet sein.
Das Zertifikat muss inklusive des privaten Schlüssels im Windows Certificate Store Personal für Local Machine hinterlegt werden. Zusätzlich dazu muss der Benutzer, unter dem der SQL Server läuft, die Leserechte auf den privaten Schlüssel haben.
SQL Server Dienst Leserechte gewähren
In der Regel läuft der SQL Server Dienst in einem virtuellen Account und nicht als lokaler Service Account. Der virtuelle Account verfügt nur über wenige Rechte.
Account des SQL Server Dienst bestimmen
Um den Account des SQL Server Dienst bestimmen zu können, müssen Sie zunächst den SQL Server Configuration Manager öffnen. Anschließend wählen Sie die SQL Server Services aus und öffnen diese. Öffnen Sie die Eigenschaften der SQL Server Instanz. Unter dem Tab Log On ist der genutzte Account Name hinterlegt.
Leserechte aktivieren
Sie müssen, wenn Sie eine verschlüsselte Verbindung zwischen dem ACMP Server und dem SQL Server herstellen wollen, die Leserechte für den Account des SQL Server Dienstes aktivieren.
Öffnen Sie dazu zunächst den Cert Manager für den Local Computer (z.B. mmc.exe öffnen und Snap-in hinzufügen) und wählen Sie dann den Ordner Personal > Certificates aus. Suchen Sie das entsprechende Zertifikat aus, für das Sie die Leserechte aktivieren wollen und klicken per Rechtsklick auf dieses. Unter dem geöffneten Menü müssen Sie nun All Tasks > Manage Private Keys… auswählen.
Fügen Sie anschließend den Account des SQL Servers hinzu. In dem nachfolgenden Bild ist es der Account NT Service\MSSQL$SQLEXPRESS. Sobald Sie den Account hinzugefügt haben, müssen Sie diesem die passenden Berechtigungen geben. Aktivieren Sie die Leserechte und bestätigen Sie die Auswahl mit OK.
Dem SQL Server das Zertifikat zuweisen
Sobald Sie eine Änderung an den Einstellungen vornehmen, werden diese erst nach einem Neustart des SQL Dienstes aktiv.
Innerhalb einer Stack Overflow Antwort wird nicht nur sehr detailliert aufgeführt, woran der Einstellungsdialog fest macht, ob ein Zertifikat ausgewählt werden kann, es wird auch zusätzlich der alternative Weg über die Registry erklärt. Auch wird dort erläutert, dass Wildcard Zertifikate zwar grundsätzlich unterstützt werden, aber teilweise nicht über die Oberfläche auswählbar sind. Wenn Sie dennoch den Weg über die Registry wählen, würde die Zuweisung trotzdem funktionieren.
Manuell
Um ein Zertifikat manuell dem SQL Server zuzuweisen, müssen einige Schritte beachtet werden. Öffnen Sie zunächst den SQL Server Configuration Manager und klappen Sie den Menüpunkt „SQL Server Network Configuration“ aus. Dort ist der Eintrag Protocols for SQLEXPRESS, den Sie per Rechtsklick öffnen müssen, um anschließend zu den Properties zu gelangen.
Im Fenster öffnen sich 3 Tabs, navigieren Sie zum Tab Certificate und wählen Sie das entsprechende Zertifikat aus. In der nachfolgenden Abbildung ist es das Zertifikat SQLServer. Wechseln Sie anschließend in den ersten Tab Flags zurück und wählen Sie dort die Option Force Encryption aus, indem Sie dies auf Yes stellen.
Per Registry
Die Einstellung des Zertifikats kann auch über die Registry (im Rahmen eines Skripts) erfolgen. Legen Sie dazu unter HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.%Instance%\MSSQLServer\SuperSocketNetLib (%Instance% durch den Instanznamen ersetzen) einen String mit dem Namen Certificate an. Als Wert muss der Thumbprint (meistens SHA1) des zu nutzenden Zertifikats (in Kleinbuchstaben) eingetragen werden. Legen Sie daneben ein DWord mit dem Namen ForceEncryption an und weisen ihm den Wert 1 zu.
Zertifikat verteilen
Damit die Gegenstelle das angebotene Zertifikat akzeptiert, muss dieses als vertrauenswürdig erkannt werden. Aus diesem Grund muss es in den Windows Certificate Store importiert werden. Beachten Sie, dass dies bei jedem Rechner erfolgen muss, der auf den SQL Server über die gesicherte Verbindung zugreifen soll, auch wenn dies lokal erfolgt.
Test mit SSMS
Sie können über das SQL Server Management Studio testen, ob die gesicherte Verbindung tatsächlich erfolgreich ist. Starten Sie dazu die Anwendung und navigieren Sie bei der Verbindung unter den Optionen zu dem Tab Connection Properties und aktivieren Sie die Checkbox Encrypt connection.
Wenn Sie die Checkbox Trust server certificate aktivieren, wird jedes Zertifikat als valide angesehen. Dies wird für den produktiven Einsatz nicht empfohlen!
ACMP Server Connectionstring anpassen
Sie können die Einstellungen für die Verbindung im SQL Server Management Studio auch über den Connectionstring vom ACMP Server einstellen:
Provider=SQLNCLI11.1;Password=MeinGeheimesPW;Persist Security Info=True;User ID=ACMPDBUser;Initial Catalog=ACMP;
Data Source=ServerNamenEingeben.aagon.local\SQLEXPRESS;Use Encryption for Data=True;MARS Connection=False;DataTypeCompatibility=80;Trust Server Certificate=False
Dazu muss die Eigenschaft Use Encryption for Data auf True gesetzt werden.
Sollte die Eigenschaft Trust Server Certificate ebenfalls auf True gesetzt werden, wird jedes Zertifikat als valide angesehen.
IPSec
Möchten Sie alternativ einen IPSec-Tunnel verwenden, um eine verschlüsselte Verbindung zwischen dem ACMP Server und dem SQL Server herzustellen, lesen Sie hier die Vorgehensweise nach.