Aracılığıyla paylaş


TLS 1.3'i yapılandırma

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri

Bu makalede şunların nasıl yapılacağını açıklanmaktadır:

  1. Sql Server 2022 (16.x) örneğini Aktarım Katmanı Güvenliği (TLS) 1.3 ve TLS 1.2 kullanacak şekilde yapılandırma
  2. Protokollerin çalışır durumda olduğunu doğrulayın
  3. TLS 1.0 ve 1.1 dahil eski ve güvenli olmayan protokolleri devre dışı bırakma

Gereksinimler

SQL Server 2022'de (16.x) TLS 1.3 desteği şunları gerektirir:

  • Windows Server 2022
  • Toplu Güncelleştirme 1 veya üzeri ile SQL Server 2022 (16.x)
  • SQL Server örneği ağ protokolü olarak TCP/IP kullanır
  • Özel anahtarıyla birlikte yüklü geçerli bir X.509 sunucu sertifikası

Önemli

Bu belgede, gereksinimlerinizin kısa vadede hem TLS 1.3 hem de TLS 1.2 ve uzun vadede yalnızca TLS 1.3 olduğu varsayılır.

SQL Server ve TLS

SQL Server TLS işlemlerini gerçekleştirmez, bunun yerine windows tarafından Schannel SSPkullanılarak gerçekleştirilir. Schannel, Microsoft'un TLS gibi İnternet standart güvenlik protokollerini içeren ve kullanıma sunan bir Güvenlik Destek Sağlayıcısıdır (SSP). Schannel, OpenSSL'nin Linux'a yönelik olduğu Windows'a yöneliktir.

SQL Server için TLS'yi yapılandırmak için Windows için TLS'nin yapılandırılması gerekir.

Windows Server 2022'de SQL Server 2022 (16.x) ile SQL Server TLS 1.0, 1.1, 1.2 ve 1.3'i destekler. Bunu doğrulamak için TlsTest GitHub'da bulunan .NET kodunu kullanın. Araçtan çıkan bu şekilde görünür:

Trying Ssl2
Authentication failed, see inner exception.
Exception: The client and server cannot communicate, because they do not possess a common algorithm.
Trying Ssl3
Authentication failed, see inner exception.
Exception: The client and server cannot communicate, because they do not possess a common algorithm.
Trying Tls
Tls using TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
Trying Tls11
Tls11 using TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
Trying Tls12
Tls12 using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
Trying Tls13
Tls13 using TLS_AES_256_GCM_SHA384

Windows'ı yalnızca TLS 1.2 ve TLS 1.3 kullanacak şekilde yapılandırma

Windows,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL altında TLS protokol sürümlerinin yanı sıra şifre paketlerini de denetleyebilen bir kayıt defteri anahtarı kümesine sahiptir. Bu senaryo için, SQL Server örneği sunucu olarak davrandığından yalnızca sunucuları etkileyen protokol sürümleri önemlidir.

Aşağıdaki PowerShell betiği , sunucular tarafından kullanıldığında TLS 1.0 ve TLS 1.1'i etkinleştirmek veya devre dışı bırakmak için kayıt defterini güncelleştirir:

Uyarı

Devam etmeden önce kayıt defterini yedekleyin. Bu, gerekirse gelecekte kayıt defterini geri yüklemenize olanak sağlar.

# Learn more at https://learn.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings?tabs=diffie-hellman
Set-StrictMode -Version Latest

$base = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\'
$protocols = [ordered]@{
    "SSL 2.0" = $false
    "SSL 3.0" = $false
    "TLS 1.0" = $false
    "TLS 1.1" = $false
    "TLS 1.2" = $true
    "TLS 1.3" = $true
}

foreach ($version in $protocols.Keys) {

    $enabledValue = $protocols[$version]
    $path = $base + $version + '\Server'

    New-Item $path -Force | Out-Null
    New-ItemProperty -Path $path `
                     -Name 'Enabled' `
                     -Value $enabledValue `
                     -PropertyType 'DWord' `
                     -Force | Out-Null
                     
    Write-Host "$version is $enabledValue."
}

Bu kod, GitHubiçinde kullanılabilir.

