Доступ к контексту SSL в соединении faye-websocket + eventmachine - PullRequest
0 голосов
/ 14 января 2019

Я хотел бы получить дамп безопасного соединения через веб-сокет, где я являюсь клиентом.

Я использую гем faye-websocket в ruby ​​для подключения к безопасному сервису websocket. Это хорошо работает. Чтобы понять конкретную проблему, мне нужно получить дамп сообщения. Я обычно использую wireshark для этого (работает на той же машине, что и клиент). Чтобы расшифровать соединение SSL, мне нужно извлечь главный ключ, чтобы передать его Wireshark. Я знаю, как извлечь главный ключ, если у меня есть прямой доступ к сокету, но мне не удается получить к нему доступ при использовании гема faye-websocket.

Код для запуска faye-websocket довольно стандартный:

EM.run {
     ws = Faye::WebSocket::Client.new('wss://...')

ws.on :open do |event|
    p [:open]
    ### authentication
end

ws.on :message do |event|
    p [:message, event.data]
    ### message - response loop here
end

ws.on :close do |event|
    p [:close, event.code, event.reason]
    ws = nil
end
}

Проверяя содержимое ws, он имеет член @socket, но мне не удается его получить (get_instance_var возвращает nil).

Для записи, как только у меня будет SSLcontext, я буду использовать код из https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/how-to-decrypt-ruby-ssl-communications-with-wireshark/ чтобы извлечь мастер-ключ и передать его Wireshark:

ssl_socket.session.to_text.each_line do |line|
  if match = line.match(/Session-ID\s*: (?<session_id>.*)/)
    session_id = match[:session_id]
  end
  if match = line.match(/Master-Key\s*: (?<master_key>.*)/)
    master_key = match[:master_key]
  end
end

Есть ли у кого-нибудь решение для доступа к базовому сокету и контексту SSL?

...