Версия 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...
Благодарю. Луис
1 ответ
Ознакомьтесь с нашим официальным руководством для TLS: https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls
Если это проблема с одним компьютером, я бы порекомендовал создать простое приложение HelloWorld с простым запросом, ориентированным на ту же платформу.NET Framework (4.7.2), а затем протестировать его на конкретном компьютере в сравнении с другими компьютерами. Это точно скажет вам, если проблема в вашем приложении или в настройках машины / сети.