2015-04-16 45 views
22

Bizim .net WCF istemcisi, WebRequest çağrı, bir windows EXE derlenmiş Win2012-R2 üzerinde çalışan, SADECE TLS 1.2WCF İstemcisi .NET 4.5.1: WebRequest kullanıldığında TLS 1.2 nasıl etkinleştirilir?

Biliyoruz yüzeyleri bir web sunucusuna bağlanmak için reddettiği Win2012 ve .NET 4.5x desteği TLS 1.2

Sunucu, TLS 1.0 ve üstü olduğunda sorun olmaz. Sorun yalnızca, bağlandığımız sunucu TLS 1.0, 1.1 ve SSL2 ve SSL3 ENGELLİLERİNE sahip olduğunda görülür. Sunucu SADECE TLS 1.2 yüzeyler. Chrome ve firefox (Win 7 ve üstü sürümlerde) sunucuya para bağlar (herhangi bir uyarı veya SSL sorunu yoktur).

Sunucu sertifikası% 100 tamam.

Sorun, WebRequest'in bu durumda bağlanamamasıdır.

WebRequest kullanımımızın TLS 1.2, 1.1, 1.0 ve/veya SSL v3'ü çalıştırabilecek sistemlere bağlanabilmesi için kodda nelere ihtiyacımız var?

+0

Muhtemelen bu, işletim sisteminde etkinleştirilmiş şifrelerdir. Hangi işletim sistemini kullanıyorsunuz? Tüm yamaları ve servis paketlerini mi uyguladınız? .NET 4.5.2'ye güncelleştirmeyi denediniz mi? –

+0

@ErikFunkenbusch Hayır, üzgünüm, doğru değilsin. Bu, şifre etkinleştirme meselesi değildir (Win2012-R2'de, tüm şifreler mevcut ve tümü etkinleştirilmiştir.). NET 4.51'in bir sınırlaması yok, TLS 1.2 desteği, .NET 4.x'te var. Soru, .NET'in kendisi varsayılan olarak 1.2 için etkin olmadığı için nasıl etkinleştirileceğidir. – Jonesome

+0

Herhangi bir site için herhangi bir güvenli bağlantıya bağlanmayacağını mı söylüyorsunuz? –

cevap

26

anlamaya kolay olmasa da, gerekli bir özelliktir: Bu devre dışı bırakmak ve WCF ortamında TLS düzeylerini etkinleştirmek için kullanılabilir

System.Net.ServicePointManager.SecurityProtocol.

Ayrıca, kullandığınız için WCF anda ayarlanır görebilirsiniz:

Console.WriteLine(System.Net.ServicePointManager.SecurityProtocol.ToString()); 

için teşekkür grubu: How do I disable SSL fallback and use only TLS for outbound connections in .NET? (Poodle mitigation)

+1

Windows sunucu sürümü düzeltmeyle ilgili mi, yoksa "System.Net.ServicePointManager.SecurityProtocol" ifadesini uygun şekilde ayarladığınız sürece Windows sürümünüz ne olursa olsun çalışır mı? – mmcrae

+3

@ mmcrae Windows sürümü, işletim sisteminin kendisi TLS 1.2'yi desteklemiyorsa (schannel dll yoluyla), .NET'te sormanız size vermeyeceği ile ilgilidir. Bkz. Https: // blogs.msdn.microsoft.com/kaushal/2011/10/02/support-for-ssltls-protocols-on-windows/ – Jonesome

+0

Bu yanıt doğru olsa da, bir program geniş ayarı ayarlar. Aynı programda farklı servis çağrıları için farklı protokol kullanmak istersem ne olur? – Esko

25

.NET 4.5 veya daha üst versiyonu ile çalışmak ve bu satırı eklemek gerekir senin Kod:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 
+0

Sadece ihtiyacım olan cevap teşekkürler. – Blackvault

+1

Kodlara dokunmanız gerekmez: https://docs.microsoft.com/en-us/officeonlineserver/enable-tls-1-1-and-tls-1-2-support-in-office-online- sunucu –

İlgili konular