Aracılığıyla paylaş


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. SQL Server hem Windows hem de Linux'ta aynı TLS protokollerini destekler: 1.2, 1.1 ve 1.0.

Not

SQL Server 2025'te (17.x) başlayarak TLS 1.3 varsayılan olarak etkindir.

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

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.

    Not

    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.

Not

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 .

Genel bakış

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.

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.

Dikkat

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 mssql kullanıcı/grup tarafından erişilebilir olduğundan ve izninin 700 (drwx-----) olarak ayarlandığından emin olun. 700 (drwx------) olarak ayarlanmış ve mssql kullanıcı/gruba ait izinlerle el ile klasörler oluşturabilir veya izni, diğer kullanıcıya ait olan ancak 755 kullanıcı grubu tarafından erişilebilen drwxr-xr-x (mssql) olarak ayarlayabilirsiniz. Örneğin, sslcertyolunun altında /var/opt/mssql/ adlı bir klasör oluşturabilir ve aşağıdaki örnekte gösterildiği gibi 600olarak ayarlanmış dosyalarda izinleri olan sertifikayı ve özel anahtarı 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
#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/

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ı sertifika kullanıyorsanız, kullanıcı sertifikası yerine Sertifika Yetkilisi (CA) sertifikasını istemci makinesine kopyalamanız gerekir.

  • Otomatik olarak imzalanan sertifikayı kullanıyorsanız, .pem dosyasını dağıtımla ilgili olarak aşağıdaki klasörlere kopyalayın ve bunları etkinleştirmek için komutları yürütin:

  • Ubuntu : Sertifikayı /usr/share/ca-certificates/kopyalayın, uzantısını .crtolarak yeniden adlandırın ve dpkg-reconfigure ca-certificates kullanarak sistem CA sertifikası olarak etkinleştirin.

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

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

  • Windows: .pem dosyasını Geçerli Kullanıcı > Güvenilen Kök Sertifika Yetkilileri > Sertifikalaraltında sertifika olarak içeri aktarın.

  • macOS :

    • Sertifikayı /usr/local/etc/openssl/certs'a kopyala

    • 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: mv mssql.pem dc2dd900.0. Emin olun ki dc2dd900.0/usr/local/etc/openssl/certs'de.

Örnek bağlantı dizeleri

Dikkat

Parolanız, SQL Server varsayılanparola ilkesine uygun olmalıdır. 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 mesajı Düzeltmek
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 Ad alanının istemcinin bağlantı dizesinde 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:

Sunucuyla başarıyla bağlantı kuruldu, ancak oturum açma işlemi sırasında bir hata oluştu. (sağlayıcı: SSL Sağlayıcısı, hata: 0 - Var olan bir bağlantı uzak konak tarafından zorla kapatıldı.) (Microsoft SQL Server, Hata: 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.