Подтвердить что ты не робот

Как проверить, какая версия TLS использует мой .Net-клиент

Я поддерживаю .NET-сайт, который (среди многих, MANY, other things) говорит с удаленными API-интерфейсами от систем поставщиков.

Мы хотим обновить поддержку TLS 1.2 Мы надеемся сделать это по этому вопросу: Есть ли .NET-версия TLS 1.2?

Но как я могу проверить, что это действительно работает после того, как я внес изменения.

В идеале один из моих сайтов-поставщиков начнет использовать TLS 1.2 ТОЛЬКО, и тогда мой тест может быть просто "можем ли мы поговорить с этим поставщиком сейчас?" Но у нас этого нет. Я предполагаю, что я могу что-то сделать с пакетом сниффера, но я не знаю, что именно искал, и как настроить сниффер для сбора необходимых данных в читаемом виде.

Или:

  • Может ли кто-нибудь указать мне в сторону подробного руководства по сбору этих данных в Fiddler/WireShark

или

  • Может ли кто-нибудь посоветовать альтернативный способ проверить, что изменение сработало.
4b9b3361

Ответ 1

Если вы закроете создание соединения в Wireshark и изучите первый пакет у клиента, Wireshark аннотирует поля в структуре ClientHello для вас, включая версию TLS, запрошенную клиентом.

Аналогично, если вы посмотрите на первый пакет ответов с сервера, Wireshark аннотирует поля в структуре ServerHello для вас, включая версию TLS, установленную для соединения.

Смотрите этот пост в блоге или этот для работы примеры.

Ответ 2

Если вы включите CONNECTS в Fiddler, вы увидите версию TLS/SSL в Инспекторах → TextView

Screen Capture of TLS Version 1.2 Connect to Google.com


Чтобы включить Connects, перейдите к Rules в строке меню и снимите отметку с "Скрыть CONNECTs"

turn on connects screenshot

Примечание. Дешифрование трафика HTTP должно быть отключено

.disable decrypt https traffic options screenshot

Ссылка: Просмотр рукопожатий HTTPS в Fiddler

Ответ 3

В Fiddler > Инструменты > Параметры > HTTPS есть редактируемый "протокол", который контролирует, какие SSL-протоколы принимает Fiddler.

введите описание изображения здесь

Если TLS 1.2 - единственное, что присутствует, тогда ваш тест станет мертвым: перейдите на сайт.

Если ваше приложение правильно использует TLS 1.2, оно будет загружено. Если это не так, оно не будет загружено.

Я использовал этот трюк в прошлом, чтобы проверить, действительно ли работает обновление TLS 1.2.

Ответ 4

Трассировка System.Net содержит достаточно подробностей, чтобы проверить это, хотя оно не очень доступно.

Этот КБ описывает, как включить трассировку System.Net.

Это сообщение в блоге показывает полный запрос HTTPS в трассировке System.Net.

Байты, отправленные по каналу, регистрируются, а в примере, указанном в этом сообщении в блоге, начинается поток клиентов:

System.Net.Sockets Verbose: 0 : [3848] Data from Socket#48285313::Send
System.Net.Sockets Verbose: 0 : [3848] 00000000 : 16 03 00 00 41 01 00 00-3D 03 00 43 26 02 90 83 : ....A...=..C&...

RFC5246 описывает TLS 1.2 и объясняет, что ClientHello является первым ожидаемым сообщением и указывает его формат:

  struct {
      ProtocolVersion client_version;
      Random random;
      SessionID session_id;
      CipherSuite cipher_suites<2..2^16-2>;
      CompressionMethod compression_methods<1..2^8-1>;
      select (extensions_present) {
          case false:
              struct {};
          case true:
              Extension extensions<0..2^16-1>;
      };
  } ClientHello;

Этот ответ SO объясняет, что запись начинается с 0x16 в качестве маркера типа, а затем версии протокола.

Сеанс, показанный выше, имеет версию 3.0, что означает SSL 3.0.

RFC объясняет, что 3.3 является TLS 1.2.

Поэтому, если ваши данные клиента начинаются с " 16 03 03 ", ваш клиент пытается согласовать TLS 1.2.

Возможно, вам потребуется изучить ServerHello, чтобы установить, какая версия была фактически использована.