限制java ssl调试日志记录


94

使用JVM标志

-Djavax.net.debug=ssl

正在产生大量的日志记录,即服务器上每个SSL事件的详细信息。无论如何,只有日志错误吗?或者这些标记中有一些更好的子集可以产生更整洁的输出

all            turn on all debugging
ssl            turn on ssl debugging

The following can be used with ssl:

    record       enable per-record tracing
    handshake    print each handshake message
    keygen       print key generation data
    session      print session activity
    defaultctx   print default SSL initialization
    sslctx       print SSLContext tracing
    sessioncache print session cache tracing
    keymanager   print key manager tracing
    trustmanager print trust manager tracing
    pluggability print pluggability tracing

    handshake debugging can be widened with:
    data         hex dump of each handshake message
    verbose      verbose handshake message printing

    record debugging can be widened with:
    plaintext    hex dump of record plaintext
    packet       print raw SSL/TLS packets

3
我相信您可以通过例外方式免费获得错误。无需采取特殊措施。
jww 2014年

这专门用于调试。因此,大量的日志。
javajavajava 2015年

1
将其设置为""似乎仅显示一些警告。
NateS

Answers:


85

使用附加ssl标志的格式ssl:[flag]例如:

-Djavax.net.debug=ssl:record-Djavax.net.debug=ssl:handshake


2
这是一个极受好评的答案,但这真的对人们有用吗?似乎不适合我。还有一个错误条目,表明这些选项实际上不起作用。
eis

1
@eis是的,它对我有用。也许您没有正确设置它,如果可以,则应该明确地提出一个新问题,以便我们为您提供帮助:)
Alfabravo

@Alfabravo,所以您说的是错误条目无效,并且这些功能按预期工作吗?
eis

1
好吧,它来自2014年,jdk7和openjdk。此外,有人在这里评论说调试日志记录得到了改进,因此
Alfabravo

14

我还发现使用-Djavax.net.debug=ssl(或什至是它的过滤器)对于调试HTTPS问题太麻烦了。

它涉及到一点点,但是我更喜欢做的是在某处便宜的服务器上安装mitmproxy,然后配置我的Java客户端以通过它进行代理。这样,我可以轻松地检查和重播代理上的HTTPS请求/响应流,而不必梳理一堆日志。

如果您有兴趣,我已撰写了有关如何进行此操作的指南:使用mitmproxy在Java中调试SSL


我认为您的方法对于调试TLS会话中发生的流量并具有其上的每个细节并能够对其进行修改非常有用,但是在调查TLS会话本身级别上发生的问题时,它的意义要小得多。您的代理将更改并隐藏该级别最初发生的情况。
jmd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.