Sdílet prostřednictvím


Konfigurace databázového stroje SQL Serveru pro šifrování připojení

platí pro:SQL Server – jenom Windows

Všechna příchozí připojení k SQL Serveru můžete zašifrovat nebo povolit šifrování pouze pro určitou sadu klientů. Pro některý z těchto scénářů musíte nejprve nakonfigurovat SQL Server tak, aby používal certifikát, který splňuje požadavky na certifikát pro SQL Server předtím, než provedete další kroky na serverovém počítači nebo klientských počítačích k šifrování dat.

Poznámka

Tento článek se týká SQL Serveru ve Windows. Informace o konfiguraci SQL Serveru v Linuxu pro šifrování připojení najdete v tématu Určení nastavení protokolu TLS.

Tento článek popisuje, jak nakonfigurovat SQL Server pro certifikáty (krok 1) a změnit nastavení šifrování instance SQL Serveru (krok 2). Oba kroky jsou potřeba k šifrování všech příchozích připojení k SQL Serveru při použití certifikátu z veřejné komerční autority. Další scénáře najdete v tématu Speciální případy šifrování připojení k SQL Serveru.

Krok 1: Konfigurace SQL Serveru pro použití certifikátů

Pokud chcete nakonfigurovat SQL Server tak, aby používal certifikáty popsané v Požadavky na certifikáty proSQL Serveru, postupujte takto:

  1. Nainstalujte certifikát do počítače se systémem SQL Server.
  2. Nakonfigurujte SQL Server tak, aby používal nainstalovaný certifikát.

V závislosti na verzi nástroje SQL Server Configuration Manager, ke které máte přístup na počítači s SQL Serverem, použijte jeden z následujících postupů k instalaci a konfiguraci instance SQL Serveru.

Počítače s SQL Server Configuration Managerem pro SQL Server 2019 a novějšími verzemi

V SQL Serveru 2019 (15.x) a novějších verzích je správa certifikátů integrovaná do SQL Server Configuration Manageru a dá se použít s dřívějšími verzemi SQL Serveru. Pokud chcete přidat certifikát do jedné instance SQL Serveru, v konfiguraci clusteru s podporou převzetí služeb při selhání nebo v konfiguraci skupiny dostupnosti, přečtěte si téma správa certifikátů (SQL Server Configuration Manager). Configuration Manager výrazně zjednodušuje správu certifikátů tím, že se postará o instalaci certifikátu a konfiguraci SQL Serveru pro použití nainstalovaného certifikátu pomocí několika kroků.

Certifikáty se ukládají místně pro uživatele v počítači. Pokud chcete nainstalovat certifikát, který má SQL Server používat, musíte spustit SQL Server Configuration Manager s účtem, který má oprávnění místního správce.

Můžete dočasně nainstalovat edici Express SYSTÉMU SQL Server 2019 (15.x) nebo novější, která používá SQL Server Configuration Manager, která podporuje integrovanou správu certifikátů.

Počítače s SQL Server Configuration Managerem pro SQL Server 2017 a staršími verzemi

Pokud používáte SQL Server 2017 (14.x) nebo starší verzi a SQL Server Configuration Manager pro SQL Server 2019 (15.x) není dostupný, nainstalujte a nakonfigurujte certifikát na počítači s SQL Serverem takto:

  1. V nabídce Start vyberte Spustita do pole Otevřít zadejte MMC a vyberte OK.
  2. V konzole MMC v nabídce Soubor vyberte Přidat nebo odebrat modul snap-in....
  3. V dialogovém okně Přidat nebo odebrat moduly snap-in vyberte Certifikátya pak vyberte Přidat.
  4. V dialogovém okně modulu snap-in Certifikáty vyberte Účet počítačea pak vyberte Další>Dokončit.
  5. V dialogovém okně Přidat nebo odebrat moduly snap-in vyberte OK.
  6. V konzoli MMC rozbalte Certifikáty (místní počítač)>Osobní, klepněte pravým tlačítkem na Certifikáty, přejděte na Všechny úkolya vyberte Importovat.
  7. Dokončete průvodce importem certifikátu a přidejte do počítače certifikát.
  8. V konzole MMC klikněte pravým tlačítkem myši na importovaný certifikát, přejděte na Všechny úlohya vyberte Spravovat soukromé klíče. V dialogovém okně Zabezpečení přidejte oprávnění ke čtení uživatelského účtu používaného účtem služby SYSTÉMU SQL Server.
  9. V SQL Server Configuration Managerrozbalte SQL Server Network Configuration, klikněte pravým tlačítkem myši na Protokoly pro <server instance>a zvolte Vlastnosti.
  10. V dialogovém okně Protokoly pro název instance <> Vlastnosti vyberte na kartě Certifikát požadovaný certifikát v rozevíracím seznamu pro pole Certifikát a pak vyberte OK.
  11. Pokud potřebujete šifrovat všechna připojení k SQL Serveru, přečtěte si krok 2: Konfigurace nastavení šifrování v SQL Serveru. Pokud chcete povolit pouze šifrování pro konkrétní klienty, restartujte službu SQL Server a podívejte se na zvláštní případy šifrování připojení k SQL Serveru.

