Mengenkripsi Koneksi ke SQL Server di Linux
Berlaku untuk:
SQL Server (semua versi yang didukung) - Linux
SQL Server di Linux dapat menggunakan Keamanan Lapisan Transportasi (TLS) untuk mengenkripsi data yang dikirimkan di seluruh jaringan antara aplikasi klien dan instans SQL Server. SQL Server mendukung protokol TLS yang sama pada Windows dan Linux: TLS 1.2, 1.1, dan 1.0. Namun, langkah-langkah untuk mengonfigurasi TLS khusus untuk sistem operasi tempat SQL Server berjalan.
Persyaratan untuk Sertifikat
Sebelum memulai, Anda perlu memastikan sertifikat Anda mengikuti persyaratan berikut:
- Waktu sistem saat ini harus setelah properti Valid dari sertifikat dan sebelum properti Valid ke sertifikat.
- Sertifikat harus dimaksudkan untuk autentikasi server. Ini memerlukan properti Penggunaan Kunci yang Ditingkatkan dari sertifikat untuk menentukan Autentikasi Server (1.3.6.1.5.5.7.3.1).
- Sertifikat harus dibuat dengan menggunakan opsi KeySpec dari AT_KEYEXCHANGE. Biasanya, properti penggunaan kunci sertifikat (KEY_USAGE) juga menyertakan penyandian kunci (CERT_KEY_ENCIPHERMENT_KEY_USAGE).
- Properti Subjek sertifikat harus menunjukkan bahwa nama umum (CN) sama dengan nama host atau nama domain yang sepenuhnya memenuhi syarat (FQDN) komputer server. Catatan: Sertifikat Wild Card didukung.
Mengonfigurasi Pustaka OpenSSL untuk Digunakan (Opsional)
Anda dapat membuat tautan simbolis di /opt/mssql/lib/ direktori yang mereferensikan pustaka dan libssl.so mana yang libcrypto.so harus digunakan untuk enkripsi. Ini berguna jika Anda ingin memaksa SQL Server menggunakan versi OpenSSL tertentu selain default yang disediakan oleh sistem. Jika tautan simbolis ini tidak ada, SQL Server akan memuat pustaka OpenSSL yang dikonfigurasi secara default pada sistem.
Tautan simbolis ini harus diberi nama libcrypto.so dan libssl.so dan ditempatkan di /opt/mssql/lib/ direktori.
Gambaran Umum
TLS digunakan untuk mengenkripsi koneksi dari aplikasi klien ke SQL Server. Ketika dikonfigurasi dengan benar, TLS menyediakan privasi dan integritas data untuk komunikasi antara klien dan server. Koneksi TLS dapat diinisiasi klien atau server dimulai.
Enkripsi yang Dimulai Klien
- Buat sertifikat (/CN harus cocok dengan nama domain host SQL Server Anda yang sepenuhnya memenuhi syarat)
Catatan
Untuk contoh ini, kami menggunakan Sertifikat Self-Signed, ini tidak boleh digunakan untuk skenario produksi. Anda harus menggunakan sertifikat CA.
Pastikan bahwa folder yang Anda simpan sertifikat dan Kunci privat dapat diakses oleh pengguna/grup mssql dan memiliki izin yang diatur ke 700 (drwx-----). Anda dapat membuat folder secara manual dengan izin yang diatur ke 700 (drwx------) dan dimiliki oleh pengguna/grup mssql atau mengatur izin ke 755(drwxr-xr-x) dan dimiliki oleh pengguna lain tetapi masih dapat diakses oleh grup pengguna mssql. Misalnya, Anda dapat membuat folder yang disebut 'sslcert' di bawah jalur '/var/opt/mssql/' lalu menyimpan sertifikat dan kunci privat dengan izin pada file yang diatur ke 600 seperti yang ditunjukkan di bawah ini.
openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=mssql.contoso.com' -keyout mssql.key -out mssql.pem -days 365
sudo chown mssql:mssql mssql.pem mssql.key
sudo chmod 600 mssql.pem mssql.key
# in this case we are saving the certificate to the certs folder under /etc/ssl/ which has the following permission 755(drwxr-xr-x)
sudo mv mssql.pem /etc/ssl/certs/ drwxr-xr-x
# in this case we are saving the private key to the private folder under /etc/ssl/ with permissions set to 755(drwxr-xr-x)
sudo mv mssql.key /etc/ssl/private/
- Mengonfigurasi SQL Server
systemctl stop mssql-server
sudo cat /var/opt/mssql/mssql.conf
sudo /opt/mssql/bin/mssql-conf set network.tlscert /etc/ssl/certs/mssql.pem
sudo /opt/mssql/bin/mssql-conf set network.tlskey /etc/ssl/private/mssql.key
sudo /opt/mssql/bin/mssql-conf set network.tlsprotocols 1.2
sudo /opt/mssql/bin/mssql-conf set network.forceencryption 0
systemctl restart mssql-server
Daftarkan sertifikat di komputer klien Anda (Windows, Linux, atau macOS)
- Jika Anda menggunakan sertifikat bertanda tangan CA, Anda harus menyalin sertifikat Otoritas Sertifikat (CA) alih-alih sertifikat pengguna ke komputer klien.
- Jika Anda menggunakan sertifikat yang ditandatangani sendiri, cukup salin file .pem ke folder berikut masing-masing untuk mendistribusikan dan menjalankan perintah untuk mengaktifkannya
- Ubuntu: Salin sertifikat ke
/usr/share/ca-certificates/, ganti nama ekstensinya menjadi .crt, dan gunakandpkg-reconfigure ca-certificatesuntuk mengaktifkannya sebagai sertifikat OS sistem. - RHEL: Salin sertifikasi ke
/etc/pki/ca-trust/source/anchors/dan gunakanupdate-ca-trustuntuk mengaktifkannya sebagai sertifikat OS sistem. - SUSE: Salin sertifikat ke
/usr/share/pki/trust/anchors/dan gunakanupdate-ca-certificatesuntuk mengaktifkannya sebagai sertifikat OS sistem. - Windows: Mengimpor file .pem sebagai sertifikat di bawah pengguna saat ini -> otoritas sertifikasi akar tepercaya -> sertifikat
- macOS:
- Salin sertifikat ke
/usr/local/etc/openssl/certs - Jalankan perintah berikut untuk mendapatkan nilai hash:
/usr/local/Cellar/openssl/1.0.2l/openssl x509 -hash -in mssql.pem -noout - Ganti nama sertifikasi menjadi nilai. Contoh:
mv mssql.pem dc2dd900.0. Pastikan dc2dd900.0 berada di/usr/local/etc/openssl/certs
- Salin sertifikat ke
- Ubuntu: Salin sertifikat ke
Contoh string koneksi
SQL Server Management Studio

