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.
Bu makale, bir uygulama SQL Server'a bağlantı açmaya çalıştığında oluşan sorunu düzeltmeye yardımcı olur.
Şunlar için geçerlidir: Windows Server 2019, Windows Server 2016
Özgün KB numarası: 4557473
Belirtiler
Bir uygulama SQL Server bağlantısını açmaya çalıştığında, aşağıdaki hata iletilerinden biri görüntülenir:
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ı.)
Sunucuyla başarılı bir şekilde bağlantı kuruldu, ancak sonra oturum açma öncesi el sıkışması sırasında hata oluştu. (sağlayıcı: TCP Sağlayıcısı, hata: 0 - Var olan bir bağlantı uzak konak tarafından zorla kapatıldı.)
Sunucuda SChannel günlüğünü etkinleştirdiyseniz, sorun oluştuğunda Olay Kimliği 36888 (Önemli Uyarı oluşturuldu) alırsınız.
Not
- Kullandığınız sağlayıcıya veya sürücüye bağlı olarak, hata iletisi biraz farklılık gösterebilir.
- Bu sorun, Windows Server 2012 R2 üzerinde çalışan bir uygulama Windows Server 2019'da çalışan SQL Server'a bağlanmaya çalıştığında da oluşur.
- Diğer istemci-sunucu uygulamaları da benzer bir sorunla karşılaşabilir.
Neden
Windows Server 2016 veya Windows 10, 25 Şubat 2020 veya üzeri güncelleştirmelerin yüklü olduğu sürüm 1607 dahil olmak üzere Windows 10, sürüm 1511 ve sonraki sürümleri önde gelen sıfır güncelleştirmeleri içerir. Bu arada, daha önce yayımlanan tüm Windows sürümleri baştaki sıfır güncelleştirmeleri içermez.
TLS istemcisinin ve sunucusunun anahtarları tam olarak aynı şekilde hesaplaması gerekir, aksi takdirde farklı sonuçlar alır. Baştaki sıfırlar TLS istemcisi ve TLS Sunucuları tarafından farklı şekilde hesaplanırsa TLS bağlantıları rastgele başarısız olur.
Bir Diffie-Hellman anahtar değişim grubunda başta sıfırlar olduğunda, eşleşmeyen bilgisayarlar doldurulmuş sıfırları hesaplamayarak mac'i yanlış hesaplayabilir. Bu sorun genellikle Windows tabanlı olmayan şifreleme uygulamalarıyla etkileşim kurarken görülür ve aralıklı anlaşma hatalarına neden olabilir.
İstemci ile sunucu arasında güvenli TLS el sıkışması TLS_DHE şifre paketi kullanılarak anlaşıldığında hata iletileri döndürülür. Etkilenen şifreleme paketlerinden birinin kullanımı "Sunucu Hello" paketinde tanımlanabilir. Daha fazla bilgi için "Daha fazla bilgi" bölümündeki ağ kod parçacığına bakın.
Çözüm
Bu sorunu çözmek için, hem istemcinin hem de bir bağlantıda yer alan sunucunun, TLS_DHE için önde gelen sıfır düzeltmeleri olan Windows'u çalıştırdığından emin olun. TLS_DHE belirtimlerine uyumluluğu artırdığından güncelleştirmelerin yüklenmesi önerilir.
Aşağıdaki listede yüklü güncelleştirmelere göre işletim sistemi sürümü listelenmiştir.
TLS_DHE için baştaki sıfır düzeltmeleri içeren Windows sürümleri
- Windows Server 2016, sürüm 1607
- KB 4537806: 25 Şubat 2020-KB4537806 (İs Derlemesi 14393.3542)
- KB 4540670: 10 Mart 2020-KB4540670 (İs Derlemesi 14393.3564)
- İlgili işletim sistemi sürümleri için KB4537806 ve KB4540670 yerine geçen güncelleştirmeler
- Windows Server 2019 RTM ve sonraki sürümleri.
- Windows 10, sürüm 1511 ve windows 10'un sonraki sürümleri (sürüm geçmişine bakın)
TLS_DHE için baştaki sıfır düzeltmelerini içermeyen Windows sürümleri
- KB 4537806 ve KB 4540670 düzeltme ekleri uygulanmamış Windows Server 2016, sürüm 1607 sunucuları.
- Windows, 10 sürüm 1507
- Windows 8.1
- Windows 7
- Windows Server 2012 R2 ve Windows Server'ın önceki sürümleri
Geçici çözüm
Windows'u güncelleştiremiyorsanız, geçici bir çözüm olarak iki yöntemden birini kullanarak TLS_DHE şifrelemelerini devre dışı bırakabilirsiniz.
Grup İlkesi Kullanma
TLS_DHE_* şifreleri Grup İlkesi kullanılarak devre dışı bırakılabilir. "SSL Şifreleme Paketi Sırası" grup ilkesini yapılandırmak için Schannel Şifreleme Paketlerine Öncelik Verme bölümüne bakın.
İlke URL'si: Bilgisayar Yapılandırması -> Yönetim Şablonları -> Ağ -> SSL Yapılandırma Ayarları
İlke Ayarı: SSL Şifreleme Paketi Sırası ayarı.
PowerShell betiği kullanma
foreach ($CipherSuite in $(Get-TlsCipherSuite).Name)
{
if ( $CipherSuite.substring(0,7) -eq "TLS_DHE" )
{
"Disabling cipher suite: " + $CipherSuite
Disable-TlsCipherSuite -Name $CipherSuite
}
else
{
"Existing enabled cipher suite will remain enabled: " + $CipherSuite
}
}
Daha Fazla Bilgi
Bağlantı kurulması sırasında bu sorunla karşılaştığınızı onaylayabilirsiniz. Sorun oluştuğunda, sunucudaki ağ izlemesinde aşağıdaki sırayı görebilirsiniz.
1103479 <DateTime> 382.4104867 <Application IP> <Server IP> TCP:Flags=CE....S., SrcPort=62702, DstPort=1433, PayloadLen=0, Seq=829174047, Ack=0, Win=8192 ( Negotiating scale factor 0x8 ) = 8192
1103486 <DateTime> 382.4105589 <Server IP> <Application IP> TCP: [Bad CheckSum]Flags=...A..S., SrcPort=1433, DstPort=62702, PayloadLen=0, Seq=267349053, Ack=829174048, Win=65535 ( Negotiated scale factor 0x8 ) = 16776960
1103493 <DateTime> 382.4113628 <Application IP> <Server IP> TCP:Flags=...A...., SrcPort=62702, DstPort=1433, PayloadLen=0, Seq=829174048, Ack=267349054, Win=513 (scale factor 0x8) = 131328
1103515 <DateTime> 382.4117349 <Application IP> <Server IP> TDS:Prelogin, Version = 7.300000(No version information available, using the default version), SPID = 0, PacketID = 1, Flags=...AP..., SrcPort=62702, DstPort=1433, PayloadLen=88, Seq=829174048 - 829174136, Ack=267349054, Win=131328
1103525 <DateTime> 382.4118186 <Server IP> <Application IP> TDS:Response, Version = 7.300000(No version information available, using the default version), SPID = 0, PacketID = 1, Flags=...AP..., SrcPort=1433, DstPort=62702, PayloadLen=48, Seq=267349054 - 267349102, Ack=829174136, Win=2102272
1103547 <DateTime> 382.4128101 <Application IP> <Server IP> TLS:TLS Rec Layer-1 HandShake: Client Hello.
1103584 <DateTime> 382.4151314 <Server IP> <Application IP> TLS:TLS Rec Layer-1 HandShake: Server Hello. Certificate. Server Key Exchange. Server Hello Done.
1103595 <DateTime> 382.4161185 <Application IP> <Server IP> TCP:Flags=...A...., SrcPort=62702, DstPort=1433, PayloadLen=0, Seq=829174322, Ack=267351024, Win=513 (scale factor 0x8) = 131328
1103676 <DateTime> 382.4782629 <Application IP> <Server IP> TLS:TLS Rec Layer-1 HandShake: Client Key Exchange.; TLS Rec Layer-2 Cipher Change Spec; TLS Rec Layer-3 HandShake: Encrypted Handshake Message.
1103692 <DateTime> 382.4901904 <Server IP> <Application IP> TCP:[Segment Lost] [Bad CheckSum]Flags=...A...F, SrcPort=1433, DstPort=62702, PayloadLen=0, Seq=267351024, Ack=829174648, Win=8210 (scale factor 0x8) = 2101760
1103696 <DateTime> 382.4918048 <Application IP> <Server IP> TCP:Flags=...A...., SrcPort=62702, DstPort=1433, PayloadLen=0, Seq=829174648, Ack=267351025, Win=513 (scale factor 0x8) = 131328
1103718 <DateTime> 382.4931068 <Application IP> <Server IP> TCP:Flags=...A...F, SrcPort=62702, DstPort=1433, PayloadLen=0, Seq=829174648, Ack=267351025, Win=513 (scale factor 0x8) = 131328
1103723 <DateTime> 382.4931475 <Server IP> <Application IP> TCP: [Bad CheckSum]Flags=...A...., SrcPort=1433, DstPort=62702, PayloadLen=0, Seq=267351025, Ack=829174649, Win=8210 (scale factor 0x8) = 2101760
Kullanılan şifreleme paketini görmek için Sunucu Hello paketini inceleme:
Frame: Number = 1103584, Captured Frame Length = 2093, MediaType = NetEvent
+NetEvent:
+MicrosoftWindowsNDISPacketCapture: Packet Fragment (1976 (0x7B8) bytes)
+Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[00-00-0C-9F-F4-5C],SourceAddress:[00-1D-D8-B8-3A-7B]
+Ipv4: Src = <Server IP>, Dest = <Application IP>, Next Protocol = TCP, Packet ID = 16076, Total IP Length = 0
+Tcp: [Bad CheckSum]Flags=...AP..., SrcPort=1433, DstPort=62702, PayloadLen=1938, Seq=267349102 - 267351040, Ack=829174322, Win=8211 (scale factor 0x8) = 2102016
+Tds: Prelogin, Version = 7.300000(No version information available, using the default version), SPID = 0, PacketID = 0, Flags=...AP..., SrcPort=1433, DstPort=62702, PayloadLen=1938, Seq=267349102 - 267351040, Ack=829174322, Win=2102016
TLSSSLData: Transport Layer Security (TLS) Payload Data
-TLS: TLS Rec Layer-1 HandShake: Server Hello. Certificate. Server Key Exchange. Server Hello Done.
-TlsRecordLayer: TLS Rec Layer-1 HandShake:
ContentType: HandShake:
+Version: TLS 1.2
Length: 1909 (0x775)
-SSLHandshake: SSL HandShake Server Hello Done(0x0E)
HandShakeType: ServerHello(0x02)
Length: 81 (0x51)
-ServerHello: 0x1
+Version: TLS 1.2
+RandomBytes:
SessionIDLength: 32 (0x20)
SessionID: Binary Large Object (32 Bytes)
TLSCipherSuite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 { 0x00, 0x9F }
CompressionMethods: 0 (0x0)
ExtensionsLength: 9 (0x9)
+ServerHelloExtension: Unknown Extension Type
+ServerHelloExtension: Renegotiation Info(0xFF01)
HandShakeType: Certificate(0x0B)
Length: 778 (0x30A)
+Cert: 0x1
HandShakeType: Server Key Exchange(0x0C)
Length: 1034 (0x40A)
ServerKeyExchange: Binary Large Object (1034 Bytes)
HandShakeType: Server Hello Done(0x0E)
Length: 0 (0x0)
+Tds: Prelogin, Version = 7.300000(No version information available, using the default version), Reassembled Packet
Başvuru
Daha fazla bilgi için aşağıdaki makaleleri inceleyin: