Force PresentationHost для использования TLS 1.2 - PullRequest
0 голосов
/ 17 октября 2018

Сервер отключил TLS 1.0 / 1.1.Клиент представляет собой приложение XBAP, работающее в Internet Explorer.Похоже, PresentationHost пытается установить соединение TLS 1.0, но не удается, потому что сервер отказывает в этом.Могу ли я каким-то образом заставить (например, программно или файл конфигурации) PresentationHost использовать TLS 1.2?Я знаю, что можно соответствующим образом настроить реестр клиента (установите SchUseStrongCrypto в 1), но я бы хотел, чтобы пользователь не настраивал что-либо.

Ответы [ 2 ]

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

В общем, я ожидал бы, что клиент будет согласовывать самый высокий уровень TLS, который поддерживается и включается.Поскольку ваше соединение не устанавливается после попытки использования только TLS 1.0, я подозреваю, что TLS1.1 и TLS1.2 могут не поддерживаться и не включаться на стороне клиента.

Приложения, созданные с использованием .Net 4.7, по умолчанию будут использовать SecurityProtocolType.SystemDefault, чтовыбирается операционной системой и может быть изменено через настройки реестра. SecurityProtocolType определяется как:

... перечисляемый тип для свойства SecurityProtocol.Используйте это перечисление для определения политики протокола безопасности транспорта при использовании HTTP-API в .NET Framework, таких как WebClient, HttpWebRequest, HttpClient и SmtpClient (при использовании TLS / SSL).

РанееВерсии фреймворка могут по умолчанию использовать определенный тип протокола независимо от того, какой установлен ОС по умолчанию.В большинстве случаев им все равно следует попробовать другие протоколы, если они включены.

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

Если целевая версия .Net и версии ОС обе поддерживают TLS1.2, то вам следуетбыть в состоянии заставить соединения ТОЛЬКО принимать TLS1.2, устанавливая тип протокола безопасности ServicePointManager.Чтобы ограничить его одним протоколом (например, TLS1.2), просто установите его перед веб-вызовом:

.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Вы можете OR протоколов вместе, так что вы можетевключите TLS 1.1 и 1.2, оставив уже включенные без изменений, выполнив что-то вроде этого:

System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

Если вы просто хотите отключить старый протокол, такой как TLS1.0, при разрешении другим(включая будущие выпуски), тогда вы можете сделать что-то вроде этого:

System.Net.ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Tls;

Настройка может быть выполнена на лету или может быть помещена в глобальную конфигурацию, такую ​​как Global.asax Application_Startесли хотите.

Документация для ServicePointManager.SecurityProtocol есть здесь .

Для полноты замечу, что если вы хотите использовать .Net4.0, вы все равно можете использовать вышеметоды указания TLS1.2, если вы просто устанавливаете .Net4.5 вместе с целевой версией.Это возможно даже с более старыми версиями фреймворка, если вы обновите пару DLL-файлов.Инструкции: здесь .

Стоит отметить, что существуют и другие способы, с помощью которых все это может завершиться неудачей, в зависимости от конфигурации сертификата, настроек реестра и установленных обновлений.

Я понимаю, что вы хотите держаться подальше от пользовательских настроек, но есть настройки браузера, которые также могут влиять на это поведение.См. Сообщение в блоге MSDN здесь , в котором рассматриваются настройки Firefox и IE.

На стороне клиента вы можете проверить это в настройках браузера.Если вы используете IE в любой из перечисленных выше поддерживаемых ОС Windows, перейдите в Сервис -> Свойства обозревателя -> Дополнительно .В разделе «Безопасность» вы увидите список протоколов SSL, поддерживаемых IE.IE поддерживает только те версии протокола безопасности, которые поддерживаются базовым компонентом SCHANNEL ОС.

РЕДАКТИРОВАТЬ:

Если приведенная выше информация недостаточно, чтобы исправить проблему, тогда пришло время запустить WireShark и посмотреть непосредственно на согласование TLS.Просто установите для фильтра захвата значение «SSL», выберите IP-адрес, который вы хотите отслеживать, и используйте раскрывающееся меню или сочетание клавиш Ctrl-Alt-Shift-S, чтобы следовать потоку SSL.Вы можете обнаружить, что проблема в конце концов на стороне сервера, или, возможно, вы увидите проблему с сертификатом с одной или другой стороны.

Это довольно быстро сделать, даже если вы обычно не используете WireShark, и существует множество доступных учебных пособий.Мне нравится один на сайте cisco здесь , который я кратко процитирую на случай, если ссылка исчезнет:

Следование потоку ssl даст вам четкую картину всегоTLS рукопожатие и обмен открытыми ключами, сертификат до обмена симметричным ключом, используемым для дальнейшего шифрования.

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

enter image description here

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

Кажется, что проблема с базовой версией IE.

Можете ли вы подтвердить user-agent?

А также выполнить testsl.sh.

Toс помощью инструмента перейдите к https://testssl.sh

...