Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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:
- 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
- Protokollerin çalışır durumda olduğunu doğrulayın
- 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.
SQL Server Ağ Yapılandırması genişlet
<instance name>içinProtokolleri'ne sağ tıklayın ve Özellikler'ni seçinVarsayılan örnek adı MSSQLSERVER .
Bayraklar sekmesinde Katı Şifrelemeyi Zorla olarak Evet ayarlayın
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.
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.
İlgili içerik
- Katı şifreleme ile SQL Server'a bağlanma
- Aktarım Katmanı Güvenliği ve dijital sertifikalar
- SQL Server için Sertifika gereksinimleri
- SQL Server Veritabanı Altyapısını bağlantıları şifrelemek için yapılandırma
- TLS 1.3 desteği
- TDS 8.0
- Aktarım Katmanı Güvenliği (TLS) kayıt defteri ayarları