Ben aşağıdaki C# kodu, özel bir sertifika ile bir https çağrı inşa. Tls 1.1 kullanırken, çağrı iyi çalışıyor. Tls 1.2 kullanırken arama kesilir. Ben ince hem de TLS 1.2 eserlerini kullanarak, curl kullanarak.C# ve dotnet 4.7.1 TLS 1.2 aramalar için özel sertifika ekleme değil
C# Kod:
X509Certificate2Collection collection = new X509Certificate2Collection();
collection.Import("C:\\SomePath\\MyCertificate.pfx", "MyPassword", X509KeyStorageFlags.PersistKeySet);
var cert = collection[0];
ServicePointManager.SecurityProtocol = ...;
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true;
HttpClientHandler handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) => true;
handler.ClientCertificates.Add(cert);
var content = new ByteArrayContent(Encoding.GetEncoding("latin1").GetBytes("Hello world"));
HttpClient client = new HttpClient(handler);
var resp = client.PostAsync(requestUri: url, content: content).Result.Content.ReadAsStringAsync().Result;
İşleri ile:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11;
Hata ile:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
Net hata iletisi: SocketException: Varolan bir bağlantıyı zorla tarafından kapatıldı uzak ana
Net sürümü: 4.7.1
OS: Windows 10 sürümü 1703 (desteklenen şifre listesi: https://msdn.microsoft.com/en-us/library/windows/desktop/mt808163(v=vs.85).aspx) - ve sunucu desteklenen şifrelerin arasında olan TLS_RSA_WITH_AES_256_GCM_SHA384 kullanılacak belirtir.
wireshark I (C#/TLS 1.1 ve Bukle TLS 1.2) sertifika sunucusu gönderiliyor çalışma aramalar görebilirsiniz. İşte C# tls 1.1 çağrı için Wireshark çöplük:
Ancak aynı zamanda wireshark içinde, C# ile görebiliriz/TLS 1.2 hiçbir sertifika istemciden sunucuya gönderilen yoktur.
herkes burada eksik ben görebilir miyim: Burada C# tls 1.2 çağrı için Wireshark dökümü nedir?
GÜNCELLEME
sertifika tls'de 1.2 ile birlikte pencerelerde Schannel tarafından desteklenmeyen bir md5 imzası görünüyor. Bizim satıcı çözüm olarak bize başka sertifika yarattı. https://community.qualys.com/thread/15498
.Net Core 2.0 istemci/sunucu uygulamasıyla benzer bir sorun yaşadım. TLS 1.2'yi sunucuya zorlayarak çözdüm. Bu şekilde, müşteri protokolü ve sertifikası uygun şekilde pazarlık eder. Yalnızca TLS 1.2'ye zorlanan bir sunucuya bağlanmayı ve .NET Framework ile aynı davranışın olup olmadığını görmeyi deneyebilirsiniz. – Ghigo
Sunucuda bunu değiştirmek iyi bir seçenek değil çünkü sunucu bir satıcıya ait. Ve tls 1.1'i eklediğimde farketmez. Tls 1.2 sadece izin verilen protokoller arasında olduğu sürece, bu sorun olur. Neden bilmiyorum. Net, düzgün çalıştığı zaman, bu şekilde davranır. Ve tls 1.2 etkin olmalı çünkü bu statik bir ayardır ve diğer bağlantılar aynı uygulamada tls 1.2'ye bağlıdır. Bu tek çağrı için tls 1.3 dönüştürebilirdi. Ancak protokolleri işleyici nesnesine yerleştirmek, bu durumun şu anda mümkün olmadığını belirten bir istisna atar. –
Bu sorunun bir kopyası gibi görünüyor. Https://stackoverflow.com/questions/44751179/tls-1-2-not-negotiated-in-net-4-7-without-explicit-servicepointmanager-security –