Udostępnij za pośrednictwem


Konfiguracja silnika bazy danych SQL Server do szyfrowania połączeń

Dotyczy:programu SQL Server — tylko system Windows

Możesz zaszyfrować wszystkie połączenia przychodzące z programem SQL Server lub włączyć szyfrowanie tylko dla określonego zestawu klientów. W przypadku jednego z tych scenariuszy należy najpierw skonfigurować program SQL Server do używania certyfikatu spełniającego wymagania dotyczące certyfikatu dla programu SQL Server przed wykonaniem dodatkowych kroków na komputerze serwera lub komputerach klienckich w celu szyfrowania danych.

Notatka

Ten artykuł dotyczy programu SQL Server w systemie Windows. Aby skonfigurować program SQL Server w systemie Linux na potrzeby szyfrowania połączeń, zobacz Określanie ustawień protokołu TLS.

W tym artykule opisano sposób konfigurowania programu SQL Server dla certyfikatów (Krok 1) i zmienianie ustawień szyfrowania wystąpienia programu SQL Server (Krok 2). Oba kroki są wymagane do szyfrowania wszystkich połączeń przychodzących z programem SQL Server podczas korzystania z certyfikatu z publicznego urzędu komercyjnego. W innych scenariuszach zobacz Specjalne przypadki szyfrowania połączeń z programem SQL Server.

Krok 1. Konfigurowanie programu SQL Server do używania certyfikatów

Aby skonfigurować program SQL Server do używania certyfikatów opisanych w artykule Wymagania dotyczące certyfikatów dla programu SQL Server, wykonaj następujące kroki:

  1. Zainstaluj certyfikat na komputerze z uruchomionym programem SQL Server.
  2. Skonfiguruj program SQL Server do korzystania z zainstalowanego certyfikatu.

W zależności od wersji programu SQL Server Configuration Manager, do której masz dostęp na komputerze z programem SQL Server, użyj jednej z poniższych procedur, aby zainstalować i skonfigurować wystąpienie programu SQL Server.

Komputery z programem SQL Server Configuration Manager dla programu SQL Server 2019 i nowszych wersji

W programie SQL Server 2019 (15.x) i nowszych wersjach zarządzanie certyfikatami jest zintegrowane z programem SQL Server Configuration Manager i może być używane z wcześniejszymi wersjami programu SQL Server. Aby dodać certyfikat w pojedynczym wystąpieniu programu SQL Server, w konfiguracji klastra trybu failover lub w konfiguracji grupy dostępności, zapoznaj się z sekcją Zarządzanie certyfikatami (SQL Server Configuration Manager). Program Configuration Manager znacznie upraszcza zarządzanie certyfikatami, instalując certyfikat i konfigurując program SQL Server na potrzeby korzystania z zainstalowanego certyfikatu, wykonując kilka kroków.

Certyfikaty są przechowywane lokalnie dla użytkowników na komputerze. Aby zainstalować certyfikat do użycia przez program SQL Server, należy uruchomić program SQL Server Configuration Manager z kontem z uprawnieniami administratora lokalnego.

Możesz tymczasowo zainstalować wersję Express programu SQL Server 2019 (15.x) lub nowszą wersję do korzystania z programu SQL Server Configuration Manager, który obsługuje zintegrowane zarządzanie certyfikatami.

Komputery z programem SQL Server Configuration Manager dla programu SQL Server 2017 i starszych wersji

