Memahami dukungan enkripsi

Unduh driver JDBC

Saat menyambungkan ke SQL Server, jika aplikasi meminta enkripsi dan instans SQL Server dikonfigurasi untuk mendukung enkripsi TLS, Driver Microsoft JDBC untuk SQL Server memulai jabat tangan TLS. Jabat tangan memungkinkan server dan klien untuk menegosiasikan enkripsi dan algoritma kriptografi untuk digunakan untuk melindungi data. Setelah jabat tangan TLS selesai, klien dan server dapat mengirim data terenkripsi dengan aman. Selama jabat tangan TLS, server mengirimkan sertifikat kunci publiknya ke klien. Penerbit sertifikat kunci publik dikenal sebagai Otoritas Sertifikat (CA). Klien bertanggung jawab untuk memvalidasi bahwa otoritas sertifikat adalah salah satu kepercayaan klien.

Jika aplikasi tidak meminta enkripsi, Driver Microsoft JDBC untuk SQL Server tidak akan memaksa SQL Server untuk mendukung enkripsi TLS. Jika instans SQL Server tidak dikonfigurasi untuk memaksa enkripsi TLS, koneksi dibuat tanpa enkripsi. Jika instans SQL Server dikonfigurasi untuk memaksa enkripsi TLS, driver akan secara otomatis mengaktifkan enkripsi TLS saat berjalan pada Java Virtual Machine (JVM) yang dikonfigurasi dengan benar, atau koneksi dihentikan dan driver akan menimbulkan kesalahan.

Catatan

Pastikan nilai yang diteruskan ke serverName sama persis dengan Nama Umum (CN) atau nama DNS di Nama Alternatif Subjek (SAN) di sertifikat server agar koneksi TLS berhasil.

Untuk informasi selengkapnya tentang cara mengonfigurasi TLS untuk SQL Server, lihat Mengaktifkan koneksi terenkripsi ke Mesin Database.

Keterangan

Untuk memungkinkan aplikasi menggunakan enkripsi TLS, Driver Microsoft JDBC untuk SQL Server telah memperkenalkan properti koneksi berikut yang dimulai dengan rilis versi 1.2: enkripsi, trustServerCertificate, trustStore, trustStorePassword, dan hostNameInCertificate. Untuk memungkinkan driver menggunakan TDS 8.0 dengan enkripsi TLS, server properti koneksiCertificate telah diperkenalkan dimulai dengan rilis versi 11.2. Untuk informasi selengkapnya, lihat Mengatur properti koneksi.

Tabel berikut ini meringkas bagaimana Microsoft JDBC Driver untuk versi SQL Server berperilaku untuk kemungkinan skenario koneksi TLS. Setiap skenario menggunakan sekumpulan properti koneksi TLS yang berbeda. Tabel ini mencakup:

  • kosong: "Properti tidak ada dalam string koneksi"
  • nilai: "Properti ada dalam string koneksi dan nilainya valid"
  • any: "Tidak masalah apakah properti ada dalam string koneksi atau nilainya valid"

Catatan

Perilaku yang sama berlaku untuk autentikasi pengguna SQL Server dan autentikasi terintegrasi Windows.

Pengaturan properti Aktivitas
encrypt = false atau blank
trustServerCertificate = any
hostNameInCertificate = any
trustStore = apa pun
trustStorePassword = apa pun
Driver tidak akan memaksa server untuk mendukung enkripsi TLS. Jika server memiliki sertifikat yang ditandatangani sendiri, driver memulai pertukaran sertifikat TLS. Sertifikat TLS tidak akan divalidasi dan hanya kredensial (dalam paket login) yang dienkripsi.

Jika server mengharuskan klien untuk mendukung enkripsi TLS, driver akan memulai pertukaran sertifikat TLS. Sertifikat TLS tidak akan divalidasi, tetapi seluruh komunikasi akan dienkripsi.
encrypt = true
trustServerCertificate = true
hostNameInCertificate = any
trustStore = apa pun
trustStorePassword = apa pun
Driver meminta untuk menggunakan enkripsi TLS dengan server.

Jika server mengharuskan klien untuk mendukung enkripsi TLS atau jika server mendukung enkripsi, driver akan memulai pertukaran sertifikat TLS. Jika properti trustServerCertificate diatur ke "true", driver tidak akan memvalidasi sertifikat TLS.

Jika server tidak dikonfigurasi untuk mendukung enkripsi, driver akan memunculkan kesalahan dan mengakhiri koneksi.
encrypt = true
trustServerCertificate = false atau blank
hostNameInCertificate = kosong
trustStore = kosong
trustStorePassword = kosong
Driver meminta untuk menggunakan enkripsi TLS dengan server.