Bu betiği çalıştırdıktan sonra, yeni TLS ayarlarının etkili olması için SQL Server işlemini yeniden başlatın. Şimdi makalenin başında belirtilen kodu çalıştırırsanız, şu komutu döndürür:

Trying Ssl2
Authentication failed, see inner exception.
Exception: The client and server cannot communicate, because they do not possess a common algorithm.
Trying Ssl3
Authentication failed, see inner exception.
Exception: The client and server cannot communicate, because they do not possess a common algorithm.
Trying Tls
Received an unexpected EOF    or 0 bytes from the transport stream.
Exception:
Trying Tls11
Received an unexpected EOF or 0 bytes from the transport stream.
Exception:
Trying Tls12
Tls12 using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
Trying Tls13
Tls13 using TLS_AES_256_GCM_SHA384

SSL 2.0, SSL 3.0, TLS 1.0 ve TLS 1.1'in tümünün bağlanamamasına rağmen hem TLS 1.2 hem de TLS 1.3'in başarılı olduğuna dikkat edin.

Kayıt defteri güncelleştirmesinin ardından Windows ve bu SQL Server örneği yalnızca TLS 1.2 ve TLS 1.3 bağlantılarına izin verir. Daha sonra, daha fazla istemci TLS 1.3'i desteklediğinde TLS 1.2'yi de devre dışı bırakabilirsiniz.

Sql Server örneğini katı şifrelemeye zorlamak için ayarlama

Son adım örneği Force Strict Encryptionkullanacak şekilde ayarlamaktır. Force Strict Encryptionile SQL örneği, tablosal veri akışının desteklenen bir sürümünü (TDS 8.0 veya üzeri) kullanır.

Bu ayarı ayarlamak için SQL Server Configuration Manager'ı kullanın.

  1. SQL Server Ağ Yapılandırması genişlet

  2. <instance name>içinProtokolleri'ne sağ tıklayın ve Özellikler'ni seçin

    Varsayılan örnek adı MSSQLSERVER .

  3. Bayraklar sekmesinde Katı Şifrelemeyi Zorla olarak Evet ayarlayın

    SQL Server Configuration Manager kullanıcı arabirimi denetiminin ekran görüntüsü, protokolleri yapılandır iletişim kutusu.

Güvenliği doğrulama

Bu bölümde şifrelemeyi doğrulamak için Wireshark, OpenSSL ve Nmap'in nasıl kullanılacağı gösterilmektedir.

Wireshark

TLS protokol sürümünü ve üzerinde anlaşmaya varılan şifreleme paketini belirlemek için ağ algılayıcılarını kullanabilirsiniz. Bazı verileri kafa karıştırıcı bulabilirsiniz. Wireshark'ın aşağıdaki ekran görüntüsüne bakarsanız paketin bir TLS v1.3 Kayıt Katmanı olduğunu gösterir, ancak protokol sürümü TLS 1.2 ve El Sıkışma Protokolü sürümü de TLS 1.2'dir. Bu, TLS 1.2 belirtiminin bir parçasıdır ve doğru ve beklenen bir özelliktir. Üzerinde anlaşmaya varılan protokol sürümü Uzantılar bölümündedir ve gördüğünüz gibi supported_versions TLS 1.3'dür.

TLS uzantısı bölümünün ekran görüntüsü.

OpenSSL

Ayrıca, üzerinde anlaşmaya varılan TLS bilgilerini bulmak için openssl'yi de kullanabilirsiniz.

Aşağıdaki komutu kullanın:

openssl s_client 127.0.0.1:1433

Komutu aşağıdaki gibi sonuçlar döndürür:

Post-Handshake New Session Ticket arrived:
SSL-Session:
   Protocol   : TLSv1.3
   Cipher     : TLS_AES_256_GCM_SHA384
   Session-ID : 516D56D99088BCDE1 <snip> 098EDB1A
   Session-ID-ctx:
   Resumption PSD: B2B9CB92B59aa1 <snip> BD824CBA
   PSK identity: None

Nmap

Nmap'in geçerli sürümü olan sürüm 7.94, şunu kullanırken TLS 1.3'ü algılamıyor gibi görünüyor:

nmap -sV --script ssl-enum-ciphers -p 1433 127.0.0.1.