Poznámka

Pokud chcete nainstalovat certifikáty v konfiguraci skupiny dostupnosti, opakujte předchozí postup na každém uzlu ve vaší skupině dostupnosti počínaje primárním uzlem.

Důležitý

Účet služby SQL Serveru musí mít oprávnění ke čtení certifikátu použitého k vynucení šifrování instance SQL Serveru. Pro účet služby, který není privilegovaný, musí být oprávnění ke čtení přidána do certifikátu. Pokud to neuděláte, může selhat restartování služby SQL Serveru.

Další postup pro instance clusteru s podporou převzetí služeb při selhání

Certifikát používaný SQL Serverem k šifrování připojení je zadaný v následujícím klíči registru:

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

Tento klíč obsahuje vlastnost certifikátu označovaného jako kryptografický otisk, který identifikuje každý certifikát na serveru. V clusterovém prostředí je tento klíč nastavený na Null i když v úložišti existuje správný certifikát. Pokud chcete tento problém vyřešit, musíte po instalaci certifikátu do každého uzlu clusteru provést tyto dodatečné kroky:

  1. Přejděte do úložiště certifikátů, kde je uložený plně kvalifikovaný název domény (FQDN). Na stránce vlastností certifikátu přejděte na kartu Podrobnosti a zkopírujte hodnotu otisku prstu certifikátu do okna Poznámkového bloku.

  2. Odeberte mezery mezi hexadecimálními znaky v hodnotě kryptografického otisku v Poznámkový blok.

  3. Spusťte Editor registru, přejděte na následující klíč registru a vložte hodnotu z kroku 2:

    HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib\Certificate

  4. Pokud je SQL virtuální server aktuálně na tomto uzlu, proveďte převod při selhání na jiný uzel ve vašem clusteru a restartujte uzel, ve kterém došlo ke změně registru.

  5. Tento postup opakujte na všech uzlech.

Varování

Nesprávná úprava registru může vážně poškodit systém. Před provedením změn registru doporučujeme zálohovat všechna hodnotná data v počítači.

Poznámka

SQL Server 2008 R2 (10.50.x) a SQL Server 2008 R2 (10.50.x) Native Client (SNAC) podporují certifikáty se zástupnými znaky. SNAC je od té doby zastaralý a nahrazen ovladačem Microsoft OLE DB pro SQL Server a ovladač Microsoft ODBC pro SQL Server. Jiní klienti nemusí podporovat certifikáty se zástupnými kóty.

Certifikát se zástupným znakem nelze vybrat pomocí nástroje SQL Server Configuration Manager. Pokud chcete použít certifikát se zástupným znakem, musíte upravit klíč registru HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\SuperSocketNetLib a zadat kryptografický otisk certifikátu bez mezer do hodnoty Certifikát.

Poznámka

Pokud chcete použít šifrování s clusterem s podporou převzetí služeb při selhání, musíte nainstalovat certifikát serveru s plně kvalifikovaným názvem DNS virtuálního serveru na všech uzlech v clusteru s podporou převzetí služeb při selhání. Hodnotu možnosti ForceEncryption můžete nastavit v okně vlastností Protokoly pro virtsqlkonfigurace sítě SQL Serveru na Ano.

Při vytváření šifrovaných připojení pro indexer Azure Search k serveru SQL Server na virtuálním počítači Azure si přečtěte Připojení indexeru k instanci serveru SQL na virtuálním počítači Azure.

Krok 2: Konfigurace nastavení šifrování na SQL Serveru

Následující kroky se vyžadují jenom v případě, že chcete vynutit šifrovanou komunikaci pro všechny klienty:

  1. V SQL Server Configuration Manager rozbalte Konfigurace sítě SQL Server, klepněte pravým tlačítkem na Protokoly pro <instanci serveru>, a pak vyberte Vlastnosti.
  2. Na kartě Flags v poli ForceEncryption zvolte Anoa poté klepněte na OK pro zavření dialogového okna.
  3. Restartujte službu SQL Serveru.

Poznámka

Některé scénáře certifikátů můžou vyžadovat implementaci dalších kroků na klientském počítači a v klientské aplikaci, abyste zajistili šifrovaná připojení mezi klientem a serverem. Další informace naleznete v tématu Speciální případy šifrování připojení k SQL Serveru.

Další informace

Šifrování paketů přihlášení vs. šifrování datových paketů

Na vysoké úrovni existují dva typy paketů v síťovém provozu mezi klientskou aplikací SQL Serveru a SQL Serverem: pakety přihlašovacích údajů (přihlašovací pakety) a datové pakety. Při konfiguraci šifrování (na straně serveru nebo na straně klienta) se oba tyto typy paketů vždy šifrují. Ale i když šifrování nenakonfigurujete, přihlašovací údaje (v paketu pro přihlášení) přenášené při připojení klientské aplikace k SQL Serveru jsou vždy zašifrovány. SQL Server používá certifikát, který splňuje požadavky na certifikát od důvěryhodné certifikační autority, pokud je k dispozici. Tento certifikát buď ručně konfiguruje správce systému, pomocí některého z postupů popsaných v článku nebo je k dispozici v úložišti certifikátů na počítači s SQL Serverem.