Jika server mengharuskan klien untuk mendukung enkripsi TLS atau jika server mendukung enkripsi, driver akan memulai pertukaran sertifikat TLS.

Driver akan menggunakan properti serverName yang ditentukan pada URL koneksi untuk memvalidasi sertifikat TLS server dan mengandalkan aturan pencarian pabrik manajer kepercayaan untuk menentukan penyimpanan sertifikat mana yang akan digunakan.

Jika server tidak dikonfigurasi untuk mendukung enkripsi, driver akan memunculkan kesalahan dan mengakhiri koneksi.
encrypt = true
trustServerCertificate = false atau blank
hostNameInCertificate = nilai
trustStore = kosong
trustStorePassword = kosong
Driver meminta untuk menggunakan enkripsi TLS dengan server.

Jika server mengharuskan klien untuk mendukung enkripsi TLS atau jika server mendukung enkripsi, driver akan memulai pertukaran sertifikat TLS.

Driver akan memvalidasi nilai subjek sertifikat TLS dengan menggunakan nilai yang ditentukan untuk properti hostNameInCertificate .

Jika server tidak dikonfigurasi untuk mendukung enkripsi, driver akan memunculkan kesalahan dan mengakhiri koneksi.
encrypt = true
trustServerCertificate = false atau blank
hostNameInCertificate = kosong
trustStore = nilai
trustStorePassword = nilai
Driver meminta untuk menggunakan enkripsi TLS dengan server.

Jika server mengharuskan klien untuk mendukung enkripsi TLS atau jika server mendukung enkripsi, driver akan memulai pertukaran sertifikat TLS.

Driver akan menggunakan nilai properti trustStore untuk menemukan file trustStore sertifikat dan nilai properti trustStorePassword untuk memeriksa integritas file trustStore.

Jika server tidak dikonfigurasi untuk mendukung enkripsi, driver akan memunculkan kesalahan dan mengakhiri koneksi.
encrypt = true
trustServerCertificate = false atau blank
hostNameInCertificate = kosong
trustStore = kosong
trustStorePassword = nilai
Driver meminta untuk menggunakan enkripsi TLS dengan server.

Jika server mengharuskan klien untuk mendukung enkripsi TLS atau jika server mendukung enkripsi, driver akan memulai pertukaran sertifikat TLS.

Driver akan menggunakan nilai properti trustStorePassword untuk memeriksa integritas file trustStore default.

Jika server tidak dikonfigurasi untuk mendukung enkripsi, driver akan memunculkan kesalahan dan mengakhiri koneksi.
encrypt = true
trustServerCertificate = false atau blank
hostNameInCertificate = kosong
trustStore = nilai
trustStorePassword = kosong
Driver meminta untuk menggunakan enkripsi TLS dengan server.

Jika server mengharuskan klien untuk mendukung enkripsi TLS atau jika server mendukung enkripsi, driver akan memulai pertukaran sertifikat TLS.

Driver akan menggunakan nilai properti trustStore untuk mencari lokasi file trustStore.

Jika server tidak dikonfigurasi untuk mendukung enkripsi, driver akan memunculkan kesalahan dan mengakhiri koneksi.
encrypt = true
trustServerCertificate = false atau blank
hostNameInCertificate = nilai
trustStore = kosong
trustStorePassword = nilai
Driver meminta untuk menggunakan enkripsi TLS dengan server.

Jika server mengharuskan klien untuk mendukung enkripsi TLS atau jika server mendukung enkripsi, driver akan memulai pertukaran sertifikat TLS.

Driver akan menggunakan nilai properti trustStorePassword untuk memeriksa integritas file trustStore default. Selain itu, driver akan menggunakan nilai properti hostNameInCertificate untuk memvalidasi sertifikat TLS.

Jika server tidak dikonfigurasi untuk mendukung enkripsi, driver akan memunculkan kesalahan dan mengakhiri koneksi.
encrypt = true
trustServerCertificate = false atau blank
hostNameInCertificate = nilai
trustStore = nilai
trustStorePassword = kosong
Driver meminta untuk menggunakan enkripsi TLS dengan server.

Jika server mengharuskan klien untuk mendukung enkripsi TLS atau jika server mendukung enkripsi, driver akan memulai pertukaran sertifikat TLS.

