Mengenkripsi koneksi ke SQL Server di Linux

Berlaku untuk:SQL Server - 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 di 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 Valid from properti sertifikat dan sebelum Valid to properti sertifikat.

  • Sertifikat harus dimaksudkan untuk autentikasi server. Ini mengharuskan Enhanced Key Usage properti sertifikat untuk menentukan Server Authentication (1.3.6.1.5.5.7.3.1).

  • Sertifikat harus dibuat dengan menggunakan KeySpec opsi .AT_KEYEXCHANGE Biasanya, properti penggunaan kunci sertifikat (KEY_USAGE) juga menyertakan encipherment 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.

    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 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.

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.

Bagian berikut menjelaskan pengaturan enkripsi yang dimulai klien.

Hasilkan sertifikat

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

Perhatian

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

Pastikan bahwa folder tempat Anda menyimpan sertifikat dan kunci privat, dapat diakses oleh mssql pengguna/grup, dan memiliki izin yang diatur ke 700 (drwx-----). Anda dapat membuat folder secara manual dengan izin yang diatur ke 700 (drwx------) dan dimiliki oleh mssql pengguna/grup, atau mengatur izin ke 755 (drwxr-xr-x), yang dimiliki oleh pengguna lain tetapi masih dapat diakses mssql oleh grup pengguna. Misalnya, Anda dapat membuat folder yang disebut sslcert di bawah jalur /var/opt/mssql/, dan menyimpan sertifikat dan kunci privat dengan izin pada file yang diatur ke 600, seperti yang ditunjukkan dalam sampel 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
#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
#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

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

  • Jika Anda menggunakan sertifikat yang ditandatangani CA, Anda harus menyalin sertifikat Otoritas Sertifikat (CA) alih-alih sertifikat pengguna ke komputer klien.
  • Jika Anda menggunakan sertifikat yang ditandatangani sendiri, salin .pem file 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 gunakan dpkg-reconfigure ca-certificates untuk mengaktifkannya sebagai sertifikat OS sistem.
  • RHEL: Salin sertifikat ke /etc/pki/ca-trust/source/anchors/ dan gunakan update-ca-trust untuk mengaktifkannya sebagai sertifikat OS sistem.
  • SUSE: Salin sertifikat ke /usr/share/pki/trust/anchors/ dan gunakan update-ca-certificates untuk mengaktifkannya sebagai sertifikat OS sistem.
  • Windows: Impor .pem file sebagai sertifikat di bawah Sertifikat Otoritas > Sertifikasi Akar Tepercaya 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 . Sebagai contoh: mv mssql.pem dc2dd900.0. Pastikan dc2dd900.0 berada di /usr/local/etc/openssl/certs

Contoh string koneksi

  • SQL Server Management Studio

    Screenshot of SQL Server Management Studio connection dialog.

  • 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;"

Kesalahan koneksi umum

Pesan kesalahan Perbaikan
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 bidang Nama Umum pada sertifikat SQL Server cocok 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:

Sambungan berhasil dibuat dengan server, tetapi kemudian terjadi kesalahan selama proses masuk. (penyedia: Penyedia SSL, kesalahan: 0 - Koneksi yang ada ditutup secara paksa oleh host jarak jauh.) (Microsoft SQL Server, Kesalahan: 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.