Mengonfigurasi Mesin Database SQL Server untuk mengenkripsi koneksi

Anda dapat mengenkripsi semua koneksi masuk ke SQL Server atau mengaktifkan enkripsi hanya untuk sekumpulan klien tertentu. Untuk salah satu skenario ini, Pertama-tama Anda harus mengonfigurasi SQL Server untuk menggunakan sertifikat yang memenuhi persyaratan Sertifikat untuk SQL Server sebelum mengambil langkah tambahan pada komputer server atau komputer klien untuk mengenkripsi data.

Artikel ini menjelaskan cara mengonfigurasi SQL Server untuk sertifikat (Langkah 1) dan mengubah pengaturan enkripsi instans SQL Server (Langkah 2). Kedua langkah tersebut diperlukan untuk mengenkripsi semua koneksi masuk ke SQL Server saat menggunakan sertifikat dari otoritas komersial publik. Untuk skenario lain, lihat Kasus khusus untuk mengenkripsi koneksi ke SQL Server.

Langkah 1: Mengonfigurasi SQL Server untuk menggunakan sertifikat

Untuk mengonfigurasi SQL Server untuk menggunakan sertifikat yang dijelaskan dalam Persyaratan sertifikat untuk SQL Server, ikuti langkah-langkah berikut:

  1. Instal sertifikat di komputer yang menjalankan SQL Server.
  2. Konfigurasikan SQL Server untuk menggunakan sertifikat yang diinstal.

Bergantung pada versi Pengelola Konfigurasi SQL Server yang dapat Anda akses di komputer SQL Server, gunakan salah satu prosedur berikut untuk menginstal dan mengonfigurasi instans SQL Server.

Komputer dengan Pengelola Konfigurasi SQL Server untuk SQL Server 2019 dan versi yang lebih baru

Di SQL Server 2019 (15.x) dan versi yang lebih baru, manajemen sertifikat diintegrasikan ke dalam Pengelola Konfigurasi SQL Server, dan dapat digunakan dengan versi SQL Server yang lebih lama. Untuk menambahkan sertifikat pada satu instans SQL Server, dalam konfigurasi kluster failover, atau dalam konfigurasi grup ketersediaan, lihat Manajemen sertifikat (Pengelola Konfigurasi SQL Server). Configuration Manager sangat menyederhanakan manajemen sertifikat dengan mengurus penginstalan sertifikat dan mengonfigurasi SQL Server untuk menggunakan sertifikat yang diinstal hanya dengan beberapa langkah.

Sertifikat disimpan secara lokal untuk pengguna di komputer. Untuk menginstal sertifikat untuk digunakan SQL Server, Anda harus menjalankan Pengelola Konfigurasi SQL Server dengan akun yang memiliki hak istimewa administrator lokal.

Anda dapat menginstal sementara edisi Ekspres SQL Server 2019 (15.x) atau versi yang lebih baru untuk menggunakan Pengelola Konfigurasi SQL Server, yang mendukung manajemen sertifikat terintegrasi.

Komputer dengan Pengelola Konfigurasi SQL Server untuk SQL Server 2017 dan versi yang lebih lama

