我正在尝试诊断 Firefox (snap) 中的一些 TLS 错误/功能,特别是关于使用 HTTP/3 时的相互身份验证。让它打印一些有用的数据对我来说一直是一个挑战一些时间。我希望读取日志,其中 Firefox 确认它正在正确解析握手,并根据其证书存储中的选项决定要做什么。
Firefox 将如何生成相关日志?
尝试的步骤:
- 部分成功收集各种互联网发现变成一个巨大的环境变量:
MOZ_LOG="timestamp,pipnss:5,cert_storage::*:5,nsSocketTransport:5,nsHostResolver:5,nsHttp:5,neqo_http3::*:5,neqo_transport::*:5,pkix:5" /snap/bin/firefox >trace.log 2>&1
- 确实会产生一堆消息,具体来说,这些消息
pipnss
似乎高度相关,但没有一个涉及HTTP/3证书/pkix/验证/证书存储 - 也许我只是在这里漏掉了正确的(拼写正确吗?) C/Rust 组件名称?
- 在浏览器环境之外进行相同的操作,
tstclnt
而是使用:- 我的 Firefox 没有附带这样的二进制文件,安装 libnss3 会得到更旧的版本
- 使用预处理器魔法重新编译(
TRACING
,可能吗?):- 到目前为止还没有成功FTBFS 分布
答案1
有可能,部分成功问题中的错误已经是人们能获得的最大成功。至少我没有发现进一步的证据证明此错误表示缺少日志:
I/neqo_common::* [neqo_common::log] Logging initialization error SetLoggerError(())
也许这是一个错误,或者这条消息只是经过精心设计,以迷惑毫无戒心的潜在日志阅读者。无论哪种方式,这将使以下配置完全足以获取处理这些传输的 (Rust) 组件可能发出的所有消息:
about:logging?modules=timestamp,pipnss:5,cert_storage::*:5,nsSocketTransport:5,nsHostResolver:5,nsHttp:5,neqo_http3::*:5,neqo_transport::*:5,pkix:5
使用此 URL 甚至比环境变量更好,因为它mozilla.com
从日志文件开始就省略了所有不需要的连接。
我开始怀疑我正在寻找的日志会在那里SSLGetClientAuthDataHook
并且如果仅相关 rust 组件需要设置它,则进行标记。我可能看不到这些日志行,因为我想要日志的内容根本不是该协议所调用的……
生成日志的另一种方法是打开https://profiler.firefox.com
该网站以使用特殊权限添加分析器按钮,按下该按钮,加载页面几次,再次按下按钮。这将打开一个新选项卡,其中可以显示样品使用时匹配函数名称中的逗号分隔关键字父进程 > 套接字线程 > 调用树 > * > 过滤器堆栈:neqo、nss- 不幸的是,即使采样间隔最小为 0.01ms,在速度相当快的机器上,每个请求也只能快照 0-1 个相关函数调用,从而产生相当不连续和不完整的图像。