Можно ли отправить HttpWebRequest с использованием TLS1.2 на платформе .NET 4.0

Мое приложение подключается к серверу Experian, и скоро Experian перестанет поддерживатьTLS 1.0 а такжеTLS 1.1, Все подключения с использованиемHTTPS должен использоватьTLS Version 1.2.

Я хочу сделать некоторые исследования по этому вопросу и увидеть отправкуHttpWebRequest с помощьюTLS 1.2 на.NET 4.0 framework работает

Если этого не произойдет, мне, вероятно, потребуется создатьwebservice на.NET 4.5 и вызывать его методами, если он это делает, мне не нужно ничего.

Кто-нибудь уже сталкивался с этой проблемой?

Ответы на вопрос(4)

Перевод VB.NETответ игнатова:

ServicePointManager.Expect100Continue = True
ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType)
ServicePointManager.DefaultConnectionLimit = 9999

Да, он поддерживает это, но вы должны явно установить версию TLS наServicePointManager, Просто запустите этот код в любое время (в том же домене приложения), прежде чем звонить в Experian:

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12

Обновить

см. ответ @iignatov о том, что вы должны сделать для framework v4.0. Мой код работает с 4.5+

 Sean17 апр. 2019 г., 15:25
Если вы хотите быть будущим доказательством, вы не должны устанавливать это = явно, скорее добавьте это w / | = - т.е. System.Net.ServicePointManager.SecurityProtocol | = System.Net.SecurityProtocolType.Tls12
 Crowcoder14 мая 2018 г., 19:31
@jshockwave да, в 4.0 нет значения enum для TLS1.2, так что вам нужно его форсировать. Я не знал об этом в то время, но мой ответ продолжает получать голосование, я думаю, потому что люди находят этот ответ, даже если они на 4.5.
 Crowcoder02 янв. 2018 г., 11:54
@ Роб да, это должно работать
 jshockwave14 мая 2018 г., 19:28
Это не работает в моем приложении 4.0, но решение iignatov делает: ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072
 Ezh29 мая 2019 г., 13:38
@Crowcoder нет такой вещи, как «SecurityProtocolType.Tls10», есть «SecurityProtocolType.Tls», который на самом деле означает Tls 1.0
 Crowcoder17 июн. 2016 г., 01:00
Пока у вас нет ничего на более низком уровне фреймворка, зависящем от этого кода, вы можете просто увеличить версию фреймворка и добавить эту строку кода.
 jshockwave16 мая 2018 г., 18:43
@Crowcoder, пожалуйста, обновите свой ответ, чтобы указать, что это работает только для 4.5 и выше. В противном случае люди, которые ищут решение 4.0, а это явно то, о чем просил ОП, пойдут по неверному пути.
 Crowcoder16 июн. 2016 г., 23:25
Я сам использую это для вызова эксперимента, поэтому Тим должен быть прав. Проблема не в HttpRequest, а в фреймворковой версии.
 Crowcoder13 окт. 2016 г., 15:00
@AgustinGarzon, если вы хотите поддерживать другие версии, вы можете "или" их вместе, например:SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls10
 Agustin Garzon13 окт. 2016 г., 14:56
Явное определение TLS1.2 нарушает совместимость с TLS1.1 или более старым SSL?
 Rob02 янв. 2018 г., 10:43
Работает ли это в global.asax при запуске приложения?
 Agustin Garzon14 окт. 2016 г., 13:16
@Crowcoder спасибо :)
 gene16 июн. 2016 г., 23:05
Я пытаюсь осуществить то изменение, которое вы предложили, и единственноеSecurityProtocolType варианты у меня естьSsl3 а такжеTls, Не имеетTls12

Мне пришлось столкнуться с той же проблемой, когда я интегрировал PayPal в унаследованное приложение, и нашел следующий обходной путь для .NET 4.0, который, похоже, делает свое дело:

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
ServicePointManager.DefaultConnectionLimit = 9999;

По сути, обходной путь заключается в прямом назначении порта для TLS 1.2.

Все кредиты идут на комментатора вCodeProject.

 Renan Araújo16 мая 2017 г., 20:55
Эта магическая линия сделала свое делоServicePointManager.SecurityProtocol = (SecurityProtocolType)3072 Большое спасибо!
 CathalMF20 июн. 2018 г., 17:42
Кстати, этот хак работает, только если на сервере также установлен .net 4.5.

К сожалению нет, вы не можете сделать это. Tls12 не был добавлен до .netfx 4.5 (см.документация). Обратите внимание, что для этого также требуется Windows Server 2008 R2 + или Windows 7+ для правильной работы (обратите внимание на раздел «Применяется к» наПредставляем TLS).

 jshockwave14 мая 2018 г., 19:27
Ответ @ iignatov должен работать: ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072

Ваш ответ на вопрос