Версия TLS: HttpClient работает, только если для политики безопасности установлено значение tls 1.1. - PullRequest
0 голосов
/ 02 октября 2018

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

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

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

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

Без установки протокола на TLS 1.1,Я вижу, что Фиддлер говорит, что рукопожатие не установлено, и служба никогда не "выполняется".

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

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

1 Ответ

0 голосов
/ 09 октября 2018

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

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

...