
Estoy tratando de evitar el uso de una LD_PRELOAD
solución basada en -, y la documentación de haproxy parece implicar que es posible crear un archivo sslkeylog sin decir realmente cómo.
Sé que la información puede "ponerse a disposición" en cierto modo contune.ssl.keylogque tiene documentos que hablan sobre todos los ejemplos necesarios para un archivo de registro de teclas estándar ssl_fc_server_traffic_secret_0
como SERVER_TRAFFIC_SECRET_0
.
¿Pero entonces, qué? ¿Cómo configuro una salida de "registro" que colocará cada elemento en su propia línea en el formato correcto?
Respuesta1
Esta es la forma complicada e incómoda en la que descubrí cómo hacer esto. No es genial:
Crea un archivo lua sslkeylogger.lua
:
local function sslkeylog(txn)
local fields = {
CLIENT_EARLY_TRAFFIC_SECRET = function() return txn.f:ssl_fc_client_early_traffic_secret() end,
CLIENT_HANDSHAKE_TRAFFIC_SECRET = function() return txn.f:ssl_fc_client_handshake_traffic_secret() end,
SERVER_HANDSHAKE_TRAFFIC_SECRET = function() return txn.f:ssl_fc_server_handshake_traffic_secret() end,
CLIENT_TRAFFIC_SECRET_0 = function() return txn.f:ssl_fc_client_traffic_secret_0() end,
SERVER_TRAFFIC_SECRET_0 = function() return txn.f:ssl_fc_server_traffic_secret_0() end,
EXPORTER_SECRET = function() return txn.f:ssl_fc_exporter_secret() end,
EARLY_EXPORTER_SECRET = function() return txn.f:ssl_fc_early_exporter_secret() end
}
local client_random = txn.c:hex(txn.f:ssl_fc_client_random())
-- ensure that a key is written only once by using a session variable
if not txn:get_var('sess.sslkeylogdone') then
for fieldname, fetch in pairs(fields) do
if fetch() then
core.Warning(string.format('SSLKEYLOG:: %s %s %s\n', fieldname, client_random, fetch()))
end
end
txn:set_var('sess.sslkeylogdone', true)
end
end
core.register_action('sslkeylog', { 'http-req' }, sslkeylog)
Esto se modifica deel originallo cual no estoy seguro de que haya funcionado alguna vez. Registra todas las claves de sesión como advertencias, que deberían ir a los registros habituales de HAProxy.
En la configuración de HAProxy:
global
tune.ssl.keylog on
lua-load path/to/sslkeylogger.lua
frontend foobar
http-request lua.sslkeylog
Luego, deberá tomar los registros (si están en systemd journalctl -u haproxy
) y filtrar solo las líneas de registro relevantes, y eliminar cualquier marca de tiempo u otra información que preceda a EXPORTER_SECRET
etc. No puedo ser más específico porque depende de la configuración del registro. Después de hacer eso, tendrá un archivo que puede entregar a Wireshark en combinación con un volcado de paquetes para obtener los datos.