Jeśli używasz programu SQL Server 2017 (14.x) lub starszej wersji, a program SQL Server Configuration Manager dla programu SQL Server 2019 (15.x) nie jest dostępny, wykonaj następujące kroki, aby zainstalować i skonfigurować certyfikat na komputerze z programem SQL Server:

  1. W menu Start wybierz pozycję Uruchom, a następnie w polu Otwórz wpisz MMC i wybierz pozycję OK.
  2. W konsoli programu MMC w menu Plik wybierz pozycję Dodaj/Usuń przystawkę....
  3. W oknie dialogowym Dodawanie lub usuwanie przystawek wybierz pozycję Certyfikaty , następnie wybierz pozycję Dodaj.
  4. W oknie dialogowym przystawki Certyfikaty wybierz opcję Konto komputera, a następnie kliknij Dalej, a na koniec>Zakończ.
  5. W oknie dialogowym Dodawanie lub Usuwanie Przystawek wybierz pozycję OK.
  6. W konsoli programu MMC rozwiń Certyfikaty (komputer lokalny)>Osobiste, kliknij prawym przyciskiem myszy pozycję Certyfikaty , wskaż Wszystkie Zadania i wybierz Importuj .
  7. Zakończ Kreator importu certyfikatów , aby dodać certyfikat do komputera.
  8. W konsoli programu MMC kliknij prawym przyciskiem myszy zaimportowany certyfikat, wskaż Wszystkie zadaniai wybierz Zarządzaj kluczami prywatnymi. W oknie dialogowym Zabezpieczenia dodaj uprawnienia do odczytu dla konta użytkownika, które jest używane przez usługę programu SQL Server.
  9. W SQL Server Configuration Managerrozwiń SQL Server Network Configuration, kliknij prawym przyciskiem myszy pozycję Protokoły dla wystąpienia serwera <>i wybierz Właściwości .
  10. W oknie dialogowym Protocols for <instance name> Properties, na karcie Certyfikatu wybierz odpowiedni certyfikat z listy rozwijanej pola Certificate, a następnie wybierz pozycję OK.
  11. Jeśli chcesz zaszyfrować wszystkie połączenia z programem SQL Server, zobacz Krok 2: Konfigurowanie ustawień szyfrowania w programie SQL Server. Jeśli chcesz włączyć szyfrowanie tylko dla określonych klientów, uruchom ponownie usługę SQL Server i zobacz Specjalne przypadki szyfrowania połączeń z programem SQL Server.

Notatka

Aby zainstalować certyfikaty w konfiguracji grupy dostępności, powtórz poprzednią procedurę w każdym węźle w grupie dostępności, począwszy od węzła podstawowego.

Ważny

Konto usługi programu SQL Server musi mieć uprawnienia do odczytu certyfikatu używanego do wymuszania szyfrowania w wystąpieniu programu SQL Server. W przypadku konta usługi bez uprawnień należy dodać uprawnienia do odczytu do certyfikatu. Niepowodzenie tej czynności może spowodować niepowodzenie ponownego uruchomienia usługi PROGRAMU SQL Server.

Dodatkowa procedura dla wystąpień klastra awaryjnego

Certyfikat używany przez program SQL Server do szyfrowania połączeń jest określony w następującym kluczu rejestru:

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

Ten klucz zawiera właściwość certyfikatu znaną jako odcisk palca, który identyfikuje każdy certyfikat na serwerze. W środowisku klastra ten klucz jest ustawiony na Null, mimo że w magazynie istnieje prawidłowy certyfikat. Aby rozwiązać ten problem, należy wykonać te dodatkowe kroki w każdym z węzłów klastra po zainstalowaniu certyfikatu w każdym węźle:

  1. Przejdź do magazynu certyfikatów, w którym jest przechowywany w pełni kwalifikowany certyfikat nazwy domeny (FQDN). Na stronie właściwości certyfikatu przejdź do karty Szczegóły i skopiuj wartość odcisku palca certyfikatu do okna Notatnika.

  2. Usuń odstępy między znakami szesnastkowymi w wartości odcisku palca w programie Notatnik.

  3. Uruchom Edytor rejestru, przejdź do następującego klucza rejestru i wklej wartość z kroku 2:

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

  4. Jeśli serwer wirtualny SQL znajduje się obecnie w tym węźle, przełącz w tryb failover do innego węzła w klastrze i uruchom ponownie węzeł, w którym wystąpiła zmiana rejestru.

  5. Powtórz tę procedurę na wszystkich węzłach.

Ostrzeżenie

Niepoprawne edytowanie rejestru może poważnie uszkodzić system. Przed wprowadzeniem zmian w rejestrze zalecamy wykonanie kopii zapasowej wszystkich wartościowych danych na komputerze.