Jika Anda menggunakan SQL Server 2017 (14.x) atau versi yang lebih lama, dan Pengelola Konfigurasi SQL Server untuk SQL Server 2019 (15.x) tidak tersedia, ikuti langkah-langkah ini untuk menginstal dan mengonfigurasi sertifikat di komputer SQL Server:

  1. Pada menu Mulai , pilih Jalankan, dan di kotak Buka , ketik MMC dan pilih OK.
  2. Di konsol MMC, pada menu File, pilih Tambahkan/Hapus Snap-in....
  3. Dalam kotak dialog Tambahkan atau Hapus Snap-in , pilih Sertifikat, lalu pilih Tambahkan.
  4. Dalam kotak dialog Snap-in Sertifikat, pilih Akun komputer, lalu pilih Selesai Berikutnya>.
  5. Dalam kotak dialog Tambahkan atau Hapus Snap-in , pilih OK.
  6. Di konsol MMC, perluas Sertifikat (Komputer Lokal)>Pribadi, klik kanan Sertifikat, arahkan ke Semua Tugas, dan pilih Impor.
  7. Selesaikan Wizard Impor Sertifikat untuk menambahkan sertifikat ke komputer.
  8. Di konsol MMC, klik kanan sertifikat yang diimpor, arahkan ke Semua Tugas, dan pilih Kelola Kunci Privat. Dalam kotak dialog Keamanan , tambahkan izin baca untuk akun pengguna yang digunakan oleh akun layanan SQL Server.
  9. Di Pengelola Konfigurasi SQL Server, perluas Konfigurasi Jaringan SQL Server, klik kanan Protokol untuk <instans> server, dan pilih Properti.
  10. Dalam kotak dialog Protokol untuk <nama> instans Properti , pada tab Sertifikat , pilih sertifikat yang diinginkan dari daftar dropdown untuk kotak Sertifikat , lalu pilih OK.
  11. Jika Anda mengharuskan semua koneksi ke SQL Server dienkripsi, lihat Langkah 2: Mengonfigurasi pengaturan enkripsi di SQL Server. Jika Anda hanya ingin mengaktifkan enkripsi untuk klien tertentu, mulai ulang layanan SQL Server dan lihat Kasus khusus untuk mengenkripsi koneksi ke SQL Server.

Catatan

Untuk menginstal sertifikat dalam konfigurasi grup ketersediaan, ulangi prosedur di atas pada setiap simpul di grup ketersediaan Anda, dimulai dengan simpul utama.

Penting

Akun layanan SQL Server harus memiliki izin baca pada sertifikat yang digunakan untuk memaksa enkripsi pada instans SQL Server. Untuk akun layanan yang tidak memiliki hak istimewa, izin baca harus ditambahkan ke sertifikat. Kegagalan untuk melakukannya dapat menyebabkan hidupkan ulang layanan SQL Server gagal.

Prosedur tambahan untuk instans kluster failover

Sertifikat yang digunakan oleh SQL Server untuk mengenkripsi koneksi ditentukan dalam kunci registri berikut:

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

Kunci ini berisi properti sertifikat yang dikenal sebagai thumbprint, yang mengidentifikasi setiap sertifikat di server. Dalam lingkungan berkluster, kunci ini diatur ke Null meskipun sertifikat yang benar ada di penyimpanan. Untuk mengatasi masalah ini, Anda harus mengambil langkah tambahan ini pada setiap node kluster setelah menginstal sertifikat ke setiap simpul:

  1. Navigasikan ke penyimpanan sertifikat tempat sertifikat nama domain yang sepenuhnya memenuhi syarat (FQDN) disimpan. Pada halaman properti untuk sertifikat, buka tab Detail dan salin nilai thumbprint sertifikat ke jendela Notepad .

  2. Hapus spasi di antara karakter hex dalam nilai thumbprint di Notepad.

  3. Mulai Editor Registri, navigasikan ke kunci registri berikut, dan tempelkan nilai dari Langkah 2:

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

  4. Jika server virtual SQL saat ini berada di simpul ini, failover ke node lain di kluster Anda dan mulai ulang simpul tempat perubahan registri terjadi.

  5. Ulangi prosedur ini pada semua simpul.

Peringatan

Salah mengedit registri bisa sangat merusak sistem Anda. Sebelum membuat perubahan pada registri, kami sarankan Anda mencadangkan data bernilai apa pun di komputer.

Catatan

SQL Server 2008 R2 (10.50.x) dan SQL Server 2008 R2 (10.50.x) Native Client (SNAC) mendukung sertifikat wildcard. SNAC sejak itu tidak digunakan lagi dan diganti dengan Driver Microsoft OLE DB untuk SQL Server dan Microsoft ODBC Driver untuk SQL Server. Klien lain mungkin tidak mendukung sertifikat kartubebas.