Certifikáty podepsané svým držitelem vygenerované SQL Serverem

SQL Server používá certifikát od důvěryhodné certifikační autority, pokud je k dispozici pro šifrování přihlašovacích paketů. Pokud není nainstalovaný důvěryhodný certifikát, SQL Server během spuštění vygeneruje certifikát podepsaný svým držitelem (záložní certifikát) a použije tento certifikát podepsaný svým držitelem k šifrování přihlašovacích údajů. Tento certifikát podepsaný svým držitelem pomáhá zvýšit zabezpečení, ale nechrání se před falšováním identity ze strany serveru. Pokud se použije certifikát podepsaný svým držitelem a hodnota ForceEncryption je nastavená na Ano, všechna data přenášená přes síť mezi SQL Serverem a klientskou aplikací se šifrují pomocí certifikátu podepsaného svým držitelem.

Pokud používáte certifikát podepsaný svým držitelem, SQL Server zaznamená do protokolu chyb následující zprávu:

Certifikát vygenerovaný vlastním systémem byl úspěšně načten pro šifrování.

SQL Server 2016 (13.x) a starší verze používají algoritmus SHA1. Algoritmus SHA1 a mnoho starších algoritmů je ale zastaralé od SQL Serveru 2016 (13.x). Další informace najdete v tématu Zastaralé funkce databázového stroje v SQL Serveru 2016 (13.x).

Pokud v těchto prostředích používáte automaticky vygenerovaný samopodepsaný certifikát generovaný SQL Serverem, ať už jen pro prelogin handshake, nebo pro šifrování veškeré komunikace mezi serverem a klientem, může software pro detekci ohrožení zabezpečení nebo bezpečnostní software nebo zásady společnosti toto použití označit jako bezpečnostní problém. Pro tyto scénáře máte následující možnosti:

  • Vytvořte nový certifikát podepsaný svým držitelem nebo certifikát třetí strany, který používá silnější šifrovací algoritmy a nakonfiguruje SQL Server tak, aby používal tento nový certifikát.
  • Vzhledem k tomu, že teď rozumíte důvodu příznaku, můžete zprávu ignorovat (nedoporučuje se).
  • Upgradujte na SQL Server 2017 (14.x) nebo novější verzi, která používá silnější algoritmus hash (SHA256) pro certifikáty podepsané svým držitelem.

Skript PowerShellu pro vytvoření certifikátu podepsaného svým držitelem pro SQL Server

Následující fragment kódu lze použít k vytvoření certifikátu podepsaného svým držitelem na počítači s SQL Serverem. Certifikát splňuje požadavky na šifrování pro samostatnou instanci SQL Serveru a je uložený v úložišti certifikátů místního počítače (PowerShell se musí spustit jako správce):

# Define parameters
$certificateParams = @{
    Type = "SSLServerAuthentication"
    Subject = "CN=$env:COMPUTERNAME"
    DnsName = @("$($env:COMPUTERNAME)", $([System.Net.Dns]::GetHostEntry('').HostName), 'localhost')
    KeyAlgorithm = "RSA"
    KeyLength = 2048
    HashAlgorithm = "SHA256"
    TextExtension = "2.5.29.37={text}1.3.6.1.5.5.7.3.1"
    NotAfter = (Get-Date).AddMonths(36)
    KeySpec = "KeyExchange"
    Provider = "Microsoft RSA SChannel Cryptographic Provider"
    CertStoreLocation = "cert:\LocalMachine\My"
}

# Call the cmdlet
New-SelfSignedCertificate @certificateParams

Ověření šifrování sítě

Spuštěním následujícího dotazu Transact-SQL ověřte, že je správně nakonfigurované a povolené šifrování sítě:

USE [master];
GO

SELECT DISTINCT (encrypt_option)
FROM sys.dm_exec_connections
WHERE net_transport <> 'Shared memory';
GO

Sloupec encrypt_option je logická hodnota označující, jestli je pro toto připojení povolené šifrování. Pokud je hodnota TRUE, připojení se bezpečně zašifruje. Pokud je hodnota FALSE, připojení není šifrované.

Chování certifikátu SQL Serveru s oprávněními

Služba SQL Serveru rozpozná a použije certifikát automaticky k šifrování, pokud jsou splněny všechny následující podmínky:

  • Certifikát má subjekt, který obsahuje plně kvalifikovaný název domény počítače.
  • Certifikát je nainstalován v úložišti certifikátů místního počítače.
  • Účet služby SQL Serveru má udělený přístup k privátnímu klíči certifikátu.

K tomuto použití dochází i v případě, že v nástroji SQL Server Configuration Manager není vybraný certifikát.

Pokud chcete toto chování změnit, můžete učinit jednu z následujících možností:

  • Konfigurace jiného certifikátu pro použití v nástroji SQL Server Configuration Manager

    nebo

  • Odebrání oprávnění účtu služby SQL Serveru k nežádoucímu certifikátu