Notatka

Programy SQL Server 2008 R2 (10.50.x) i SQL Server 2008 R2 (10.50.x) Native Client (SNAC) obsługują certyfikaty wieloznaczne. Funkcja SNAC została od tego czasu wycofana i zastąpiona przez sterownik Microsoft OLE DB dla programu SQL Server i Microsoft ODBC dla programu SQL Server. Inni klienci mogą nie obsługiwać certyfikatów wieloznacznych.

Nie można wybrać certyfikatu typu wildcard przy użyciu programu SQL Server Configuration Manager. Aby użyć certyfikatu typu wildcard, musisz edytować klucz rejestru HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\SuperSocketNetLib i wprowadzić odcisk palca certyfikatu bez spacji do wartości dla certyfikatu.

Notatka

Aby używać szyfrowania z klastrem trybu failover, należy zainstalować certyfikat serwera z w pełni kwalifikowaną nazwą DNS serwera wirtualnego na wszystkich węzłach w klastrze trybu failover. Możesz ustawić w polu właściwości Protocols for virtsql w SQL Server Network Configuration wartość opcji ForceEncryption na Tak.

Podczas tworzenia szyfrowanych połączeń dla indeksatora Azure Search z SQL Server na maszynie wirtualnej Azure, zobacz Połączenia indeksatora z wystąpieniem SQL Server na maszynie wirtualnej Azure.

Krok 2. Konfigurowanie ustawień szyfrowania w programie SQL Server

Poniższe kroki są wymagane tylko wtedy, gdy chcesz wymusić zaszyfrowaną komunikację dla wszystkich klientów:

  1. W Menedżerze konfiguracji programu SQL Server rozwiń węzeł Konfiguracja sieci SQL Server, kliknij prawym przyciskiem myszy pozycję Protokoły dla wystąpienia serwera <>, a następnie wybierz Właściwości.
  2. Na karcie Flagi w polu ForceEncryption wybierz pozycję Tak, a następnie wybierz pozycję OK, aby zamknąć okno dialogowe.
  3. Uruchom ponownie usługę SQL Server.

Notatka

Niektóre scenariusze certyfikatów mogą wymagać zaimplementowania dodatkowych kroków na komputerze klienckim i w aplikacji klienckiej w celu zapewnienia zaszyfrowanych połączeń między klientem a serwerem. Aby uzyskać więcej informacji, zobacz Specjalne przypadki szyfrowania połączeń z programem SQL Server.

Więcej informacji

Szyfrowanie pakietów logowania a szyfrowanie pakietów danych

Na wysokim poziomie istnieją dwa typy pakietów w ruchu sieciowym między aplikacją kliencką programu SQL Server i programem SQL Server: pakiety poświadczeń (pakiety logowania) i pakiety danych. Podczas konfigurowania szyfrowania (po stronie serwera lub po stronie klienta) oba te typy pakietów są zawsze szyfrowane. Jednak nawet jeśli szyfrowanie nie zostanie skonfigurowane, poświadczenia (w pakiecie logowania) przesyłane, gdy aplikacja kliencka łączy się z programem SQL Server, są zawsze szyfrowane. Program SQL Server używa certyfikatu spełniającego wymagania dotyczące certyfikatu z zaufanego urzędu certyfikacji, jeśli jest dostępny. Ten certyfikat jest ręcznie skonfigurowany przez administratora systemu przy użyciu jednej z procedur opisanych wcześniej w artykule lub znajdujących się w magazynie certyfikatów na komputerze z programem SQL Server.

Certyfikaty z podpisem własnym wygenerowane przez program SQL Server

