Şifreleme desteğini anlama

JDBC sürücüsünü indirin

SQL Server'a bağlanırken, uygulama şifreleme isterse ve SQL Server örneği TLS şifrelemesini destekleyecek şekilde yapılandırılmışsa, SQL Server için Microsoft JDBC Sürücüsü TLS el sıkışmasını başlatır. El sıkışma, sunucu ve istemcinin verileri korumak için kullanılacak şifreleme ve şifreleme algoritmaları konusunda anlaşma yapmasına olanak tanır. TLS el sıkışması tamamlandıktan sonra istemci ve sunucu şifrelenmiş verileri güvenli bir şekilde gönderebilir. TLS el sıkışması sırasında sunucu ortak anahtar sertifikasını istemciye gönderir. Ortak anahtar sertifikası veren, Sertifika Yetkilisi (CA) olarak bilinir. İstemci, sertifika yetkilisinin istemcinin güvendiği bir sertifika yetkilisi olduğunu doğrulamakla sorumludur.

Uygulama şifreleme istemezse, SQL Server için Microsoft JDBC Sürücüsü SQL Server'ı TLS şifrelemesini desteklemeye zorlamaz. SQL Server örneği TLS şifrelemesini zorlamak için yapılandırılmamışsa, şifreleme olmadan bir bağlantı kurulur. SQL Server örneği TLS şifrelemesini zorlayacak şekilde yapılandırılmışsa, sürücü düzgün yapılandırılmış Java Sanal Makinesinde (JVM) çalışırken TLS şifrelemesini otomatik olarak etkinleştirir veya aksi takdirde bağlantı sonlandırılır ve sürücü bir hataya neden olur.

Uyarı

BIR TLS bağlantısının başarılı olması için serverName'e geçirilen değerin sunucu sertifikasındaki Konu Diğer Adı'ndaki (SAN) Ortak Ad (CN) veya DNS adıyla tam olarak eşleştiğinden emin olun.

SQL Server için TLS'yi yapılandırma hakkında daha fazla bilgi için bkz. Veritabanı Altyapısına şifreli bağlantıları etkinleştirme.

Açıklamalar

Uygulamaların TLS şifrelemesini kullanmasına izin vermek için, SQL Server için Microsoft JDBC Sürücüsü sürüm 1.2 sürümünden itibaren şu bağlantı özelliklerini kullanıma sunms: encrypt, trustServerCertificate, trustStore, trustStorePassword ve hostNameInCertificate. Sürücünün TLS şifrelemesi ile TDS 8.0 kullanmasına izin vermek için , serverCertificate bağlantı özelliği sürüm 11.2 sürümünden itibaren kullanıma sunulmuştur. Daha fazla bilgi için bkz. Bağlantı özelliklerini ayarlama.

Aşağıdaki tabloda, SQL Server sürümü için Microsoft JDBC Sürücüsünün olası TLS bağlantı senaryolarında nasıl davrandığını özetlemektedir. Her senaryoda farklı bir TLS bağlantı özellikleri kümesi kullanılır. Tablo şunları içerir:

  • blank: "Özellik bağlantı dizesinde yok"
  • value: "Özellik bağlantı dizesinde var ve değeri geçerli"
  • any: "Özelliğin bağlantı dizesinde mevcut olması veya değerinin geçerli olması önemli değil"

Uyarı

Aynı davranış SQL Server kullanıcı kimlik doğrulaması ve Windows tümleşik kimlik doğrulaması için de geçerlidir.

Özellik ayarları Davranış
encrypt = false veya boş
trustServerCertificate = herhangi biri
hostNameInCertificate = herhangi bir
trustStore = herhangi bir
trustStorePassword = herhangi biri
Sürücü sunucuyu TLS şifrelemesini desteklemeye zorlamaz. Sunucuda otomatik olarak imzalanan bir sertifika varsa, sürücü TLS sertifika değişimini başlatır. TLS sertifikası doğrulanmaz ve yalnızca kimlik bilgileri (oturum açma paketindeki) şifrelenir.

Sunucu, istemcinin TLS şifrelemesini desteklemesini gerektiriyorsa, sürücü TLS sertifika değişimini başlatır. TLS sertifikası doğrulanmaz, ancak tüm iletişim şifrelenir.
encrypt = doğru
trustServerCertificate = true
hostNameInCertificate = herhangi bir
trustStore = herhangi bir
trustStorePassword = herhangi biri
Sürücü, sunucuyla TLS şifrelemesi kullanmayı istemektedir.

Sunucu, istemcinin TLS şifrelemesini desteklemesini gerektiriyorsa veya sunucu şifrelemeyi destekliyorsa, sürücü TLS sertifika değişimini başlatır. trustServerCertificate özelliği "true" olarak ayarlanırsa, sürücü TLS sertifikasını doğrulamaz.

