
Estou tentando evitar o uso de uma LD_PRELOAD
solução baseada em -, e a documentação do haproxy parece sugerir que é possível criar um arquivo sslkeylog sem realmente dizer como.
Eu sei que a informação pode ser “disponibilizada” comtune.ssl.keylogque contém documentos que falam sobre todos os exemplos necessários para um arquivo de keylog padrão como ssl_fc_server_traffic_secret_0
for SERVER_TRAFFIC_SECRET_0
.
Mas então o que? Como configuro uma saída de “log” que colocará cada coisa em sua própria linha no formato correto?
Responder1
Esta é a maneira hackeada e estranha com que descobri como fazer isso. Não é ótimo:
Crie um arquivo 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)
Isto é modificado deo originalque não tenho certeza se funcionou. Ele registra todas as chaves de sessão como avisos, que devem ir para os logs normais do HAProxy.
Na configuração do HAProxy:
global
tune.ssl.keylog on
lua-load path/to/sslkeylogger.lua
frontend foobar
http-request lua.sslkeylog
Em seguida, você precisará capturar os logs (se estiverem no systemd journalctl -u haproxy
) e filtrar apenas as linhas de log relevantes e remover quaisquer carimbos de data e hora ou outras informações anteriores a EXPORTER_SECRET
e tal. Não posso ser mais específico porque depende da configuração do log. Depois de fazer isso, você terá um arquivo que poderá fornecer ao wireshark em combinação com um despejo de pacotes para obter os dados.