Версия TLS: HttpClient работает, только если для политики безопасности установлено значение tls 1.1.

У меня есть приложение Windows Forms, которое развертывается с помощью щелчка один раз. Приложение было построено с .net 4.7.2 и использует HttpClient API для доступа к нескольким остальным веб-сервисам, которые размещены на внутреннем сервере. Как и следовало ожидать, доступ к службам возможен только через HTTPS, а сервер настроен на поддержку всех версий TLS (кстати, это сервер Windows 2016).

Клиентское приложение интрасети (т. е. приложение Windows Forms) развернуто в нескольких внутренних подсетях, и все работает хорошо, за исключением одного ПК (который принадлежит к определенной подсети — это единственный ПК, который использует это конкретное приложение). ). Этот компьютер сможет использовать службы только в том случае, если HttpClient настроен на использование TLS 1.1.

Поскольку мы используем внутренние сертификаты (у нас есть внутренний центр сертификации для нашей AD), я уже проверил, и сертификат с открытым ключом объекта уже присутствует в контейнере доверенных центров сертификации компьютера, где защищенный сеанс не может быть установлен через TLS 1.2.

ПК работает под управлением Windows 10 Pro (последняя версия), поэтому он должен поддерживать TLS 1.2. Я пытался эмулировать запросы от Fiddler, и правда в том, что я получу результаты только тогда, когда настройте для использования TLS 1.1.

Не устанавливая протокол TLS 1.1, я вижу, что Fiddler говорит, что рукопожатие не было установлено, и служба никогда не «выполняется».

Теперь, согласно тому, что я прочитал, у меня не должно было быть никаких проблем с кодом. На самом деле, мне не нужно указывать версию TLS (похоже, Windows 10 Pro имеет встроенную поддержку TLS 1.2, и это должно быть по умолчанию для WIndows 10. Поскольку я использую .NET 4.7.2, он должен автоматически использовать системный протокол по умолчанию), но правда в том, что только использование tls 1.1 (не tls 1.2!) позволяет установить безопасный канал.

Я пытался запустить код на других машинах, и все работает, как и ожидалось (я могу установить безопасный канал с помощью tls 1.1 или tls 1.2 или даже позволить ему использовать системный протокол по умолчанию).

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

Я имею в виду, похоже, что ПК распознает сертификат, используемый в сеансе HTTPS (если бы это было не так, я бы не смог использовать TLS 1.1, верно?), но похоже, что что-то мешает этому. не позволит мне использовать TLS 1.2...

Спасибо. Луис


person Luis Abreu    schedule 02.10.2018    source источник


Ответы (1)


Ознакомьтесь с нашим официальным руководством по TLS: https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls

Если это проблема одной машины, я бы рекомендовал создать простое приложение HelloWorld, выполняющее простой запрос, нацеленное на ту же .NET Framework (4.7.2), а затем протестировать его на конкретной машине по сравнению с другими машинами. Это точно скажет вам, связана ли проблема с вашим приложением или с настройками машины/сети.

person Karel Zikmund    schedule 08.10.2018
comment
Привет. Это происходит только на машинах, которые находятся в этой конкретной сети. Я просто не знаю, как лучше всего увидеть, что происходит (я думаю, что это может быть связано с брандмауэром, но не уверен, как это доказать)... - person Luis Abreu; 09.10.2018