Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uygulamanız ile SQL Server arasındaki trafiği şifrelemek için Taşıma Katmanı Güvenliği (TLS) kullanın. Sunucunun kimliğini doğrulamak için sunucu sertifikası doğrulamasını etkin tutun. Kimlik doğrulaması olmadan şifreleme, sunucuyu taklit eden ortadaki bir düşmana karşı koruma sağlamaz.
Microsoft.Data.SqlClient varsayılan olarak Encrypt=Mandatory ve TrustServerCertificate=false kullanır.
Encrypt=true , için Mandatorybir eş anlamlıdır. Uzak bağlantı için, bu ayarları açıkça talep edin ve istemcinin doğrulayabileceği bir sunucu sertifikası sağlanın:
Server=tcp:<server>,1433;Database=<database>;Integrated Security=true;Encrypt=true;TrustServerCertificate=false;MultiSubnetFailover=true;
Yer tutucuları değiştirin ve sunucu ile uygulama ortamınız tarafından desteklenen bir kimlik doğrulama yöntemi kullanın. Microsoft Fabric'te Azure SQL veya SQL veritabanı için bkz. Microsoft Entra authentication.
Bir şifreleme modu seçin
Encrypt istemcinin şifreleme gerektirip gerektirmediğini kontrol eder. Bir sunucu ayrıca şifreleme gerektirebilir. Bu tablo, sertifika sabitlemeden mevcut davranışı tanımlar:
| İstemci ayarı | Sunucu gereksinimi | Sertifika doğrulama | Result |
|---|---|---|---|
Encrypt=Optional veya false |
Şifrelemeyi zorlamıyor. | Hiçbiri, TrustServerCertificate ne olursa olsun. |
Sadece giriş paketleri şifrelenmiştir. Sonraki trafik şifreli değil. |
Encrypt=Optional;TrustServerCertificate=false |
Şifrelemeyi zorunlu kılar. | Güven zinciri, geçerlilik ve sunucu adı. | Tüm trafik şifrelenmiştir. Geçersiz sertifikalar bağlantıyı başarısız eder. |
Encrypt=Optional;TrustServerCertificate=true |
Şifrelemeyi zorunlu kılar. | Atlandı. | Tüm trafik şifrelenmiş, ancak sunucunun kimliği doğrulanmamış. |
Encrypt=Mandatory;TrustServerCertificate=false |
İki ayardan biri. | Güven zinciri, geçerlilik ve sunucu adı. | Tüm trafik şifrelenmiştir. Geçersiz sertifikalar bağlantıyı başarısız eder. |
Encrypt=Mandatory;TrustServerCertificate=true |
İki ayardan herhangi biri. | Atlandı. | Tüm trafik şifrelenmiş, ancak sunucunun kimliği doğrulanmamış. |
Encrypt=Strict |
Tabular Data Stream (TDS) 8.0'ı destekler. | Gerekli.
TrustServerCertificate bunu atlatamaz. |
TLS, TDS mesajlarından önce başlar. Desteklenmeyen bir sunucu veya geçersiz sertifika bağlantıyı başarısız eder. |
TDS 8.0'ı desteklemeyen sunuculara şifreli bağlantılar için Mandatory kullanın. Uç noktanız, SQL Server 2022 (16.x) ve sonraki sürümler dahil olmak üzere Strict'ı destekliyorsa kullanın. TDS 8.0, TLS 1.2 ve TLS 1.3'ü destekler; TLS 1.3 gerektirmez. Müzakere edilen TLS sürümü ayrıca istemci, sunucu ve işletim sistemi yapılandırmasına da bağlıdır.
Optional sertifika hatalarına çözüm değildir. Sunucu şifreleme gerektirmediğinde uygulama verilerini şifrelememiş bırakabilir.
Doğrulanabilir bir sunucu sertifikası yapılandırma
Normal sertifika doğrulaması için:
- SQL Server sertifika gereksinimlerini karşılayan bir sertifika sağlamak.
- Sertifikanın özne alternatif adına (SAN) istemcilerin bağlanmak için kullandığı adı ekleyin.
- Veren sertifika otoritesini ve gerekli ara sertifikaları her istemci host veya konteyner üzerinde güvenilir hale getirin.
- SQL Server'ı sertifikayı kullanacak şekilde yapılandırın ve
TrustServerCertificate=falseetiketini istemcilerde koruyun. - Sertifika yenilemesini, adlarda veya düzenleyen makamlarda yapılan değişiklikler de dahil olmak üzere, süresi dolmadan önce planlayın.
Kamu veya kurumsal bir sertifika otoritesinden alınan bir sertifika bu gereksinimleri karşılayabilir. Bir kurumsal sertifika, bir Linux konteyneri içinde veya ayrı bir geliştirici bilgisayarında otomatik olarak güvenilir değildir.
Bir takma adla bağlanın
Bağlantı sertifikada olmayan bir Alan Adı Sistemi (DNS) takma adını kullanıyorsa, önce takma adı içeren bir sertifika vermeyi düşünün. Alternatif olarak, sertifikada beklenen isme ayarlayın HostNameInCertificate :
Server=tcp:sql-alias.contoso.com,1433;Database=<database>;Integrated Security=true;Encrypt=true;TrustServerCertificate=false;HostNameInCertificate=sql-server.contoso.com;MultiSubnetFailover=true;
HostNameInCertificate sertifika doğrulaması sırasında SqlClient'ın beklediği ismi değiştirir. Ağ hedefini değiştirmez ve güven zinciri ile geçerlilik süresi denetimlerini atlatmaz. Sunucu adı sertifikayla eşleşiyorsa ayarsız bırakın.
Belirli bir sunucu sertifikasını sabitleyin
ServerCertificate sunucunun sertifikasıyla tam karşılaştırma için yerel bir sertifika dosyası sağlar. Desteklenen formatlar Privacy-Enhanced Mail (PEM) ve Distinguished Encoding Rules (DER)'dir; sertifika dosyaları da dahildir .cer . Bunu Encrypt=Mandatory veya Encrypt=Strict ile kullanın ve TrustServerCertificate=false öğesini koruyun.
Server=tcp:<server>,1433;Database=<database>;Integrated Security=true;Encrypt=Strict;TrustServerCertificate=false;ServerCertificate=C:\certificates\sql-server.cer;MultiSubnetFailover=true;
Beklenen sertifikayı güvenilir bir kanal üzerinden dağıtın ve dosyayı değiştirilmekten koruyun. Kesin sertifika eşleşmesi, normal zincir ve isim doğrulamasına alternatif bir şeydir, üstüne ek bir kontrol değil. Sertifika baytları eşleşmeli; aynı konu adı veya açık anahtar tek başına yeterli değildir. Eksik, okunamaz, geçersiz veya uyumsuz bir pin dosyası doğrulamada başarısız olur.
Sabitleme, istemci dağıtımını sertifika rotasyonuna bağımlı hâle getirir. Sunucu sertifikası değiştiğinde, yenileme dahil, pin’i güncelleyin. Ağdan doğrulanmamış bir sertifika kabul ederek PIN almayın.
SqlClient, rastgele TLS sunucu sertifikası doğrulaması için halka açık geri çağrı yapmaz.
AccessTokenCallback kimlik doğrulama token edinimini kontrol eder, TLS doğrulamasını değil.
Geliştirme sertifikaları ve sorun giderme
Doğru sunucu adıyla güvenilir bir geliştirme sertifikası kullanın. Geçici TrustServerCertificate=true olarak izole bir geliştirme ortamında kullanırsanız Encrypt=true , bağlantı şifrelenmiş olur ama istemci sunucu sertifikasını doğrulamaz.
Dikkat
Sertifika hataları için üretim düzeltmesi olarak dağıtmayın TrustServerCertificate=true .
Mandatory ile sunucu kimliği doğrulamasını devre dışı bırakır ve Strict ile etkisi yoktur.
| Failure | Kontrol |
|---|---|
| Sertifika zincirine güvenilmez. | İstemcide uygun güvenilir kök ve ara sistemleri yükleyin. SQL Server'ın gerçekten sunduğu sertifikayı doğrulayın. |
| Sertifika adı uyuşmuyor. | SAN sertifikasıyla karşılaştırın Server . İsmi, sertifikayı veya kasıtlı HostNameInCertificate geçersiz kalmayı düzeltin. |
| Sertifikanın süresi doldu. | Sunucu sertifikasını yenileyin ve istemci saatini kontrol edin. |
| Sabitlenmiş sertifika eşleşmiyor ya da yüklenemiyor. | Dosya yolunu, izinleri, formatı ve dağıtılan sertifikayı kontrol edin. PIN’i güvenilir dağıtım süreciniz aracılığıyla güncelleyin. |
| Katı şifreleme bağlantı kuramaz. | Uç noktanın TDS 8.0'ı desteklediğini ve TLS yapılandırmasının istemci ile uyumlu olduğunu doğrulayın. |
Sunucu tarafı yapılandırması için Sertifika genel bakışına bakınız.
Şifreleme ve sertifika doğrulama davranışındaki değişiklikler
Bu uyumluluk notları, eski uygulamalarda güncellerken davranış değişikliklerini açıklar. Yeni uygulamalar, bu makalede açıklanan mevcut ayarları kullanmalıdır.
| Sürücü serbest bırakılması | Değişiklik |
|---|---|
| 1.0 |
Encrypt=false varsayılan değerdir. İstemci şifreleme talep etmediğinde, sunucu tarafından zorla şifreleme sertifika doğrulamasını tetiklemez. |
| 2.0 | Sunucu tarafından zorlanan şifreleme, Encrypt=false öğesini TrustServerCertificate olsa bile dikkate alır. |
| 4,0 | Şifreleme varsayılan olarak etkinleştirilir. Yükseltmeler, daha önce fark edilmeyen sertifika yapılandırma hatalarını ortaya çıkarabilir. |
| 5.0 | , Mandatory, Strict, ve HostNameInCertificateeklerOptional. |
| 5.1 | Sertifika sabitleme için ServerCertificate ekler. |
| 7.0.3 | Yönetilen ağ sertifika pin doğrulamasının, eksik, geçersiz veya uyumsuz dosyalar için kapalı olarak başarısız olmasını düzeltir, normal platform doğrulaması başarılı olsa bile. |