Driver akan menggunakan nilai properti trustStore untuk mencari lokasi file trustStore. Selain itu, driver akan menggunakan nilai properti hostNameInCertificate untuk memvalidasi sertifikat TLS.

Jika server tidak dikonfigurasi untuk mendukung enkripsi, driver akan memunculkan kesalahan dan mengakhiri koneksi.
encrypt = true
trustServerCertificate = false atau blank
hostNameInCertificate = nilai
trustStore = nilai
trustStorePassword = nilai
Driver meminta untuk menggunakan enkripsi TLS dengan server.

Jika server mengharuskan klien untuk mendukung enkripsi TLS atau jika server mendukung enkripsi, driver akan memulai pertukaran sertifikat TLS.

Driver akan menggunakan nilai properti trustStore untuk menemukan file trustStore sertifikat dan nilai properti trustStorePassword untuk memeriksa integritas file trustStore. Selain itu, driver akan menggunakan nilai properti hostNameInCertificate untuk memvalidasi sertifikat TLS.

Jika server tidak dikonfigurasi untuk mendukung enkripsi, driver akan memunculkan kesalahan dan mengakhiri koneksi.
encrypt = strict
hostNameInCertificate = nilai
trustStore = kosong
trustStorePassword = kosong
serverCertificate = nilai
Driver meminta untuk menggunakan enkripsi TDS 8.0 strict TLS dengan server.

Driver akan memulai jabat tangan TLS dan pertukaran sertifikat dengan server sebagai tindakan pertama.

Pengaturan trustServerCertificate diabaikan dan diperlakukan sebagai false dalam strict mode.

Driver akan menggunakan properti hostNameInCertificate atau serverCertificate opsional untuk memvalidasi sertifikat TLS server.

Jika server tidak dikonfigurasi untuk mendukung koneksi TDS 8, driver akan menimbulkan kesalahan dan mengakhiri koneksi.

Jika properti enkripsi diatur ke true, Driver Microsoft JDBC untuk SQL Server menggunakan penyedia keamanan JSSE default JVM untuk menegosiasikan enkripsi TLS dengan SQL Server. Penyedia keamanan default mungkin tidak mendukung semua fitur yang diperlukan untuk menegosiasikan enkripsi TLS dengan sukses. Misalnya, penyedia keamanan default mungkin tidak mendukung ukuran kunci umum RSA yang digunakan dalam sertifikat TLS SQL Server. Dalam hal ini, penyedia keamanan default mungkin memunculkan kesalahan yang akan menyebabkan driver JDBC mengakhiri koneksi. Untuk mengatasi masalah ini, salah satu opsi berikut dapat digunakan:

  • Mengonfigurasi SQL Server dengan sertifikat server yang memiliki kunci umum RSA yang lebih kecil
  • Konfigurasikan JVM untuk menggunakan penyedia keamanan JSSE yang berbeda di file properti keamanan "<java-home>/lib/security/java.security"
  • Menggunakan JVM yang berbeda

Memvalidasi sertifikat TLS server

Selama jabat tangan TLS, server mengirimkan sertifikat kunci publiknya ke klien. Driver atau klien JDBC harus memvalidasi bahwa sertifikat server dikeluarkan oleh otoritas sertifikat yang dipercaya klien. Driver memerlukan sertifikat server untuk memenuhi kondisi berikut:

  • Sertifikat dikeluarkan oleh otoritas sertifikat tepercaya.
  • Sertifikat harus dikeluarkan untuk autentikasi server.
  • Sertifikat tidak kedaluwarsa.
  • Nama Umum (CN) dalam Subjek atau nama DNS di Nama Alternatif Subjek (SAN) sertifikat sama persis dengan nilai serverName yang ditentukan dalam string koneksi atau, jika ditentukan, nilai properti hostNameInCertificate .
  • Nama DNS dapat menyertakan karakter kartubebas. Versi 7.2 sebelumnya, Driver Microsoft JDBC untuk SQL Server tidak mendukung pencocokan wild-card. Artinya, abc.com tidak akan cocok dengan *.com tetapi *.com akan cocok dengan *.com. Dengan versi 7.2 dan yang lebih baru, pencocokan wild-card sertifikat standar didukung.

Untuk penggunaan TDS 8.0 dengan strict enkripsi, nilai properti serverCertificate menyediakan jalur ke sertifikat server yang akan digunakan untuk validasi sertifikat server. File ini harus menggunakan format file PEM. Sertifikat yang diterima dari server harus sama persis dengan sertifikat ini.

Lihat juga

Menggunakan enkripsi
Mengamankan aplikasi driver JDBC