SQLCMD
sqlcmd -S <sqlhostname> -N -U sa -P '<YourPassword>'ADO.NET
"Encrypt=True; TrustServerCertificate=False;"ODBC
"Encrypt=Yes; TrustServerCertificate=no;"JDBC
"encrypt=true; trustServerCertificate=false;"
Enkripsi yang Dimulai Server
- Buat sertifikat (/CN harus cocok dengan nama domain host SQL Server Anda yang sepenuhnya memenuhi syarat)
openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=mssql.contoso.com' -keyout mssql.key -out mssql.pem -days 365
sudo chown mssql:mssql mssql.pem mssql.key
sudo chmod 600 mssql.pem mssql.key
sudo mv mssql.pem /etc/ssl/certs/
sudo mv mssql.key /etc/ssl/private/
- Mengonfigurasi SQL Server
systemctl stop mssql-server
sudo cat /var/opt/mssql/mssql.conf
sudo /opt/mssql/bin/mssql-conf set network.tlscert /etc/ssl/certs/mssql.pem
sudo /opt/mssql/bin/mssql-conf set network.tlskey /etc/ssl/private/mssql.key
sudo /opt/mssql/bin/mssql-conf set network.tlsprotocols 1.2
sudo /opt/mssql/bin/mssql-conf set network.forceencryption 1
systemctl restart mssql-server
Contoh string koneksi
SQLCMD
sqlcmd -S <sqlhostname> -U sa -P '<YourPassword>'ADO.NET
"Encrypt=False; TrustServerCertificate=False;"ODBC
"Encrypt=no; TrustServerCertificate=no;"JDBC
"encrypt=false; trustServerCertificate=false;"
Catatan
Atur TrustServerCertificate ke True jika klien tidak dapat tersambung ke CA untuk memvalidasi keaslian sertifikasi
Kesalahan koneksi umum
| Pesan kesalahan | Perbaikan |
|---|---|
| Rantai sertifikat dikeluarkan oleh otoritas yang tidak dipercaya. | Kesalahan ini terjadi ketika klien tidak dapat memverifikasi tanda tangan pada sertifikat yang disajikan oleh SQL Server selama jabat tangan TLS. Pastikan klien mempercayai sertifikat SQL Server secara langsung, atau CA yang menandatangani sertifikat SQL Server. |
| Nama utama target salah. | Pastikan bahwa bidang Nama Umum pada sertifikat SQL Server cocok dengan nama server yang ditentukan dalam string koneksi klien. |
| Koneksi yang ada ditutup secara paksa oleh host jarak jauh. | Kesalahan ini dapat terjadi ketika klien tidak mendukung versi protokol TLS yang diperlukan oleh SQL Server. Misalnya, jika SQL Server dikonfigurasi untuk memerlukan TLS 1.2, pastikan klien Anda juga mendukung protokol TLS 1.2. |
Ubuntu 20.04 dan rilis distribusi Linux terbaru lainnya
Gejala
Ketika SQL Server pada instans Linux memuat sertifikat yang dibuat dengan algoritma tanda tangan menggunakan kurang dari 112 bit keamanan (contoh: MD5, SHA-1), Anda mungkin mengamati kesalahan kegagalan koneksi, seperti contoh ini:
A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - An existing connection was forcibly closed by the remote host.) (Microsoft SQL Server, Error: 10054)
Kesalahan ini disebabkan oleh keamanan OpenSSL tingkat 2 yang diaktifkan secara default pada Ubuntu 20.04 dan yang lebih baru. Tingkat keamanan 2 melarang koneksi TLS yang memiliki keamanan kurang dari 112 bit untuk dibuat.
Solusi
Instal sertifikat dengan algoritma tanda tangan menggunakan setidaknya 112 bit keamanan. Algoritma tanda tangan yang memenuhi persyaratan ini termasuk SHA-224, SHA-256, SHA-384, dan SHA-512.