MS SQL Server'da SSL Bağlantı Şifrelemesini Yapılandırma


İstemcileri/uygulamaları Microsoft SQL Server veritabanınıza bağlamak için güvenilmeyen/ortak ağlar kullanıyorsanız, trafik şifreleme kullanmanız önerilir. Microsoft SQL Server'a istemci bağlantısı için zorunlu SSL/TLS trafik şifrelemesinin nasıl yapılandırılacağını ve etkinleştirileceğini görelim.

MS SQL 2016 ve daha yeni sürümlerde, SSL yerine TLS kullanılır.

Bir MS SQL Server bağlantısı için şifrelemeyi etkinleştirmek üzere sunucunuzda bir TLS/SSL sertifikasına ihtiyacınız vardır. Ticari bir sertifika, CA'nız tarafından verilen bir sertifika veya kendinden imzalı bir sertifika olabilir. Bir TLS sertifikası aşağıdaki gereksinimleri karşılamalıdır:

  • Gelişmiş Anahtar Kullanımı —

    Server Authentication 1.3.6.1.5.5.7.3.1

    ;

  • Geçerli son kullanma tarihi;

  • Sertifika kullanıcıda bulunmalıdır (

    certmgr.msc

    ) veya bilgisayar (

    certlm.msc

    ) sertifika deposu;

  • Sertifika, Konu Adında MSSQL'in üzerinde çalıştığı sunucu adına sahip olmalıdır;

  • İstemciler sertifikaya güvenmelidir.

PowerShell'i kullanarak kendinden imzalı bir sertifika oluşturabilirsiniz (kendinden imzalı sertifikaların yalnızca test ortamlarında kullanılması önerilir):

New-SelfSignedCertificate -DnsName srvdb01.a-d.site -CertStoreLocation cert:\LocalMachine\My

MSSQL örneğinize yalnızca ana bilgisayar adıyla değil, aynı zamanda başka adlarla da erişecekseniz (örneğin, sunucuda RDS Bağlantı Aracısı veritabanına sahip Always-On High Availability Group dinleyicisi bulunuyorsa), mevcut tüm adları sunucuya ekleyin. Konu Alternatif Adı. Üç yıl boyunca geçerli olan birden fazla SAN'a sahip kendinden imzalı bir sertifika vermek için:

$curdate = Get-Date
$add3year = $curdate.AddYears(3)
$newcert=New-SelfSignedCertificate -DnsName srvdb01, srvdb01.a-d.loc,SQLRDDBCL.a-d.site -CertStoreLocation cert:\LocalMachine\My -notafter $add3year

Sertifikayı güvenilir sertifikalar listesine alın:

$certFile = Export-Certificate -Cert $newcert -FilePath C:\certname.cer
Import-Certificate -CertStoreLocation Cert:\LocalMachine\AuthRoot -FilePath $certFile.FullName

CA'nızdan veya harici bir CA'dan bir sertifika kullanıyorsanız, bunu bilgisayar sertifika deposuna (veya MS SQL Sunucusu bir kullanıcı veya gMSA tarafından yönetilen bir hesap altında çalışıyorsa kullanıcı sertifikası deposuna) alın. SQL Server hizmeti, yerel yönetici ayrıcalıkları olmayan bir hesap altında çalışıyorsa, sertifika için okuma ayrıcalıkları verin.

Ardından, sertifikanızı yüklü SQL Server örneğine bağlayın:

  1. SQL Server Configuration Manager'ı çalıştırın, SQL Server Network Configuration'a gidin ve Protocols for MSSQLSERVER; özelliklerini açın.

  2. Zorla Şifreleme'yi etkinleştirin;

  3. Sertifika sekmesine gidin ve kullanıcı veya bilgisayar sertifikası deposuna aktardığınız sertifikayı açılır listeden seçin;

  4. Değişiklikleri uygulamak için MS SQL'i yeniden başlatın.

İstemciyi her zaman MSSQL sunucunuzla şifrelenmiş bir bağlantı kullanmaya zorlamak için:

  • İstemcide Sunucu Yapılandırma Yöneticisi'ni açın -> SQL Yerel İstemci Yapılandırması -> Özellikler -> Protokol Şifrelemeyi Zorla etkinleştirin.

  • İstemcinin MSSQL sunucusuna bağlanmak için SSL/TLS kullanmasını sağlayan aşağıdaki bağlantı dizesini de kullanabilirsiniz:

    Data Source=srvdb01.a-d.site;Integrated Security=False;User ID=test;Password=[Password];Encrypt=True

İstemciler, trafiği şifrelemek için kullanılan sertifikaya güvenmelidir. Aksi takdirde, bağlantıda aşağıdaki hata görünecektir:

Cannot connect to SRVDB01.
A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.) (Microsoft SQL Server, Error: -2146893019).

GPO kullanan etki alanı bilgisayarlarında güvenilen kök listesine bir sertifika ekleyebilirsiniz.

SQL Server Management Studio'nun (SSMS) bir SQL Server veritabanına bağlanmak için her zaman şifreleme kullanmasını sağlamak için bağlantı penceresini açın (Sunucuya Bağlan) -> Seçenekler -> Bağlantıyı Şifrele seçeneğini etkinleştirin.

Eğer "

The target principal name is incorrect

” hatası görüntüleniyorsa, Konu Adında belirtilen SQL Server adını veya sertifika SAN'ını kullandığınızdan emin olun.

SqlServer PowerShell modülünü kullanarak SQL Server'ınıza bağlanabilir ve SQL Server'ınızın bağlantı şifrelemeyi destekleyip desteklemediğinden emin olabilirsiniz:

Invoke-Sqlcmd -ServerInstance "srvdb01" -Query "SELECT DISTINCT encrypt_option FROM sys.dm_exec_connections WHERE session_id = @@SPID"

SQL Server örneğiniz varsayılan bağlantı noktasında çalışmıyorsa, t aşağıdaki gibi belirtilir:

-ServerInstance "srvdb01,23223"

Örneğimizde, SQL Server şifreli bağlantıları destekler (

encrypt_option=TRUE

).

Azure SQL veritabanları yalnızca şifrelenmiş bağlantıları destekler. SSMS'deki Bağlantıyı şifrele seçeneği işaretlenmemiş olsa bile Azure SQL bağlantısı şifrelenecektir (Azure SQL'de Veritabanı Güvenliği makalesine bakın).

İlgili makaleler