Linux üzerinde SQL Server bağlantılarını şifreleme

Şunlar için geçerlidir:Linux üzerinde SQL Server

Linux üzerinde SQL Server, bir istemci uygulaması ile SQL Server örneği arasında bir ağ üzerinden iletilen verileri şifrelemek için Aktarım Katmanı Güvenliği'ni (TLS) kullanabilir.

İşletim sistemi desteği

SQL Server hem Windows hem de Linux'ta aynı TLS protokollerini destekler: 1.3, 1.2, 1.1 ve 1.0.

SQL Server 2025'te (17.x) başlayarak:

  • TLS 1.3 varsayılan olarak etkindir
  • SUSE Linux Enterprise Server (SLES) desteklenmiyor

TLS'yi yapılandırma adımları, SQL Server'ın çalıştığı işletim sistemine özgüdür.

Note

TLS, Always On kullanılabilirlik grubu veritabanı yansıtma uç noktaları için desteklenmez.

Sertifika gereksinimleri

Sertifikalarınızın şu gereksinimleri karşıladığından emin olun:

  • Geçerli sistem saati sertifikanın Valid from özelliğinden sonra ve sertifikanın Valid to özelliğinden önce olmalıdır.

  • Sertifika, sunucu kimlik doğrulaması için tasarlanmalıdır. Bu, Enhanced Key Usagebelirtmek için sertifikanın Server Authentication (1.3.6.1.5.5.7.3.1) özelliğini gerektirir.

  • Sertifika, KeySpecAT_KEYEXCHANGE seçeneği kullanılarak oluşturulmalıdır. Genellikle, sertifikanın anahtar kullanım özelliği (KEY_USAGE) anahtar şifrelemesi (CERT_KEY_ENCIPHERMENT_KEY_USAGE) içerir.

  • Sertifikanın Subject özelliği, ortak adın (CN) sunucu bilgisayarın ana bilgisayar adı veya tam etki alanı adı (FQDN) ile aynı olduğunu belirtmelidir.

    Note

    Wildcard sertifikaları desteklenir.

OpenSSL kitaplıklarını kullanmak üzere yapılandırma (isteğe bağlı)

/opt/mssql/lib/ dizininde şifreleme için hangi libcrypto.so ve libssl.so kitaplıklarının kullanılması gerektiğine başvuran sembolik bağlantılar oluşturabilirsiniz. SQL Server'ı, sistem tarafından sağlanan varsayılandan farklı bir OpenSSL sürümünü kullanmaya zorlamak istiyorsanız bu yararlı olur. Bu sembolik bağlantılar yoksa, SQL Server sistemde varsayılan olarak yapılandırılmış OpenSSL kitaplıklarını yükler.

Bu sembolik bağlantılar libcrypto.so ve libssl.so olarak adlandırılmalı ve /opt/mssql/lib/ dizinine yerleştirilmelidir.

Note

Sertifika oluşturmak için Let's Encrypt kullanma örneği için, Azure'da verilerin gücünü Linux Azure VM'lerde SQL Server ve Azure AI arama ile açığa çıkarma hakkında bilgiler için blog gönderisine bakın .

Overview

TLS, bir istemci uygulamasından SQL Server'a bağlantıları şifrelemek için kullanılır. Doğru yapılandırıldığında TLS, istemci ile sunucu arasındaki iletişimler için hem gizlilik hem de veri bütünlüğü sağlar. TLS bağlantıları istemci veya sunucu tarafından başlatılabilir.

Note

TLS, Always On kullanılabilirlik grubu veritabanı yansıtma uç noktaları için desteklenmez.

Aşağıdaki bölümde istemci tarafından başlatılan şifrelemenin ayarlanması açıklanmaktadır.

Sertifika oluşturma

/CN SQL Server konağınızın tam etki alanı adıyla eşleşmelidir.

Caution

Bu örnekte otomatik olarak imzalanan bir sertifika kullanılır. Üretim senaryolarında otomatik olarak imzalanan sertifikalar kullanılmamalıdır. CA sertifikalarını kullanmanız gerekir.

Sertifikalarınızı ve özel anahtarlarınızı kaydettiğiniz klasörlerin kullanıcı veya grup tarafından mssql erişilebilir olduğundan ve izinlerin (700drwx------) olarak ayarlandığından emin olun. İzinleri 700 (drwx------) olarak ayarlanmış ve mssql kullanıcısına veya grubuna ait klasörleri manuel olarak oluşturabilirsiniz. Alternatif olarak, izinleri 755 (drwxr-xr-x) olarak ayarlayın ve klasörlerin grup tarafından erişilebilir mssql olduğundan emin olun. Örneğin, aşağıdaki örnekte gösterildiği gibi, sslcert yolu altında /var/opt/mssql/ adlı bir klasör oluşturabilir ve sertifikayı ve özel anahtarı dosya izinlerini 600 olarak ayarlayarak kaydedebilirsiniz.

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/

