Šifrované připojení (SSL) k SQL Serveru

Pro splnění bezpečnostních požadavků je v poslední době žádoucí šifrovat veškerou komunikaci klienta s SQL Serverem. Standardně probíhá komunikace nešifrovaně (šifruje se pouze výměna přihlašovacích údajů). Jak tedy nastavit šifrovanou komunikaci s SQL Serverem?

První, co je potřeba pro zprovoznění šifrovaného spojení s SQL Serverem, je zajistit certifikát pro SQL Server. Jedná se o certifikát vydaný důvěryhodnou certifikační autoritou, resp. autoritou, které důvěřují klientské počítače, s tím, že použití je prokázání identity serveru [Ověření serveru (1.3.6.1.5.5.7.3.1)].

Také je potřeba, aby certifikát byl vystaven s KeySpec option AT_KEYEXCHANGE. Toto je položka Typ klíče v nastavení Privátního klíče v průvodci žádosti o certifikát.

Certifikát musí být vystaven na plné doménové jméno serveru, a může obsahovat alternativní název.
Tento vystavený certifikát je potřeba naimportovat do osobních (Personal) certifikátů lokálního počítače [LocalComputer].

V SQL Server Configuration Manageru upravíme Properties položky Protocols for [INSTANCE] tak, že na záložce Certificate zvolíme naimportovaný certifikát. Pokud se v dialogu certifikát nezobrazuje, je možné jej vložit přímo přes editor registru.

Thumbprint certifikátu je v klíči registru:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.x\MSSQLServer\ SuperSocketNetLib\Certificate

Na první záložce Flags můžeme ještě zvolit zda bude šifrované spojení vyžadováno – Force Encryption nastavíme na YES. Po nastavení je potřeba provést restart serveru.

Ověření SSL spojení je možné ověřit ve výpisu jednotlivých spojení v položce encrypt_option:

select * from sys.dm_exec_connections

Pokud se po zadání certifikátu služba instance MS SQL Serveru nespustí (vyskytne se chyba) a v eventlogu je následující událost, případně je chyba v c:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Log\ERRORLOG:
Application Event Log Error eventID 26014:
Unable to load user-specified certificate [Cert Hash(sha1) "C216664F0BDB8E6E23ACC5031498DF8C3AD56667"]. The server will not accept a connection. You should verify that the certificate is correctly installed. See “Configuring Certificate for Use by SSL” in Books Online.

… je problém v tom, že uživatel, pod kterým běží služba instance SQL Server nemá přístup k privátnímu klíči certifikátu.
Řešením je tedy nastavit správná oprávnění. Nejprve zjistíme pod jakým účtem běží instance SQL Server (např. v SQL Server Configuration Manageru nebo se podíváme jaký uživatel má přístup do složky MSSQL v ..\Program Files\Microsoft SQL Server\MSSQLxx.[InstanceName]). S největší pravděpodobností půjde o účet NT Service\[název instance], např. NT Service\MSSQLSERVER.
Spustíme konzoli pro správu certifikátů počítače, a vyhledáme odpovídající certifikát v Personal/Certificates. V místním menu odpovídajícího certifikátu zvolíme Manage Private Key, přidáme práva účtu, pod nímž běží služba instance SQL Serveru a který jsme si zjistili dříve a nastavíme mu práva Read.

Connection string
Do connection stringu pro připojení je pak potřeba přidat Encrypt=1
Provider=SQLNCLI11;Server=myServerAddress;Database=myDataBase;
Trusted_Connection=yes;Encrypt=yes;

Komentáře nejsou povoleny.