2015-12-14 8 views
16

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

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

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

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

Либо:

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

Или

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

ответ

7

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

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

См. this blog post или this one для приведенных примеров.

+0

Спасибо, это был, в конечном счете, самый быстрый способ получить подтверждение, в котором я нуждался. – Brondahl

6

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

This KB describes how to turn on System.Net tracing.

This blog post shows a full HTTPS request in System.Net tracing.

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

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 и explains that ClientHello is the first message expected and states its format:

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; 

This SO answer explains что запись начинается с 0x16 в качестве маркера типа, а затем версии протокола.

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

The RFC explains, что 3.3 является TLS 1.2.

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

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

8

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

Screen Capture of TLS Version 1.2 Connect to Google.com

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

Ориентир: Viewing HTTPS Handshakes in Fiddler