Program SQL Server używa certyfikatu z zaufanego urzędu certyfikacji, jeśli jest dostępny do szyfrowania pakietów logowania. Jeśli zaufany certyfikat nie jest zainstalowany, program SQL Server generuje certyfikat z podpisem własnym (certyfikat rezerwowy) podczas uruchamiania i używa tego certyfikatu z podpisem własnym do szyfrowania poświadczeń. Ten certyfikat z podpisem własnym pomaga zwiększyć bezpieczeństwo, ale nie chroni przed fałszowaniem tożsamości przez serwer. Jeśli jest używany certyfikat z podpisem własnym, a wartość opcji ForceEncryption jest ustawiona na Tak, wszystkie dane przesyłane przez sieć między programem SQL Server i aplikacją kliencką są szyfrowane przy użyciu certyfikatu z podpisem własnym.

W przypadku korzystania z certyfikatu z podpisem własnym program SQL Server rejestruje następujący komunikat w dzienniku błędów:

Certyfikat wygenerowany samodzielnie został pomyślnie załadowany na potrzeby szyfrowania.

Program SQL Server 2016 (13.x) i starsze wersje używają algorytmu SHA1. Jednak algorytm SHA1 i wiele starszych algorytmów są przestarzałe, począwszy od programu SQL Server 2016 (13.x). Aby uzyskać więcej informacji, zobacz funkcje uznane za przestarzałe w systemie bazy danych w programie SQL Server 2016 (13.x).

W tych środowiskach, jeśli korzystasz z automatycznie wygenerowanego przez SQL Server certyfikatu z podpisem własnym, niezależnie od tego, czy tylko w celach uzgadniania przedlogowania, czy do szyfrowania całej komunikacji serwer-klient, oprogramowanie do wykrywania luk w zabezpieczeniach, oprogramowanie zabezpieczające lub polityka firmy mogą oznaczyć to użycie jako problem z zabezpieczeniami. Dostępne są następujące opcje dla tych scenariuszy:

  • Utwórz nowy certyfikat z podpisem własnym lub certyfikat innej firmy, który używa silniejszych algorytmów szyfrowania i skonfiguruj program SQL Server do korzystania z tego nowego certyfikatu.
  • Ponieważ teraz rozumiesz przyczynę flagi, możesz zignorować komunikat (niezalecane).
  • Uaktualnij program SQL Server 2017 (14.x) lub nowszą wersję, która używa silniejszego algorytmu wyznaczania wartości skrótu (SHA256) dla certyfikatów z podpisem własnym.

Skrypt programu PowerShell do tworzenia certyfikatu z podpisem własnym dla programu SQL Server

Poniższy fragment kodu może służyć do tworzenia certyfikatu z podpisem własnym na komputerze z uruchomionym programem SQL Server. Certyfikat spełnia wymagania dotyczące szyfrowania dla samodzielnego wystąpienia SQL Server i jest zapisywany w magazynie certyfikatów lokalnego komputera (PowerShell musi zostać uruchomiony jako administrator):

# 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

Weryfikowanie szyfrowania sieci

Aby sprawdzić, czy szyfrowanie sieciowe zostało skonfigurowane i włączone pomyślnie, uruchom następujące zapytanie Transact-SQL:

USE [master];
GO

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

Kolumna encrypt_option jest wartością logiczną wskazującą, czy szyfrowanie jest włączone dla tego połączenia. Jeśli wartość jest TRUE, połączenie jest bezpiecznie szyfrowane. Jeśli wartość jest FALSE, połączenie nie jest szyfrowane.

Zachowanie certyfikatu programu SQL Server z uprawnieniami

Usługa SQL Server wykrywa i używa certyfikatu automatycznie do szyfrowania, jeśli spełnione są wszystkie następujące warunki:

  • Certyfikat ma podmiot, który zawiera pełną nazwę domeny (FQDN) maszyny.
  • Certyfikat jest instalowany w magazynie certyfikatów komputera lokalnego
  • Konto usługi programu SQL Server ma dostęp do klucza prywatnego certyfikatu

Jest to używane nawet wtedy, gdy certyfikat nie został wybrany w programie SQL Server Configuration Manager.

Aby zastąpić to zachowanie, wykonaj następujące czynności:

  • Konfigurowanie innego certyfikatu do użycia w programie SQL Server Configuration Manager

    lub

  • Usuwanie uprawnień konta usługi programu SQL Server do niepożądanego certyfikatu