Mengenkripsi koneksi ke SQL Server di Linux

Berlaku untuk:SQL Server di 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.

Dukungan sistem operasi

SQL Server mendukung protokol TLS yang sama pada Windows dan Linux: 1.3, 1.2, 1.1, dan 1.0.

Di Mulai di SQL Server 2025 (17.x):

  • TLS 1.3 diaktifkan secara default
  • SUSE Linux Enterprise Server (SLES) tidak didukung

Langkah-langkah untuk mengonfigurasi TLS khusus untuk sistem operasi tempat SQL Server berjalan.

Note

TLS tidak didukung untuk titik akhir pencerminan basis data pada grup ketersediaan Always On.

Persyaratan untuk sertifikat

Pastikan sertifikat Anda mengikuti persyaratan berikut:

  • Waktu sistem saat ini harus setelah atribut Valid from dari sertifikat dan sebelum atribut Valid to dari sertifikat.

  • Sertifikat harus dimaksudkan untuk autentikasi server. Ini mengharuskan properti Enhanced Key Usage dari sertifikat menentukan Server Authentication (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 enkode kunci (CERT_KEY_ENCIPHERMENT_KEY_USAGE).

  • Properti Subject sertifikat harus menunjukkan bahwa nama umum (CN) sama dengan nama host atau nama domain yang sepenuhnya memenuhi syarat (FQDN) komputer server.

    Note

    Sertifikat wildcard tersedia.

Mengonfigurasi pustaka OpenSSL untuk digunakan (opsional)

Anda dapat membuat tautan simbolis di direktori /opt/mssql/lib/ yang mereferensikan pustaka libcrypto.so dan libssl.so mana yang harus digunakan untuk enkripsi. Ini berguna jika Anda ingin memaksa SQL Server untuk menggunakan versi OpenSSL tertentu selain default yang disediakan oleh sistem. Jika tautan simbolis ini tidak ada, SQL Server memuat pustaka OpenSSL default yang dikonfigurasi pada sistem.

Tautan simbolis ini harus diberi nama libcrypto.so dan libssl.so dan ditempatkan di /opt/mssql/lib/ direktori.

Note

Untuk contoh penggunaan Let's Encrypt untuk membuat sertifikat, lihat posting blog Buka kunci kekuatan data di Azure dengan SQL Server pada VM Azure Linux dan pencarian AI Azure.

Overview

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 oleh klien atau server.

Note

TLS tidak didukung untuk titik akhir pencerminan basis data pada grup ketersediaan Always On.

Bagian berikut menjelaskan pengaturan enkripsi yang dimulai klien.

Hasilkan sertifikat

/CN harus cocok dengan nama domain host SQL Server Anda yang sepenuhnya memenuhi syarat.

Caution

Contoh ini menggunakan sertifikat yang ditandatangani sendiri. Sertifikat yang ditandatangani sendiri tidak boleh digunakan untuk skenario produksi. Anda harus menggunakan sertifikat CA.

Pastikan folder tempat Anda menyimpan sertifikat dan kunci privat dapat diakses oleh mssql pengguna atau grup dan memiliki izin yang diatur ke 700 (drwx------). Anda dapat membuat folder secara manual dengan izin yang ditetapkan ke 700 (drwx------) dan dimiliki oleh pengguna atau grup mssql. Sebagai alternatif, atur izin ke (755drwxr-xr-x) dan pastikan folder dapat diakses oleh mssql grup. Sebagai contoh, Anda dapat membuat folder yang disebut sslcert di bawah path /var/opt/mssql/ dan menyimpan sertifikat serta kunci privat dengan izin pada file yang diatur ke 600, seperti yang ditunjukkan pada contoh berikut.

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
# Save the certificate to the certs folder under /etc/ssl/
sudo mv mssql.pem /etc/ssl/certs/
# Save the private key to the private folder under /etc/ssl/
sudo mv mssql.key /etc/ssl/private/

Konfigurasi SQL Server

Untuk SQL Server 2022 (16.x) dan versi yang lebih lama:

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

Untuk SQL Server 2025 (17.x):

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.forceencryption 0
systemctl restart mssql-server

Mendaftarkan sertifikat di komputer klien Anda (Windows, Linux, atau macOS)

  • Jika Anda menggunakan sertifikat yang ditandatangani CA, salin sertifikat Otoritas Sertifikat (CA) alih-alih sertifikat pengguna ke mesin klien.

  • Jika Anda menggunakan sertifikat self-signed, salin .pem file ke folder distribusi Anda dan jalankan perintah untuk mengaktifkannya:

    • Ubuntu: Salin sertifikat ke /usr/share/ca-certificates/, ganti nama ekstensinya menjadi .crt, dan gunakan dpkg-reconfigure ca-certificates untuk mengaktifkannya sebagai sertifikat CA sistem.

    • RHEL: Salin sertifikat ke /etc/pki/ca-trust/source/anchors/ dan gunakan update-ca-trust untuk mengaktifkannya sebagai sertifikat CA sistem.

    • SUSE: Salin sertifikat ke /usr/share/pki/trust/anchors/ dan gunakan update-ca-certificates untuk mengaktifkannya sebagai sertifikat CA sistem.

    • Windows: Impor file .pem sebagai sertifikat di bawah Pengguna Saat Ini>>.

    • 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 sertifikat menjadi nilai . Misalnya, gunakan mv mssql.pem dc2dd900.0. Pastikan dc2dd900.0 sudah masuk /usr/local/etc/openssl/certs.

Contoh string penghubung

Caution

Kata sandi Anda harus mengikuti kebijakan password default SQL Server. Secara default, kata sandi harus panjangnya minimal delapan karakter dan berisi karakter dari tiga dari empat set berikut: huruf besar, huruf kecil, digit dasar-10, dan simbol. Panjang kata sandi bisa hingga 128 karakter. Gunakan kata sandi yang panjang dan kompleks mungkin.

  • SQL Server Management Studio

    Cuplikan layar dialog koneksi SQL Server Management Studio.

  • sqlcmd

    sqlcmd -S <sqlhostname> -N -U sa -P '<password>'

  • ADO.NET

    "Encrypt=True; TrustServerCertificate=False;"

  • ODBC

    "Encrypt=Yes; TrustServerCertificate=no;"

  • JDBC

    "encrypt=true; trustServerCertificate=false;"

Kesalahan koneksi umum

Pesan kesalahan Perbaiki
The certificate chain was issued by an authority that is not trusted. 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.
The target principal name is incorrect. Pastikan kolom common name pada sertifikat SQL Server sesuai dengan nama server yang ditentukan dalam string koneksi klien.
An existing connection was forcibly closed by the remote host. 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 tingkat keamanan OpenSSL 2 yang diaktifkan secara default pada Ubuntu 20.04 dan versi yang lebih baru. Tingkat keamanan 2 melarang koneksi TLS yang memiliki kurang dari 112 bit keamanan 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.