Sunucu şifrelemeyi destekleyecek şekilde yapılandırılmamışsa, sürücü bir hata oluşturur ve bağlantıyı sonlandırır.
encrypt = doğru
trustServerCertificate = false veya boş
hostNameInCertificate = boş
trustStore = boş
trustStorePassword = boş
Sürücü, sunucuyla TLS şifrelemesi kullanmayı istemektedir.

Sunucu, istemcinin TLS şifrelemesini desteklemesini gerektiriyorsa veya sunucu şifrelemeyi destekliyorsa, sürücü TLS sertifika değişimini başlatır.

Sürücü, sunucu TLS sertifikasını doğrulamak için bağlantı URL'sinde belirtilen serverName özelliğini kullanır ve hangi sertifika deposunun kullanılacağını belirlemek için güven yöneticisi fabrikasının arama kurallarına güvenir.

Sunucu şifrelemeyi destekleyecek şekilde yapılandırılmamışsa, sürücü bir hata oluşturur ve bağlantıyı sonlandırır.
encrypt = doğru
trustServerCertificate = false veya boş
hostNameInCertificate = değer
trustStore = boş
trustStorePassword = boş
Sürücü, sunucuyla TLS şifrelemesi kullanmayı istemektedir.

Sunucu, istemcinin TLS şifrelemesini desteklemesini gerektiriyorsa veya sunucu şifrelemeyi destekliyorsa, sürücü TLS sertifika değişimini başlatır.

Sürücü, hostNameInCertificate özelliği için belirtilen değeri kullanarak TLS sertifikasının konu değerini doğrular.

Sunucu şifrelemeyi destekleyecek şekilde yapılandırılmamışsa, sürücü bir hata oluşturur ve bağlantıyı sonlandırır.
encrypt = doğru
trustServerCertificate = false veya boş
hostNameInCertificate = boş
trustStore = değer
trustStorePassword = değer
Sürücü, sunucuyla TLS şifrelemesi kullanmayı istemektedir.

Sunucu, istemcinin TLS şifrelemesini desteklemesini gerektiriyorsa veya sunucu şifrelemeyi destekliyorsa, sürücü TLS sertifika değişimini başlatır.

Sürücü, sertifika trustStore dosyasını bulmak için trustStore özellik değerini ve trustStore dosyasının bütünlüğünü denetlemek için trustStorePassword özellik değerini kullanır.

Sunucu şifrelemeyi destekleyecek şekilde yapılandırılmamışsa, sürücü bir hata oluşturur ve bağlantıyı sonlandırır.
encrypt = doğru
trustServerCertificate = false veya boş
hostNameInCertificate = boş
trustStore = boş
trustStorePassword = değer
Sürücü, sunucuyla TLS şifrelemesi kullanmayı istemektedir.

Sunucu, istemcinin TLS şifrelemesini desteklemesini gerektiriyorsa veya sunucu şifrelemeyi destekliyorsa, sürücü TLS sertifika değişimini başlatır.

Sürücü, varsayılan trustStore dosyasının bütünlüğünü denetlemek için trustStorePassword özellik değerini kullanır.

Sunucu şifrelemeyi destekleyecek şekilde yapılandırılmamışsa, sürücü bir hata oluşturur ve bağlantıyı sonlandırır.
encrypt = doğru
trustServerCertificate = false veya boş
hostNameInCertificate = boş
trustStore = değer
trustStorePassword = boş
Sürücü, sunucuyla TLS şifrelemesi kullanmayı istemektedir.

Sunucu, istemcinin TLS şifrelemesini desteklemesini gerektiriyorsa veya sunucu şifrelemeyi destekliyorsa, sürücü TLS sertifika değişimini başlatır.

Sürücü , trustStore dosyasının konumunu aramak için trustStore özellik değerini kullanır.

Sunucu şifrelemeyi destekleyecek şekilde yapılandırılmamışsa, sürücü bir hata oluşturur ve bağlantıyı sonlandırır.
encrypt = doğru
trustServerCertificate = false veya boş
hostNameInCertificate = değer
trustStore = boş
trustStorePassword = değer
Sürücü, sunucuyla TLS şifrelemesi kullanmayı istemektedir.

Sunucu, istemcinin TLS şifrelemesini desteklemesini gerektiriyorsa veya sunucu şifrelemeyi destekliyorsa, sürücü TLS sertifika değişimini başlatır.

Sürücü, varsayılan trustStore dosyasının bütünlüğünü denetlemek için trustStorePassword özellik değerini kullanır. Ayrıca, sürücü TLS sertifikasını doğrulamak için hostNameInCertificate özellik değerini kullanır.

Sunucu şifrelemeyi destekleyecek şekilde yapılandırılmamışsa, sürücü bir hata oluşturur ve bağlantıyı sonlandırır.
encrypt = doğru
trustServerCertificate = false veya boş
hostNameInCertificate = değer
trustStore = değer
trustStorePassword = boş
Sürücü, sunucuyla TLS şifrelemesi kullanmayı istemektedir.

Sunucu, istemcinin TLS şifrelemesini desteklemesini gerektiriyorsa veya sunucu şifrelemeyi destekliyorsa, sürücü TLS sertifika değişimini başlatır.

