Оскільки я щойно виявив, що RFC 5425 вимагає використання TLS 1.2 і що .NET поки що не підтримує його, цікаво, чи існує якась реалізація, можливо, з відкритим кодом, протоколу TLS 1.2, як визначено в RFC 5246.
Оскільки я щойно виявив, що RFC 5425 вимагає використання TLS 1.2 і що .NET поки що не підтримує його, цікаво, чи існує якась реалізація, можливо, з відкритим кодом, протоколу TLS 1.2, як визначено в RFC 5246.
Відповіді:
Щойно виявив, що .Net Framework 4.5 тепер підтримує TLSv1.2
http://msdn.microsoft.com/en-us/library/system.security.authentication.sslprotocols(v=vs.110).aspx
Так, хоча вам доведеться ввімкнути TLS 1.2 вручну на System.Net.ServicePointManager.SecurityProtocol
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; // comparable to modern browsers
var response = WebRequest.Create("https://www.howsmyssl.com/").GetResponse();
var body = new StreamReader(response.GetResponseStream()).ReadToEnd();
Ваш клієнт використовує TLS 1.2, найсучаснішу версію протоколу шифрування
Звичайно , WebRequest використовуватиме TLS 1.0 або SSL 3 .
Ваш клієнт використовує TLS 1.0, який є дуже старим, можливо сприйнятливим до атаки BEAST, і не має на ньому найкращих наборів шифрів. Додатки, такі як AES-GCM та SHA256, які замінюють MD5-SHA-1, недоступні для клієнта TLS 1.0, а також для багатьох інших сучасних шифрувальних наборів.
Ви можете скористатися налаштуванням реєстру SchUseStrongCrypto, щоб вимагати, щоб усі програми .NET використовували TLS 1.2 замість 1.0 за замовчуванням.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
Я вирішив свою проблему, переключившись на останню .Net Framework. Отже, ваш цільовий фреймворк встановлює ваш протокол безпеки.
коли у вас є це в Web.config
<system.web>
<httpRuntime targetFramework="4.5"/>
</system.web>
ви отримаєте це за замовчуванням:
ServicePointManager.SecurityProtocol = Ssl3 | Tls
коли у вас є це в Web.config
<system.web>
<httpRuntime targetFramework="4.6.1"/>
</system.web>
ви отримаєте це за замовчуванням:
ServicePointManager.SecurityProtocol = Tls12 | Tls11 | Tls
Просто завантажте цей розділ реєстру та запустіть його. Він додасть необхідний ключ до реєстру .NET framework. Ви можете отримати більше інформації за цим посиланням . Шукайте "Варіант 2" у ".NET 4.5 - 4.5.2".
Реєстраційний файл додає до реєстру таке:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
Це частина сторінки, яка корисна на випадок поломки:
Значення Net.ServicePointManager.SecurityProtocol. "
Якщо ви маєте справу зі старими версіями .NET Framework, тоді підтримка TLS 1.2 доступна в нашому продукті SecureBlackbox як у клієнтському, так і в серверному компонентах. SecureBlackbox містить власну реалізацію всіх алгоритмів, тому не має значення, яку версію платформи на базі .NET ви використовуєте (включаючи .NET CF) - у вас буде TLS 1.2 із найновішими доповненнями у всіх випадках.
Зверніть увагу, що SecureBlackbox звичайно не додає TLS 1.2 до класів фреймворку - натомість вам потрібно явно використовувати класи та компоненти SecureBlackbox.
Остання версія SSPI (в комплекті з Windows 7) має реалізацію TLS 1.2, яку можна знайти в schannel.dll
.NET Framework 4.6 за замовчуванням використовує TLS 1.2.
Більше того, у .NET 4.6 повинна бути лише програма-хост, бібліотеки, на які посилаються, можуть залишатися в старих версіях.
Ви можете увімкнути TLS 1.2 у IIS, дотримуючись цих інструкцій . Я вважаю, цього буде достатньо, якщо у вас є програма на базі ASP.NET, яка працює поверх IIS, хоча, схоже, вона насправді не відповідає вашим потребам.
як згадано тут, ви можете просто додати цей рядок
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;