Bagikan melalui


Mengonfigurasi TLS 1.3

Berlaku untuk: SQL Server 2022 (16.x) dan versi yang lebih baru

Artikel ini menjelaskan cara:

  1. Mengonfigurasi instans SQL Server 2022 (16.x) untuk menggunakan Keamanan Lapisan Transportasi (TLS) 1.3 dan TLS 1.2
  2. Verifikasi bahwa protokol beroperasi
  3. Menonaktifkan protokol lama yang tidak aman termasuk TLS 1.0 dan 1.1

Persyaratan

Dukungan TLS 1.3 di SQL Server 2022 (16.x) memerlukan:

  • Windows Server 2022
  • SQL Server 2022 (16.x) dengan Pembaruan Kumulatif 1 atau yang lebih baru
  • Instans SQL Server menggunakan TCP/IP sebagai protokol jaringan
  • Sertifikat server X.509 yang valid diinstal bersama dengan kunci privatnya

Penting

Dokumen ini mengasumsikan bahwa persyaratan Anda mencakup TLS 1.3 dan TLS 1.2 dalam jangka pendek, dan hanya TLS 1.3 dalam jangka panjang.

SQL Server dan TLS

SQL Server tidak melakukan operasi TLS itu sendiri, melainkan pekerjaan ini dilakukan oleh Windows menggunakan Schannel SSP. Schannel adalah Penyedia Dukungan Keamanan (SSP) yang berisi dan mengekspos implementasi Protokol keamanan standar Internet Microsoft seperti TLS. Schannel adalah untuk Windows apa OpenSSL adalah untuk Linux.

Mengonfigurasi TLS untuk SQL Server memerlukan konfigurasi TLS untuk Windows.

Dengan SQL Server 2022 (16.x) pada Windows Server 2022, SQL Server mendukung TLS 1.0, 1.1, 1.2 dan 1.3. Untuk memverifikasi ini, gunakan kode .NET yang tersedia di GitHub di TlsTest. Output dari alat terlihat seperti ini:

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

Mengonfigurasi Windows untuk hanya menggunakan TLS 1.2 dan TLS 1.3

Windows memiliki sekumpulan kunci registri di bawah HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL versi protokol TLS kontrol tersebut serta suite cipher. Untuk skenario ini, hanya versi protokol yang memengaruhi server yang penting, karena instans SQL Server bertindak sebagai server.

Skrip PowerShell berikut memperbarui registri untuk mengaktifkan atau menonaktifkan TLS 1.0 dan TLS 1.1 saat digunakan oleh server:

Peringatan

Sebelum Anda melanjutkan, cadangkan registri. Ini akan memungkinkan Anda memulihkan registri di masa mendatang, jika perlu.

# 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."
}

Kode ini tersedia di GitHub.

Setelah Anda menjalankan skrip ini, mulai ulang proses SQL Server agar pengaturan TLS baru berlaku. Jika Sekarang Anda menjalankan kode yang disebutkan di awal artikel, kode tersebut mengembalikan:

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

Perhatikan bahwa SSL 2.0, SSL 3.0, TLS 1.0 dan TLS 1.1 semuanya gagal terhubung, tetapi TLS 1.2 dan TLS 1.3 berhasil.

Setelah pembaruan registri, Windows dan instans SQL Server ini hanya mengizinkan koneksi TLS 1.2 dan TLS 1.3. Kemudian, ketika lebih banyak klien mendukung TLS 1.3, Anda juga dapat menonaktifkan TLS 1.2.

Atur instans SQL Server untuk memaksa enkripsi yang ketat

Langkah terakhir adalah mengatur instans untuk menggunakan Force Strict Encryption. Dengan Force Strict Encryption, instans SQL menggunakan versi aliran data tabular yang didukung (TDS 8.0 atau yang lebih baru).

Gunakan Pengelola Konfigurasi SQL Server untuk mengatur pengaturan ini.

  1. Perluas Konfigurasi Jaringan SQL Server

  2. Klik kanan Protokol untuk <instance name>, dan pilih Properti

    Nama instans default adalah MSSQLSERVER.

  3. Pada tab Bendera , atur Paksa Enkripsi Ketat ke Ya

    Cuplikan layar kontrol UI untuk Pengelola Konfigurasi SQL Server, konfigurasikan dialog protokol.

Memverifikasi keamanan

Bagian ini menunjukkan cara menggunakan Wireshark, OpenSSL, dan Nmap untuk memverifikasi enkripsi.

Wireshark

Anda dapat menggunakan sniffer jaringan untuk menentukan versi protokol TLS dan cipher suite yang disepakati. Anda mungkin menemukan beberapa data yang membingungkan. Jika Anda melihat cuplikan layar di bawah ini dari Wireshark, itu menunjukkan paket adalah Lapisan Rekaman TLS v1.3, tetapi versi protokolnya adalah TLS 1.2 dan versi Protokol Handshake juga TLS 1.2. Ini semua adalah bagian dari spesifikasi TLS 1.2 dan sudah benar dan diharapkan. Versi protokol yang disepakati ada di bagian Ekstensi, dan seperti yang Anda lihat, supported_versions adalah TLS 1.3.

Cuplikan layar bagian ekstensi TLS.

OpenSSL

Anda juga dapat menggunakan openssl untuk menemukan informasi TLS yang disepakati.

Gunakan perintah berikut:

openssl s_client 127.0.0.1:1433

Perintah mengembalikan hasil seperti:

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

Versi Nmap saat ini, versi 7.94, tampaknya tidak mendeteksi TLS 1.3 saat menggunakan:

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