Чи існує .NET реалізація TLS 1.2?


76

Оскільки я щойно виявив, що RFC 5425 вимагає використання TLS 1.2 і що .NET поки що не підтримує його, цікаво, чи існує якась реалізація, можливо, з відкритим кодом, протоколу TLS 1.2, як визначено в RFC 5246.


Для .net 3.5 необхідно додати прапор , щоб змусити його використовувати TLS 1.2 stackoverflow.com/a/44893192/2559297
D_Bester

Можливий дублікат SSL та застарілого TLS (1.0 та 1.1) для клієнтської програми Web Service на .Net 3.5 . Голосування за закриття цього, більш давнього питання, оскільки воно трохи менш сучасне.
Брайан

Відповіді:



78

Так, хоча вам доведеться ввімкнути 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, а також для багатьох інших сучасних шифрувальних наборів.


10
Чи можна вказати SecurityProtocol за допомогою параметра в app.exe.config?
Джеффрі ЛеКур,

Чи це також не залежить від ОС / сервера, на якому запущена програма, оскільки саме там буде створений / отриманий фактичний трафік HTTP?
Дон Чідл

Дякую. Працює як шарм. FYI це працює на сервері Windows 2012. Мені сказали, що Windows 2008 не підтримує TLS1.2.
LT Dan

Ви повинні мати можливість використовувати TLS1.2 на версії 2008Svr. Можливо, доведеться встановити фреймворк dotNet 4.5. Див .: msdn.microsoft.com/en-us/library/8z6watww(v=vs.110).aspx
Тобі

28

Ви можете скористатися налаштуванням реєстру 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

8
Microsoft дійсно повинна оновити це значення в одному зі своїх оновлень безпеки. Я не можу повірити, що за замовчуванням увімкнено SSL v3 та вимкнено TLS 1.2, а виправлення - це просте налаштування реєстру.
дана

.Net framework 4.0 не підтримує TLS 1.1+, але framework 4.5 підтримує: fwk 4.0: msdn.microsoft.com/en-us/library/… fwk 4.5: msdn.microsoft.com/en-us/library/…
Negarrak

2
Зараз (вересень 2016 р.) У реєстрі є купа різних версій фреймворку (4.0.30319, 4.5, 4.5.1, 4.5.23026, 4.5.50709). Якого з них потрібно оновити - чи всіх?
GlennG

1
Відповідь на це нижче - вам просто потрібно встановити 4.0.30319.
Джейсон Стіл,

1
Він буде працювати в Windows 2008 SP2 з оновленням Microsoft KB4019276 . Більше інформації тут: github.com/TheLevelUp/pos-tls-patcher
user24601

12

Я вирішив свою проблему, переключившись на останню .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 4.7.1 ?
Кікенет,

9

Просто завантажте цей розділ реєстру та запустіть його. Він додасть необхідний ключ до реєстру .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. "


6
Привіт, я відредагував вашу відповідь, включивши вміст файлу реєстру. Реєстраційні файли зазвичай вважаються "чутливими до безпеки", і досвідчені користувачі системних адміністраторів не будуть прив'язувати перший файл reg, зв'язаний кимось іншим (з усією повагою!). Думаю, також буде чудовою ідеєю цитувати частину пов’язаної статті відповідно до політики SO (без відповідей лише на посилання - краще сказати „немає відповідей, які на 100% залежать від посилань“)
usr-local-ΕΨΗΕΛΩΝ

8

Якщо ви маєте справу зі старими версіями .NET Framework, тоді підтримка TLS 1.2 доступна в нашому продукті SecureBlackbox як у клієнтському, так і в серверному компонентах. SecureBlackbox містить власну реалізацію всіх алгоритмів, тому не має значення, яку версію платформи на базі .NET ви використовуєте (включаючи .NET CF) - у вас буде TLS 1.2 із найновішими доповненнями у всіх випадках.

Зверніть увагу, що SecureBlackbox звичайно не додає TLS 1.2 до класів фреймворку - натомість вам потрібно явно використовувати класи та компоненти SecureBlackbox.


1
Проект з відкритим кодом не обов'язково означає, що вам потрібно відкрити весь код.
Євген Маєвський 'Зворотній дзвінок

1
Я правильно вважаю, що це задовольнить вимоги SSL PCI DSS 3.1? Це було б дуже корисно, оскільки існує багато операційних систем, похідних від XP, які все ще перебувають у службі підтримки Microsoft, але не можуть запускати .Net Framework 4.5.
user1069816

1
@ user1069816 Я не готовий офіційно підтвердити відповідність, поки ми ретельно не проаналізуємо вимоги PCI DSS 3.1. Але загалом SecureBlackbox повністю впроваджує TLS 1.2, дбає про останні висновки, пов'язані з безпекою, та інкапсулює відповідні обхідні шляхи.
Євген Маєвський 'Зворотний дзвінок

1
@ user1069816 Ми розглянули PCI DSS 3.1. PCI-DSS 3.1 вимагає від усіх сумісних середовищ позбутися підтримки протоколів SSL (2.0 та 3.0) та TLS 1.0 найпізніше до 30 червня 2016 року. Це легко досягти за допомогою SBB, який забезпечує повну підтримку TLS 1.1 та 1.2 та всіх сучасних шифрувальних наборів.
Євген Маєвський 'Зворотній дзвінок

1
@ user1069816 Оскільки SecureBlackbox використовує власні механізми криптографії та SSL / TLS, це не залежить від особливостей відповідної функціональності, пропонованої операційною системою або .NET framework. Тобто ви можете забезпечити, щоб ваші старі машини XP залишались сумісними з PCI-DSS, перенісши ваш програмний продукт на базі WinAPI або .NET 2.0 на SecureBlackbox.
Євген Маєвський 'Зворотній дзвінок

4

Остання версія SSPI (в комплекті з Windows 7) має реалізацію TLS 1.2, яку можна знайти в schannel.dll


Будь-які вказівки щодо використання цього в .NET?
foson

@foson Це не буде красиво, тому що SChannel COM. Існує C ++ приклад тут і деякі дуже корисні замітки тут
Josh Stodola

3

.NET Framework 4.6 за замовчуванням використовує TLS 1.2.

Більше того, у .NET 4.6 повинна бути лише програма-хост, бібліотеки, на які посилаються, можуть залишатися в старих версіях.


3

Ви можете увімкнути TLS 1.2 у IIS, дотримуючись цих інструкцій . Я вважаю, цього буде достатньо, якщо у вас є програма на базі ASP.NET, яка працює поверх IIS, хоча, схоже, вона насправді не відповідає вашим потребам.


На жаль, це не стосується мене. Я пишу додаток для запуску протоколу Syslog, який дуже далекий від ASP.NET і використовує звичайне програмування сокетів. На жаль, мені потрібен клас, еквівалентний SslStream, щоб надати мені послуги TLS 1.2 :(
usr-local-ΕΨΗΕΛΩΝ

1
Зараз це посилання 403, але, здається, новою URL-адресою є derekseaman.com/2010/06/…
Мартін Костелло

-1

як згадано тут, ви можете просто додати цей рядок

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

Це стосується лише .NET 4.0.
wp78de

Неправда. Перерахування відбувається відповідно до ОС. Якщо у вас немає 4,5 або вище, тоді ви перерахуєте по імені.
bresleveloper

Неправда. По-перше, це залежить від цільової версії .NET Framework. Друге питання - якщо ОС підтримує TLS 1.2.
wp78de
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.