当从 Powershell 运行 curl 时,我尝试捕获用于 TLS 加密的主密钥,但日志文件始终为空。
我已经下载了curl并且在我的个人资料上创建了一个别名:
> set-alias curl d:\...\bin\curl.exe
当我检查版本时,似乎 Powershell 正在使用正确的版本:
> curl --version
curl 8.11.1 (x86_64-w64-mingw32) libcurl/8.11.1 LibreSSL/4.0.0 zlib/1.3.1 brotli/1.1.0 zstd/1.5.6 WinIDN libpsl/0.21.5 libssh2/1.11.1 nghttp2/1.64.0 ngtcp2/1.10.0 nghttp3/1.7.0
Release-Date: 2024-12-11
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp ws wss
Features: alt-svc AsynchDNS brotli CAcert HSTS HTTP2 HTTP3 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM PSL SPNEGO SSL SSPI threadsafe UnixSockets zstd
但是,我无法获取填充的主密钥文件:
> pwsh -command {$env:SSLKEYLOGFILE='sslkey.log'; curl -s "https://somesite.org"}
> cat sslkey.log
> ls
Directory: C:\Users\luisabreu\tests
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 1/20/2025 11:33 AM 0 sslkey.log
文件已创建,但始终为空。
我错过了什么?
由于您使用的是 LibreSSL(如 curl 版本输出中所示),这可能是问题的根本原因。LibreSSL 不像 OpenSSL 那样支持 SSLKEYLOGFILE。
因此要解决这个问题:
首先,您需要获取使用 OpenSSL 而不是 LibreSSL 的 curl 构建。您可以查看官方 curl 下载或使用 Chocolatey 或 Scoop 等提供基于 OpenSSL 构建的包管理器。
获得正确的构建后,请尝试在运行 curl 之前设置环境变量。在 PowerShell 中,您可以用一行代码完成此操作:
如果您需要坚持使用当前设置,请采用以下替代方法: