Menggunakan Enkripsi Tanpa Validasi di SQL Server Native Client

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Penting

SQL Server Native Client (sering disingkat SNAC) telah dihapus dari SQL Server 2022 (16.x) dan SQL Server Management Studio 19 (SSMS). SQL Server Native Client (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan aplikasi baru. Beralih ke Microsoft OLE DB Driver (MSOLEDBSQL) baru untuk SQL Server atau Microsoft ODBC Driver terbaru untuk SQL Server ke depannya. Untuk SQLNCLI yang dikirim sebagai komponen SQL Server Database Engine (versi 2012 hingga 2019), lihat pengecualian Siklus Hidup Dukungan ini.

SQL Server selalu mengenkripsi paket jaringan yang terkait dengan masuk. Jika tidak ada sertifikat yang disediakan di server saat dimulai, SQL Server menghasilkan sertifikat yang ditandatangani sendiri yang digunakan untuk mengenkripsi paket masuk.

Sertifikat yang ditandatangani sendiri tidak menjamin keamanan. Jabat tangan terenkripsi didasarkan pada NT LAN Manager (NTLM). Sangat disarankan agar Anda menyediakan sertifikat yang dapat diverifikasi di SQL Server untuk konektivitas yang aman. Lapisan Keamanan Transportasi (TLS) hanya dapat dibuat aman dengan validasi sertifikat.

Aplikasi juga dapat meminta enkripsi semua lalu lintas jaringan dengan menggunakan kata kunci string koneksi atau properti koneksi. Kata kuncinya adalah "Enkripsi" untuk ODBC dan OLE DB saat menggunakan string penyedia dengan IDbInitialize::Initialize, atau "Use Encryption for Data" untuk ADO dan OLE DB saat menggunakan string inisialisasi dengan IDataInitialize. Ini juga dapat dikonfigurasi oleh SQL Server Configuration Manager menggunakan opsi Force Protocol Encryption , dan dengan mengonfigurasi klien untuk meminta koneksi terenkripsi. Secara default, enkripsi semua lalu lintas jaringan untuk koneksi mengharuskan sertifikat disediakan di server. Dengan mengatur klien Anda untuk mempercayai sertifikat di server, Anda mungkin rentan terhadap serangan man-in-the-middle. Jika Anda menyebarkan sertifikat yang dapat diverifikasi di server, pastikan Anda mengubah pengaturan klien tentang mempercayai sertifikat ke FALSE.

Untuk informasi tentang kata kunci string koneksi, lihat Menggunakan Kata Kunci String Koneksi dengan Klien Asli SQL Server.

Untuk mengaktifkan enkripsi yang akan digunakan ketika sertifikat belum disediakan di server, SQL Server Configuration Manager dapat digunakan untuk mengatur opsi Enkripsi Protokol Paksa dan Sertifikat Server Kepercayaan. Dalam hal ini, enkripsi akan menggunakan sertifikat server yang ditandatangani sendiri tanpa validasi jika tidak ada sertifikat yang dapat diverifikasi yang telah disediakan di server.

Aplikasi juga dapat menggunakan kata kunci "TrustServerCertificate" atau atribut koneksi terkait untuk menjamin bahwa enkripsi terjadi. Pengaturan aplikasi tidak pernah mengurangi tingkat keamanan yang ditetapkan oleh SQL Server Client Configuration Manager, tetapi dapat memperkuatnya. Misalnya, jika Enkripsi Protokol Paksa tidak diatur untuk klien, aplikasi dapat meminta enkripsi itu sendiri. Untuk menjamin enkripsi bahkan ketika sertifikat server belum disediakan, aplikasi dapat meminta enkripsi dan "TrustServerCertificate". Namun, jika "TrustServerCertificate" tidak diaktifkan dalam konfigurasi klien, sertifikat server yang disediakan masih diperlukan. Tabel berikut ini menjelaskan semua kasus:

Pengaturan klien Enkripsi Protokol Paksa Pengaturan klien Sertifikat Server Kepercayaan String koneksi/atribut koneksi Enkripsi/Gunakan Enkripsi untuk Data String koneksi/atribut koneksi Sertifikat Server Kepercayaan Hasil
Tidak T/A Tidak (default) Diabaikan Tidak ada enkripsi yang terjadi.
Tidak T/A Ya Tidak (default) Enkripsi terjadi hanya jika ada sertifikat server yang dapat diverifikasi, jika tidak, upaya koneksi gagal.
Tidak T/A Ya Ya Enkripsi selalu terjadi, tetapi dapat menggunakan sertifikat server yang ditandatangani sendiri.
Ya Tidak Diabaikan Diabaikan Enkripsi terjadi hanya jika ada sertifikat server yang dapat diverifikasi, jika tidak, upaya koneksi gagal.
Ya Ya Tidak (default) Diabaikan Enkripsi selalu terjadi, tetapi dapat menggunakan sertifikat server yang ditandatangani sendiri.
Ya Ya Ya Tidak (default) Enkripsi terjadi hanya jika ada sertifikat server yang dapat diverifikasi, jika tidak, upaya koneksi gagal.
Ya Ya Ya Ya Enkripsi selalu terjadi, tetapi mungkin menggunakan sertifikat server yang ditandatangani sendiri.

Perhatian

Tabel sebelumnya hanya menyediakan panduan tentang perilaku sistem di bawah konfigurasi yang berbeda. Untuk konektivitas yang aman, pastikan bahwa klien dan server keduanya memerlukan enkripsi. Pastikan juga bahwa server memiliki sertifikat yang dapat diverifikasi, dan bahwa pengaturan TrustServerCertificate pada klien diatur ke FALSE.

Penyedia OLE DB Klien Asli SQL Server

Penyedia SQL Server Native Client OLE DB mendukung enkripsi tanpa validasi melalui penambahan properti inisialisasi sumber data SSPROP_INIT_TRUST_SERVER_CERTIFICATE, yang diimplementasikan dalam kumpulan properti DBPROPSET_SQLSERVERDBINIT. Selain itu, kata kunci string koneksi baru, "TrustServerCertificate", seperti yang telah ditambahkan. Ini menerima nilai ya atau tidak; tidak ada adalah default. Saat menggunakan komponen layanan, ia menerima nilai benar atau salah; false adalah default.

Untuk informasi selengkapnya tentang penyempurnaan yang dilakukan pada kumpulan properti DBPROPSET_SQLSERVERDBINIT, lihat Properti Inisialisasi dan Otorisasi.

Driver ODBC Klien Asli SQL Server

Driver ODBC SQL Server Native Client mendukung enkripsi tanpa validasi melalui penambahan fungsi SQLSetConnectAttr dan SQLGetConnectAttr . SQL_COPT_SS_TRUST_SERVER_CERTIFICATE telah ditambahkan untuk menerima SQL_TRUST_SERVER_CERTIFICATE_YES atau SQL_TRUST_SERVER_CERTIFICATE_NO, dengan SQL_TRUST_SERVER_CERTIFICATE_NO menjadi default. Selain itu, kata kunci string koneksi baru, "TrustServerCertificate", telah ditambahkan. Ini menerima nilai ya atau tidak; "tidak" adalah default.

Lihat Juga

Fitur Klien Asli SQL Server