Aracılığıyla paylaş


Ş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 blank
trustServerCertificate = any
hostNameInCertificate = any
trustStore = any
trustStorePassword = any
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 = true
trustServerCertificate = true
hostNameInCertificate = any
trustStore = any
trustStorePassword = any
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 = true
trustServerCertificate = false veya blank
hostNameInCertificate = blank
trustStore = blank
trustStorePassword = blank
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 = true
trustServerCertificate = false veya blank
hostNameInCertificate = value
trustStore = blank
trustStorePassword = blank
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 = true
trustServerCertificate = false veya blank
hostNameInCertificate = blank
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ü trustStore özellik değerini kullanarak trustStore dosyasının bütünlüğünü denetlemek için trustStore dosyasını ve trustStorePassword özellik değerini bulur.

Sunucu şifrelemeyi destekleyecek şekilde yapılandırılmamışsa, sürücü bir hata oluşturur ve bağlantıyı sonlandırır.
encrypt = true
trustServerCertificate = false veya blank
hostNameInCertificate = blank
trustStore = blank
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 = true
trustServerCertificate = false veya blank
hostNameInCertificate = blank
trustStore = değer
trustStorePassword = blank
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 = true
trustServerCertificate = false veya blank
hostNameInCertificate = value
trustStore = blank
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 = true
trustServerCertificate = false veya blank
hostNameInCertificate = value
trustStore = değer
trustStorePassword = blank
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 = true
trustServerCertificate = false veya blank
hostNameInCertificate = value
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ü trustStore özellik değerini kullanarak trustStore dosyasının bütünlüğünü denetlemek için trustStore dosyasını ve trustStorePassword özellik değerini bulur. 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 = strict
hostNameInCertificate = value
trustStore = blank
trustStorePassword = blank
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ı yoksayılır ve modda strict 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.
  • DNS adı joker karakter içerebilir. Önceki sürüm 7.2, SQL Server için Microsoft JDBC Sürücüsü joker karakter eşleştirmeyi desteklemez. Başka bir abc.com *.com eşleşmez ancak *.com *.com eşleşir. Sürüm 7.2 ve sonrasında standart sertifika joker kart 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.

Ayrıca bakınız

Şifrelemeyi kullanma
JDBC sürücü uygulamalarının güvenliğini sağlama