Sertifikat kartubebas tidak dapat dipilih dengan menggunakan Pengelola Konfigurasi SQL Server. Untuk menggunakan sertifikat wildcard, Anda harus mengedit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\SuperSocketNetLib kunci registri, dan memasukkan thumbprint sertifikat, tanpa spasi, ke nilai Sertifikat .

Catatan

Untuk menggunakan enkripsi dengan kluster failover, Anda harus menginstal sertifikat server dengan nama DNS server virtual yang sepenuhnya memenuhi syarat pada semua node di kluster failover. Anda dapat mengatur nilai opsi ForceEncryption pada kotak properti Protokol untuk virtsql dari Konfigurasi Jaringan SQL Server ke Ya.

Saat membuat koneksi terenkripsi untuk pengindeks Azure Search ke SQL Server di Komputer Virtual Azure, lihat Koneksi pengindeks ke instans SQL Server di komputer virtual Azure.

Langkah 2: Mengonfigurasi pengaturan enkripsi di SQL Server

Langkah-langkah berikut hanya diperlukan jika Anda ingin memaksa komunikasi terenkripsi untuk semua klien:

  1. Di Pengelola Konfigurasi SQL Server, perluas Konfigurasi Jaringan SQL Server, klik kanan Protokol untuk <instans> server, lalu pilih Properti.
  2. Pada tab Bendera , dalam kotak ForceEncryption , pilih Ya, lalu pilih OK untuk menutup kotak dialog.
  3. Mulai ulang layanan SQL Server.

Catatan

Beberapa skenario sertifikat mungkin mengharuskan Anda menerapkan langkah-langkah tambahan pada komputer klien dan di aplikasi klien Anda untuk memastikan koneksi terenkripsi antara klien dan server. Untuk informasi selengkapnya, lihat Kasus khusus untuk mengenkripsi koneksi ke SQL Server.

Informasi selengkapnya

Enkripsi paket login vs. enkripsi paket data

Pada tingkat tinggi, ada dua jenis paket dalam lalu lintas jaringan antara aplikasi klien SQL Server dan SQL Server: paket kredensial (paket masuk) dan paket data. Saat Anda mengonfigurasi enkripsi (sisi server atau sisi klien), kedua jenis paket ini selalu dienkripsi. Tetapi, bahkan ketika Anda tidak mengonfigurasi enkripsi, kredensial (dalam paket masuk) yang dikirimkan ketika aplikasi klien terhubung ke SQL Server selalu dienkripsi. SQL Server menggunakan sertifikat yang memenuhi persyaratan sertifikat dari otoritas sertifikasi tepercaya jika tersedia. Sertifikat ini dikonfigurasi secara manual oleh administrator sistem, menggunakan salah satu prosedur yang sebelumnya dibahas dalam artikel, atau ada di penyimpanan sertifikat di komputer SQL Server.

Sertifikat yang ditandatangani sendiri yang dihasilkan SQL Server

SQL Server menggunakan sertifikat dari otoritas sertifikasi tepercaya jika tersedia untuk mengenkripsi paket masuk. Jika sertifikat tepercaya tidak diinstal, SQL Server menghasilkan sertifikat yang ditandatangani sendiri (sertifikat fallback) selama startup dan menggunakan sertifikat yang ditandatangani sendiri untuk mengenkripsi kredensial. Sertifikat yang ditandatangani sendiri ini membantu meningkatkan keamanan, tetapi tidak melindungi dari spoofing identitas oleh server. Jika sertifikat yang ditandatangani sendiri digunakan, dan nilai opsi ForceEncryption diatur ke Ya, semua data yang dikirimkan di seluruh jaringan antara SQL Server dan aplikasi klien dienkripsi menggunakan sertifikat yang ditandatangani sendiri.