Sürücü , trustStore dosyasının konumunu aramak için trustStore özellik değerini kullanır. Ayrıca, sürücü TLS sertifikasını doğrulamak için hostNameInCertificate özellik değerini kullanır.

Sunucu şifrelemeyi destekleyecek şekilde yapılandırılmamışsa, sürücü bir hata oluşturur ve bağlantıyı sonlandırır.
encrypt = doğru
trustServerCertificate = false veya boş
hostNameInCertificate = değer
trustStore = değer
trustStorePassword = değer
Sürücü, sunucuyla TLS şifrelemesi kullanmayı istemektedir.

Sunucu, istemcinin TLS şifrelemesini desteklemesini gerektiriyorsa veya sunucu şifrelemeyi destekliyorsa, sürücü TLS sertifika değişimini başlatır.

Sürücü, sertifika trustStore dosyasını bulmak için trustStore özellik değerini ve trustStore dosyasının bütünlüğünü denetlemek için trustStorePassword özellik değerini kullanır. Ayrıca, sürücü TLS sertifikasını doğrulamak için hostNameInCertificate özellik değerini kullanır.

Sunucu şifrelemeyi destekleyecek şekilde yapılandırılmamışsa, sürücü bir hata oluşturur ve bağlantıyı sonlandırır.
encrypt = katı
hostNameInCertificate = değer
trustStore = boş
trustStorePassword = boş
serverCertificate = değer
Sürücü, sunucuyla TDS 8.0 strict TLS şifrelemesini kullanmayı istemektedir.

Sürücü, ilk eylem olarak sunucuyla TLS el sıkışmasını ve sertifika değişimini başlatır.

trustServerCertificate ayarı, strict modunda yok sayılır ve false olarak değerlendirilir.

Sürücü, sunucu TLS sertifikasını doğrulamak için isteğe bağlı hostNameInCertificate veya serverCertificate özelliklerini kullanır.

Sunucu TDS 8.0 bağlantılarını destekleyecek şekilde yapılandırılmamışsa, sürücü bir hata oluşturur ve bağlantıyı sonlandırır.

Encrypt özelliği true olarak ayarlanırsa, SQL Server için Microsoft JDBC Sürücüsü, SQL Server ile TLS şifrelemesi anlaşması yapmak için JVM'nin varsayılan JSSE güvenlik sağlayıcısını kullanır. Varsayılan güvenlik sağlayıcısı TLS şifrelemesi konusunda başarılı bir şekilde anlaşmak için gereken özelliklerin tümünü desteklemeyebilir. Örneğin, varsayılan güvenlik sağlayıcısı SQL Server TLS sertifikasında kullanılan RSA ortak anahtarının boyutunu desteklemeyebilir. Bu durumda, varsayılan güvenlik sağlayıcısı JDBC sürücüsünün bağlantıyı sonlandırmasına neden olacak bir hata verebilir. Bu sorunu çözmek için aşağıdaki seçeneklerden biri kullanılabilir:

  • SQL Server'ı daha küçük bir RSA ortak anahtarı olan bir sunucu sertifikasıyla yapılandırma
  • JVM'yi "<java-home>/lib/security/java.security" güvenlik özellikleri dosyasında farklı bir JSSE güvenlik sağlayıcısı kullanacak şekilde yapılandırın
  • Farklı bir JVM kullanma

Sunucu TLS sertifikası doğrulanıyor

TLS el sıkışması sırasında sunucu ortak anahtar sertifikasını istemciye gönderir. JDBC sürücüsü veya istemcisi, sunucu sertifikasının istemcinin güvendiği bir sertifika yetkilisi tarafından verildiğini doğrulamalı. Sürücü, sunucu sertifikasının aşağıdaki koşulları karşılamasını gerektirir:

  • Sertifika, güvenilen bir sertifika yetkilisi tarafından verildi.
  • Sunucu kimlik doğrulaması için sertifika verilmelidir.
  • Sertifikanın süresi dolmamış.
  • Konu'daki Ortak Ad (CN) veya sertifikanın Konu Diğer Adı'ndaki (SAN) bir DNS adı, bağlantı dizesinde belirtilen serverName değeriyle veya belirtilirse hostNameInCertificate özellik değeriyle tam olarak eşleşir.
  • Bir DNS adı joker karakterler içerebilir. Önceki sürüm 7.2, SQL Server için Microsoft JDBC Sürücüsü joker karakter eşleştirmeyi desteklemez. Yani abc.com, *.com ile eşleşmez; ancak *.com, *.com ile eşleşir. 7.2 ve sonraki sürümlerde, standart sertifika joker karakter eşleştirmesi desteklenir.

Şifreleme ile strict TDS 8.0'ın kullanılması için serverCertificate özellik değeri, sunucu sertifikası doğrulaması için kullanılacak sunucu sertifikasının yolunu sağlar. Bu dosya PEM dosya biçimini kullanmalıdır. Sunucudan alınan sertifika bu sertifikayla tam olarak eşleşmelidir.