SQL Server'ı yapılandırma

SQL Server 2022 (16.x) ve önceki sürümler için:

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

SQL Server 2025 (17.x) için:

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

Sertifikayı istemci makinenize (Windows, Linux veya macOS) kaydetme

  • CA imzalı bir sertifika kullanıyorsanız, kullanıcı sertifikası yerine Sertifika Otoritesi (CA) sertifikasını istemci makineye kopyalayın.

  • Kendi imzalı sertifikayı kullanıyorsanız, dosyayı .pem dağıtımınız için klasöre kopyalayın ve etkinleştirmek için komutu çalıştırın:

    • Ubuntu: Sertifikayı , /usr/share/ca-certificates/adresine kopyalayın, uzantısını , .crtolarak yeniden adlandırın ve sistem CA sertifikası olarak etkinleştirmek için kullanın dpkg-reconfigure ca-certificates .

    • RHEL: Sertifikayı kopyalayıp /etc/pki/ca-trust/source/anchors/ sistem CA sertifikası olarak etkinleştirmek için kullanın update-ca-trust .

    • SUSE: Sertifikayı kopyalayın /usr/share/pki/trust/anchors/ ve sistem CA sertifikası olarak etkinleştirin update-ca-certificates .

    • Windows: Dosyayı .pemMevcut Kullanıcı>Güvenilir Kök Sertifikasyon Otoriteleri>Sertifikaları altında sertifika olarak içe aktarın.

    • macOS:

      • Sertifikayı /usr/local/etc/openssl/certs konumuna kopyalayın.

      • Karma değerini almak için aşağıdaki komutu çalıştırın:

        /usr/local/Cellar/openssl/1.0.2l/openssl x509 -hash -in mssql.pem -noout
        
      • Sertifikayı değer olarak yeniden adlandırın. Örneğin, kullanın mv mssql.pem dc2dd900.0. /usr/local/etc/openssl/certs öğesinin dc2dd900.0 içinde olduğundan emin olun.

Örnek bağlantı dizeleri

Caution

Parolanız varsayılan SQL Server password ilkesini izlemelidir. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.

  • SQL Server Management Studio

    SQL Server Management Studio bağlantı iletişim kutusunun ekran görüntüsü.

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

Yaygın bağlantı hataları

Hata iletisi Düzelt
The certificate chain was issued by an authority that is not trusted. bu hata, istemciler TLS el sıkışması sırasında SQL Server tarafından sunulan sertifikadaki imzayı doğrulayamadıklarında oluşur. İstemcinin doğrudan SQL Server sertifikasına veya SQL Server sertifikasını imzalayan CA'ya güvendiğinden emin olun.
The target principal name is incorrect. SQL Server'ın sertifikasındaki ortak isim alanının, istemcinin bağlantı dizesi'inde belirtilen sunucu adıyla eşleştiğinden emin olun.
An existing connection was forcibly closed by the remote host. İstemci SQL Server için gereken TLS protokolü sürümünü desteklemediğinde bu hata oluşabilir. Örneğin, SQL Server TLS 1.2 gerektirecek şekilde yapılandırılmışsa, istemcilerinizin TLS 1.2 protokollerini de desteklediğinden emin olun.

Ubuntu 20.04 ve diğer son Linux dağıtım sürümleri

Belirti

Linux örneğindeki bir SQL Server, 112 bitten az güvenlik (örnek: MD5, SHA-1) kullanılarak imza algoritmasıyla oluşturulmuş bir sertifikayı yüklediğinde, aşağıdaki örnekte olduğu gibi bir bağlantı hatasıyla karşılayabilirsiniz:

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)

Hatanın nedeni, Ubuntu 20.04 ve sonraki sürümlerde OpenSSL güvenlik düzeyi 2'nin varsayılan olarak etkinleştirilmesidir. Güvenlik düzeyi 2, 112 bitten az güvenlik düzeyine sahip TLS bağlantılarının kurulmasını engeller.

Çözüm

En az 112 bit güvenlik kullanarak imza algoritmasına sahip bir sertifika yükleyin. Bu gereksinimi karşılayan imza algoritmaları SHA-224, SHA-256, SHA-384 ve SHA-512'yi içerir.