Saat Anda menggunakan sertifikat yang ditandatangani sendiri, SQL Server mencatat pesan berikut ke log kesalahan:

Sertifikat yang dibuat sendiri berhasil dimuat untuk enkripsi.

SQL Server 2016 (13.x) dan versi yang lebih lama menggunakan algoritma SHA1. Namun, algoritma SHA1 dan banyak algoritma yang lebih lama tidak digunakan lagi dimulai dengan SQL Server 2016 (13.x). Untuk informasi selengkapnya, lihat Fitur Mesin Database yang Tidak Digunakan Lagi di SQL Server 2016.

Di lingkungan ini, jika Anda menggunakan sertifikat yang ditandatangani sendiri yang dibuat secara otomatis yang dihasilkan oleh SQL Server, baik hanya untuk jabat tangan pra-login atau untuk mengenkripsi semua komunikasi klien server, perangkat lunak deteksi kerentanan Anda atau perangkat lunak keamanan atau kebijakan perusahaan mungkin menandai penggunaan ini sebagai masalah keamanan. Anda memiliki opsi berikut untuk skenario ini:

  • Buat sertifikat baru yang ditandatangani sendiri atau sertifikat pihak ketiga yang menggunakan algoritma enkripsi yang lebih kuat dan konfigurasikan SQL Server untuk menggunakan sertifikat baru ini.
  • Karena sekarang Anda memahami alasan bendera, Anda dapat mengabaikan pesan (tidak disarankan).
  • Tingkatkan ke SQL Server 2017 (14.x) atau versi yang lebih baru yang menggunakan algoritma hash yang lebih kuat (SHA256) untuk sertifikat yang ditandatangani sendiri.

Skrip PowerShell untuk membuat sertifikat yang ditandatangani sendiri untuk SQL Server

Cuplikan kode berikut dapat digunakan untuk membuat sertifikat yang ditandatangani sendiri di komputer yang menjalankan SQL Server. Sertifikat memenuhi persyaratan untuk enkripsi untuk instans SQL Server yang berdiri sendiri dan disimpan di penyimpanan sertifikat komputer lokal (PowerShell harus diluncurkan sebagai administrator):

# Define parameters
$certificateParams = @{
    Type = "SSLServerAuthentication"
    Subject = "CN=$env:COMPUTERNAME"
    DnsName = @("{0}" -f [System.Net.Dns]::GetHostByName($env:computerName).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

Memverifikasi enkripsi jaringan

Untuk memverifikasi bahwa enkripsi jaringan dikonfigurasi dan berhasil diaktifkan, jalankan kueri Transact-SQL berikut:

USE [master];
GO

SELECT DISTINCT (encrypt_option)
FROM sys.dm_exec_connections;
GO

Kolom encrypt_option adalah nilai Boolean yang menunjukkan apakah enkripsi diaktifkan untuk koneksi ini. Jika nilainya adalah TRUE, koneksi dienkripsi dengan aman. Jika nilainya adalah FALSE, koneksi tidak dienkripsi.

Perilaku sertifikat SQL Server dengan izin

Layanan SQL Server mendeteksi dan menggunakan sertifikat secara otomatis untuk enkripsi jika semua kondisi berikut ini benar:

  • Sertifikat memiliki subjek yang berisi FQDN komputer
  • Sertifikat diinstal di penyimpanan sertifikat Komputer Lokal
  • Akun layanan SQL Server diberikan akses ke kunci privat sertifikat

Penggunaan ini terjadi meskipun sertifikat tidak dipilih di Pengelola Konfigurasi SQL Server.

Untuk mengambil alih perilaku ini, baik:

  • Mengonfigurasi sertifikat lain yang akan digunakan dalam Pengelola Konfigurasi SQL Server

    or

  • Menghapus izin akun layanan SQL Server ke sertifikat yang tidak diinginkan