Konfigurera SQL Server Database Engine för kryptering av anslutningar
gäller för:SQL Server – endast Windows
Du kan kryptera alla inkommande anslutningar till SQL Server eller aktivera kryptering för bara en specifik uppsättning klienter. För något av dessa scenarier måste du först konfigurera SQL Server att använda ett certifikat som uppfyller certifikatkrav för SQL Server- innan du vidtar extra åtgärder på serverdatorn eller klientdatorerna för att kryptera data.
Not
Den här artikeln gäller för SQL Server i Windows. Information om hur du konfigurerar SQL Server på Linux för kryptering av anslutningar finns i Ange TLS-inställningar.
Den här artikeln beskriver hur du konfigurerar SQL Server för certifikat (steg 1) och ändrar krypteringsinställningarna för SQL Server-instansen (steg 2). Båda stegen krävs för att kryptera alla inkommande anslutningar till SQL Server när du använder ett certifikat från en offentlig kommersiell utfärdare. Andra scenarier finns i Specialfall för kryptering av anslutningar till SQL Server.
Steg 1: Konfigurera SQL Server att använda certifikat
Så här konfigurerar du SQL Server för att använda certifikaten som beskrivs i certifikatkrav för SQL Server:
- Installera certifikatet på datorn som kör SQL Server.
- Konfigurera SQL Server att använda det installerade certifikatet.
Beroende på vilken version av SQL Server Configuration Manager du har åtkomst till på SQL Server-datorn använder du någon av följande procedurer för att installera och konfigurera SQL Server-instansen.
Datorer med SQL Server Configuration Manager för SQL Server 2019 och senare versioner
I SQL Server 2019 (15.x) och senare versioner integreras certifikathantering i SQL Server Configuration Manager och kan användas med tidigare versioner av SQL Server. Om du vill lägga till ett certifikat på en enda SQL Server-instans, i en konfiguration av redundanskluster eller i en konfiguration av tillgänglighetsgrupper kan du läsa Certifikathantering (SQL Server Configuration Manager). Configuration Manager förenklar certifikathanteringen avsevärt genom att installera certifikatet och konfigurera SQL Server för att använda det installerade certifikatet med bara några få steg.
Certifikat lagras lokalt för användarna på datorn. Om du vill installera ett certifikat för SQL Server som ska användas måste du köra SQL Server Configuration Manager med ett konto som har lokal administratörsbehörighet.
Du kan tillfälligt installera en Express-version av SQL Server 2019 (15.x) eller en senare version för att använda SQL Server Configuration Manager, som stöder integrerad certifikathantering.
Datorer med SQL Server Configuration Manager för SQL Server 2017 och tidigare versioner
Om du använder SQL Server 2017 (14.x) eller en tidigare version och SQL Server Configuration Manager för SQL Server 2019 (15.x) inte är tillgängligt följer du dessa steg för att installera och konfigurera certifikatet på SQL Server-datorn:
- På menyn Starta väljer du Köroch i rutan Öppna skriver du MMC- och väljer OK.
- I MMC--konsolen går du till menyn Arkiv och väljer Lägg till/ta bort snapin-modul....
- I dialogrutan Lägg till eller ta bort snapin-moduler väljer du Certifikatoch väljer sedan Lägg till.
- I snapin-modulens dialogruta för Certifikat väljer du datorkontooch sedan väljer du Nästa>Slutför.
- I dialogrutan Lägg till eller ta bort snap-ins väljer du OK.
- I MMC--konsolen expanderar du Certifikat (lokal dator)>Personlig, högerklickar på Certifikat, pekar på Alla uppgifteroch väljer Importera.
- Slutför guiden Importera certifikat för att lägga till ett certifikat på datorn.
- I MMC--konsolen högerklickar du på det importerade certifikatet, pekar på Alla uppgifteroch väljer Hantera privata nycklar. I dialogrutan Security lägger du till läsbehörighet för användarkontot som används av SQL Server-tjänstkontot.
- I SQL Server Configuration Managerexpanderar du SQL Server Network Configuration, högerklickar på Protokoll för <serverinstans>och väljer Egenskaper.
- I dialogrutan Protocols for <instance name> Properties går du till fliken Certifikat, väljer önskat certifikat i listrutan för Certifikat och väljer sedan OK.
- Om du kräver att alla anslutningar till SQL Server krypteras kan du läsa steg 2: Konfigurera krypteringsinställningar i SQL Server. Om du bara vill aktivera kryptering för specifika klienter startar du om SQL Server-tjänsten och läser Specialfall för kryptering av anslutningar till SQL Server-.
NOTERA
Om du vill installera certifikat i konfigurationen av tillgänglighetsgruppen upprepar du föregående procedur på varje nod i tillgänglighetsgruppen, från och med den primära noden.
Viktig
SQL Server-tjänstkontot måste ha läsbehörighet för certifikatet som används för att tvinga fram kryptering på SQL Server-instansen. För ett icke-privilegierat tjänstkonto måste läsbehörigheter läggas till i certifikatet. Om du inte gör det kan det leda till att omstarten av SQL Server-tjänsten misslyckas.
Extra procedur för failover-klusterinstanser
Certifikatet som används av SQL Server för att kryptera anslutningar anges i följande registernyckel:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.x\MSSQLServer\SuperSocketNetLib\Certificate
Den här nyckeln innehåller en egenskap för certifikatet som kallas tumavtryck, som identifierar varje certifikat på servern. I en klustrad miljö är den här nyckeln inställd på Null
även om rätt certifikat finns i lagret. För att lösa det här problemet måste du utföra de här extra stegen på var och en av dina klusternoder när du har installerat certifikatet på varje nod:
Gå till certifikatarkivet där det fullständigt kvalificerade domännamnscertifikatet (FQDN) lagras. På egenskapssidan för certifikatet går du till fliken Detaljer och kopierar tumavtrycksvärdet för certifikatet till ett Anteckningsblock fönster.
Ta bort blankstegen mellan hextecken i tumavtrycksvärdet i Notepad.
Starta Registereditorn, navigera till följande registernyckel och klistra in värdet från steg 2:
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib\Certificate
Om den virtuella SQL-servern för närvarande finns på den här noden redundansväxlar du till en annan nod i klustret och startar om noden där registerändringen inträffade.
Upprepa den här proceduren på alla noder.
Varning
Felaktig redigering av registret kan allvarligt skada systemet. Innan du gör ändringar i registret rekommenderar vi att du säkerhetskopierar alla värdefulla data på datorn.
Not
SQL Server 2008 R2 (10.50.x) och SQL Server 2008 R2 (10.50.x) Native Client (SNAC) stöder wildcardcertifikat. SNAC har sedan dess blivit inaktuell och ersatt med Microsoft OLE DB-drivrutin för SQL Server och Microsoft ODBC-drivrutin för SQL Server. Andra klienter kanske inte stöder jokercertifikat.
Jokerteckencertifikat kan inte väljas med hjälp av SQL Server Configuration Manager. Om du vill använda ett wildcard-certifikat måste du redigera registernyckeln HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\SuperSocketNetLib
och ange tumavtrycket för certifikatet utan blanksteg till värdet Certificate.
Notera
Om du vill använda kryptering med ett redundanskluster måste du installera servercertifikatet med det fullständigt kvalificerade DNS-namnet för den virtuella servern på alla noder i redundansklustret. Du kan ange värdet för alternativet ForceEncryption i egenskapsrutan Protocols for virtsql i SQL Server Network Configuration till Ja.
När du skapar krypterade anslutningar för en Azure Search-indexerare till SQL Server på en Azure Virtual Machine, se Indexer-anslutningar till en SQL Server-instans på en Azure Virtual Machine.
Steg 2: Konfigurera krypteringsinställningar i SQL Server
Följande steg krävs bara om du vill tvinga fram krypterad kommunikation för alla klienter:
- I SQL Server Configuration Manager expanderar du SQL Server Network Configuration, högerklickar på Protocols för <serverinstans>och väljer sedan Egenskaper.
- På fliken Flaggor i rutan ForceEncryption väljer du Jaoch väljer sedan OK för att stänga dialogrutan.
- Starta om SQL Server-tjänsten.
Note
Vissa certifikatscenarier kan kräva att du implementerar ytterligare steg på klientdatorn och i klientprogrammet för att säkerställa krypterade anslutningar mellan klienten och servern. Mer information finns i Specialfall för kryptering av anslutningar till SQL Server.
Mer information
Kryptering av inloggningspaket jämfört med kryptering av datapaket
På hög nivå finns det två typer av paket i nätverkstrafiken mellan ett SQL Server-klientprogram och SQL Server: autentiseringspaket (inloggningspaket) och datapaket. När du konfigurerar kryptering (antingen på serversidan eller på klientsidan) krypteras båda dessa pakettyper alltid. Men även om du inte konfigurerar kryptering krypteras alltid de autentiseringsuppgifter (i inloggningspaketet) som överförs när ett klientprogram ansluter till SQL Server. SQL Server använder ett certifikat som uppfyller certifikatkraven från en betrodd certifikatutfärdare om det är tillgängligt. Det här certifikatet konfigureras antingen manuellt av systemadministratören med någon av de procedurer som beskrivs tidigare i artikeln eller finns i certifikatarkivet på SQL Server-datorn.
SQL Server-genererade självsignerade certifikat
SQL Server använder ett certifikat från en betrodd certifikatutfärdare om det är tillgängligt för kryptering av inloggningspaket. Om ett betrott certifikat inte är installerat genererar SQL Server ett självsignerat certifikat (reservcertifikat) under starten och använder det självsignerade certifikatet för att kryptera autentiseringsuppgifterna. Det här självsignerade certifikatet bidrar till att öka säkerheten, men det skyddar inte mot identitetsförfalskning från servern. Om det självsignerade certifikatet används och värdet för alternativet ForceEncryption anges till Jakrypteras alla data som överförs över ett nätverk mellan SQL Server och klientprogrammet med hjälp av det självsignerade certifikatet.
När du använder ett självsignerat certifikat loggar SQL Server följande meddelande i felloggen:
Ett självgenererat certifikat lästes in för kryptering.
SQL Server 2016 (13.x) och tidigare versioner använder SHA1-algoritmen. SHA1-algoritmen och många äldre algoritmer är dock inaktuella från och med SQL Server 2016 (13.x). Mer information finns i inaktuella databasmotorfunktioner i SQL Server 2016 (13.x).
I dessa miljöer, om du använder det automatiskt genererade självsignerade certifikatet som genereras av SQL Server, antingen bara för handskakningen före inloggning eller för att kryptera all server-klientkommunikation, kan din sårbarhetsdetekteringsprogramvara, säkerhetsprogramvara eller företagspolicyer flagga denna användning som ett säkerhetsproblem. Du har följande alternativ för dessa scenarier:
- Skapa ett nytt självsignerat certifikat eller ett tredjepartscertifikat som använder starkare krypteringsalgoritmer och konfigurera SQL Server att använda det här nya certifikatet.
- Eftersom du nu förstår orsaken till flaggan kan du ignorera meddelandet (rekommenderas inte).
- Uppgradera till SQL Server 2017 (14.x) eller en senare version som använder en starkare hash-algoritm (SHA256) för självsignerade certifikat.
PowerShell-skript för att skapa självsignerat certifikat för SQL Server
Följande kodfragment kan användas för att skapa ett självsignerat certifikat på en dator som kör SQL Server. Certifikatet uppfyller kraven för kryptering för en fristående SQL Server-instans och sparas i den lokala datorns certifikatarkiv (PowerShell måste startas som administratör):
# 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
Verifiera nätverkskryptering
Kontrollera att nätverkskryptering har konfigurerats och aktiverats genom att köra följande Transact-SQL fråga:
USE [master];
GO
SELECT DISTINCT (encrypt_option)
FROM sys.dm_exec_connections
WHERE net_transport <> 'Shared memory';
GO
Kolumnen encrypt_option
är ett booleskt värde som anger om kryptering är aktiverat för den här anslutningen. Om värdet är TRUE
krypteras anslutningen på ett säkert sätt. Om värdet är FALSE
krypteras inte anslutningen.
SQL Server-certifikatbeteende med behörigheter
SQL Server-tjänsten identifierar och använder certifikatet automatiskt för kryptering om alla följande villkor är uppfyllda:
- Certifikatet har ett ämne som innehåller datorns fullständiga domännamn
- Certifikatet är installerat i den lokala datorns certifikatarkiv
- SQL Server-tjänstkontot beviljas åtkomst till certifikatets privata nyckel
Den här användningen sker även om certifikatet inte har valts i SQL Server Configuration Manager.
Så här åsidosätter du det här beteendet:
Konfigurera ett annat certifikat som ska användas i SQL Server Configuration Manager
eller
Ta bort behörigheterna för SQL Server-tjänstkontot till det oönskade certifikatet