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

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

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

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

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

либо:

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

или

  • Can кто-то посоветует альтернативный способ проверить, что отработал смену.

3 ответов


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

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

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


Если вы включите "подключение" в Саша, вы можете увидеть версию TLS/SSL в инспекторах - > TextView

Screen Capture of TLS Version 1.2 Connect to Google.com


чтобы включить подключение, перейдите в Rules в меню удалить проверка из "скрыть подключения"

turn on connects screenshot

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


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;

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

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

RFC объясняет это 3.3-TLS 1.2.

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

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