Я хотел бы получить дамп безопасного соединения через веб-сокет, где я являюсь клиентом.
Я использую гем 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?