Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
Pastikan sertifikat Anda mengikuti persyaratan berikut:
Waktu sistem saat ini harus setelah atribut
Valid from
dari sertifikat dan sebelum atributValid to
dari sertifikat.Sertifikat harus dimaksudkan untuk autentikasi server. Ini mengharuskan properti
Enhanced Key Usage
dari sertifikat menentukanServer Authentication (1.3.6.1.5.5.7.3.1)
.Sertifikat harus dibuat dengan menggunakan opsi
KeySpec
dariAT_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.Catatan
Sertifikat kartu liar didukung.
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.
Catatan
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.
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 oleh klien atau server.
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 gunakandpkg-reconfigure ca-certificates
untuk mengaktifkannya sebagai sertifikat OS sistem.RHEL: Salin sertifikat ke
/etc/pki/ca-trust/source/anchors/
dan gunakanupdate-ca-trust
untuk mengaktifkannya sebagai sertifikat OS sistem.SUSE: Salin sertifikat ke
/usr/share/pki/trust/anchors/
dan gunakanupdate-ca-certificates
untuk mengaktifkannya sebagai sertifikat OS sistem.Windows: Impor
.pem
file 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 sertifikat menjadi nilai . Misalnya:
mv mssql.pem dc2dd900.0
. Pastikandc2dd900.0
berada di/usr/local/etc/openssl/certs
Contoh string koneksi
Perhatian
Kata sandi Anda harus mengikuti kebijakan kata sandi 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
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 | 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.