Enkripsi dan sertifikat go-mssqldb

Driver mendukung go-mssqldb beberapa mode enkripsi dan strategi validasi sertifikat untuk koneksi ke SQL Server dan Azure SQL. Artikel ini menjelaskan setiap mode enkripsi, cara mengonfigurasi validasi sertifikat, dan kapan menggunakan mode ketat TDS 8.0.

Pilih konfigurasi TLS

Gunakan tabel ini untuk memilih opsi teraman yang sesuai dengan lingkungan Anda sebelum Anda menyetel parameter individual.

Skenario Pengaturan yang direkomendasikan Mengapa
Azure SQL atau SQL Server 2022 dan versi yang lebih baru, dan Anda menginginkan perlindungan default terkuat encrypt=strict TDS 8.0 melakukan jabat tangan TLS sebelum negosiasi TDS dan selalu memvalidasi sertifikat.
Sertifikat server dirantai ke CA publik atau perusahaan tepercaya encrypt=true Validasi sertifikat standar biasanya cukup ketika nama host dan rantai kepercayaan sudah benar.
Server menggunakan CA privat yang tidak ada di penyimpanan kepercayaan sistem encrypt=true&certificate=/path/to/ca-cert.pem Menambahkan sertifikat CA ke kumpulan kepercayaan kustom dan mempertahankan validasi rantai normal.
Server tersebut menggunakan sertifikat yang ditandatangani sendiri dan Anda ingin melakukan pinning sertifikat encrypt=true&serverCertificate=/path/to/server.pem Membandingkan sertifikat server yang sama persis, byte demi byte, alih-alih mengandalkan rantai sertifikat CA.
Pengembangan lokal atau lingkungan pengujian sementara saja encrypt=true&TrustServerCertificate=true Tetap mengaktifkan enkripsi, tetapi melewatkan validasi identitas server. Jangan gunakan pengaturan ini dalam produksi.

Mode enkripsi

Atur encrypt parameter koneksi ke salah satu nilai berikut:

Value Behavior
strict Enkripsi TDS 8.0. Jabat tangan TLS terjadi sebelum negosiasi koneksi TDS. Memerlukan SQL Server 2022 atau Azure SQL.
true atau mandatory Koneksi dienkripsi setelah jabat tangan pralogin TDS.
false atau optional Enkripsi hanya digunakan jika server membutuhkannya. Ini adalah default ketika encrypt tidak ditentukan. Azure SQL selalu memerlukan enkripsi sisi server, sehingga koneksi ke Azure SQL dienkripsi terlepas dari pengaturan ini.
disable Tidak ada enkripsi. Tidak disarankan untuk penggunaan di lingkungan produksi.

Example

Aktifkan enkripsi dalam string koneksi dengan menggunakan encrypt parameter:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true

Validasi sertifikat

Saat Anda mengaktifkan enkripsi (encrypt=true atau encrypt=strict), driver memvalidasi sertifikat server kecuali Anda mengatur TrustServerCertificate=true. Ada dua pendekatan independen untuk validasi ini.

Validasi rantai dengan menggunakan certificate parameter

Berikan file sertifikat PEM atau DER. Driver menambahkan sertifikat ke kumpulan kepercayaan kustom dan melakukan validasi rantai X.509 standar terhadap kumpulan tersebut:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&certificate=/path/to/ca-cert.pem

Perbandingan tingkat byte dengan menggunakan serverCertificate parameter

Nota

Parameter ini serverCertificate diperkenalkan di driver v1.9.6.

Berikan file PEM atau DER yang berisi sertifikat server yang tepat. Driver membandingkan sertifikat server byte demi byte dengan file yang disediakan. Driver tidak melakukan validasi rantai. Pendekatan ini berguna untuk sertifikat yang ditandatangani sendiri:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&serverCertificate=/path/to/server.pem

Penggantian nama host

Secara default, driver memvalidasi bahwa Nama Umum (CN) atau Nama Alternatif Subjek (SAN) sertifikat cocok dengan nama host server. Gunakan hostnameincertificate untuk mengganti nama host yang diharapkan:

sqlserver://<user>:<password>@10.0.0.5:1433?database=AdventureWorks2025&encrypt=true&hostnameincertificate=<server>.domain.com

Lewati validasi sertifikat

Atur TrustServerCertificate=true untuk melewati semua validasi sertifikat. Koneksi masih dienkripsi, tetapi identitas server tidak diverifikasi:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&TrustServerCertificate=true

Caution

Pengaturan TrustServerCertificate=true mengekspos koneksi ke serangan musuh di tengah. Gunakan opsi ini hanya untuk pengembangan dan pengujian.

Mode ketat TDS 8.0

TDS 8.0 (enkripsi ketat) melakukan jabat tangan TLS sebelum negosiasi protokol TDS apa pun. Pendekatan ini mencegah penyerang menurunkan peringkat seluruh koneksi. TDS 8.0 memerlukan SQL Server 2022 atau Azure SQL:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=strict

Dalam mode ketat, TrustServerCertificate parameter diabaikan. Validasi sertifikat selalu terjadi, menggunakan penyimpanan kepercayaan sistem secara default. Anda dapat menyediakan certificate atau serverCertificate untuk validasi khusus.

Versi TLS Minimum

Gunakan parameter tlsmin untuk memaksakan versi minimum TLS:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&tlsmin=1.2

Nilai yang valid: 1.0, 1.1, 1.2, 1.3.

Ringkasan parameter enkripsi

Parameter Default Description
encrypt false Mode enkripsi. Azure SQL selalu memerlukan enkripsi sisi server terlepas dari pengaturan ini.
TrustServerCertificate Tergantung pada encrypt Lewati validasi sertifikat saat true. Defaultnya adalah false kapan encrypt ditentukan dan true kapan encrypt dihilangkan.
certificate - Jalur file PEM/DER untuk validasi rantai.
serverCertificate - Jalur file PEM/DER untuk perbandingan tingkat byte.
hostnameincertificate - Ganti nama host yang diharapkan dalam sertifikat.
tlsmin - Versi TLS minimum.