On Wed, 27 Aug 2025 10:25:29 GMT, Sean Coffey <[email protected]> wrote:

>> The `javax.net.debug` TLS debug option is buggy since TLSv1.3 implementation 
>> was introduced many years ago.
>> 
>> Where "ssl" was previously a value to obtain all TLS debug traces (except 
>> network type dumps, verbose data), it now prints only a few lines for a 
>> standard client TLS connection. 
>> 
>> The property parsing was also lax and allowed users to declare verbose 
>> logging options by themselves where the documentation stated that such 
>> verbose options were only meant to be used in conjunction with other TLS 
>> options :
>> 
>> 
>>         System.err.println("help           print the help messages");
>>         System.err.println("expand         expand debugging information");
>>         System.err.println();
>>         System.err.println("all            turn on all debugging");
>>         System.err.println("ssl            turn on ssl debugging");
>>         System.err.println();
>>         System.err.println("The following can be used with ssl:");
>>         System.err.println("\trecord       enable per-record tracing");
>>         System.err.println("\thandshake    print each handshake message");
>>         System.err.println("\tkeygen       print key generation data");
>>         System.err.println("\tsession      print session activity");
>>         System.err.println("\tdefaultctx   print default SSL 
>> initialization");
>>         System.err.println("\tsslctx       print SSLContext tracing");
>>         System.err.println("\tsessioncache print session cache tracing");
>>         System.err.println("\tkeymanager   print key manager tracing");
>>         System.err.println("\ttrustmanager print trust manager tracing");
>>         System.err.println("\tpluggability print pluggability tracing");
>>         System.err.println();
>>         System.err.println("\thandshake debugging can be widened with:");
>>         System.err.println("\tdata         hex dump of each handshake 
>> message");
>>         System.err.println("\tverbose      verbose handshake message 
>> printing");
>>         System.err.println();
>>         System.err.println("\trecord debugging can be widened with:");
>>         System.err.println("\tplaintext    hex dump of record plaintext");
>>         System.err.println("\tpacket       print raw SSL/TLS packets");
>> 
>> 
>> as part of this patch, I've also moved the log call to the more performant 
>> friendly 
>> `System.Logger#log(java.lang.System.Logger.Level,java.util.function.Supplier)`
>>  method. 
>> 
>> the output has changed slightly with respect to that  - less verbose
>> 
>> e.g. old...
>
> Sean Coffey has updated the pull request with a new target base due to a 
> merge or a rebase. The pull request now contains 35 commits:
> 
>  - Merge branch 'master' into 8044609-ssl
>  - 1 file omitted during merge
>  - Merge branch 'master' into 8044609-ssl
>  - Merge branch 'master' into 8044609-ssl
>  - Merge branch 'master' into 8044609-ssl
>  - remove whitespace
>  - erroneous edit to test file
>  - remove legacy test and minor fix ups
>  - Merge branch 'master' into 8044609-ssl
>  - enums refactoring and line width correction
>  - ... and 25 more: https://git.openjdk.org/jdk/compare/2b44ed70...71aa0211

Initial comments for current SSLLogger.  

Continuing next week.

src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 114:

> 112:                     // enable all subcomponents. "ssl" logs all activity
> 113:                     // except for the "data" and "packet" categories
> 114:                     if (Opt.SSL.on && !Opt.isAnySubComponentEnabled()) {

`isAnySubComponentEnabled()` and `enableAllSubComponents()` both call 
`subCompoenentList()`, so if isAnySC is false, then the list of subcomponents 
will be generated twice back-to-back.  Since these methods are not used 
anywhere else, maybe do a single call instead:

    if (Opt.SSL.on) {
        ifSSLOnlyEnableAllSubcompoenents()  // needs a better name!  
    }

src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 166:

> 164:             } else {
> 165:                 try {
> 166:                      logger.log(level, () -> msg + ":\n" + 
> SSLSimpleFormatter.formatParameters(params));

Can I trouble you to shorten this line to <=80?  

It makes side/side comparisons and printing so much easier on the wrists and 
eyes. 

Would you mind also shortening lines 324-25?  

Thanks. 

 e.g. 
[SSLLogger-longlines.txt](https://github.com/user-attachments/files/22055476/SSLLogger-longlines.txt)

src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 198:

> 196:         System.err.println("all            turn on all debugging");
> 197:         System.err.println("ssl            turn on ssl debugging");
> 198:         System.err.println();

The ordering of the options seem random.  Might suggest either alphabetical or 
by functional area (e.g. key/trustmanager together)

src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 199:

> 197:         System.err.println("ssl            turn on ssl debugging");
> 198:         System.err.println();
> 199:         System.err.println("The following can be used with ssl:");

Maybe `...to select/filter specific types of output...` or something to 
indicate that it's a narrowing/filtering operation.   ;)

src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 203:

> 201:         System.err.println("\thandshake    print each handshake 
> message");
> 202:         System.err.println("\tkeymanager   print key manager tracing");
> 203:         System.err.println("\trecord       enable per-record tracing");

What would you think of listing/indenting the suboptions here instead of down 
below?  e.g. 

    record             enable per-record tracing
        plaintext         hex dump of record plaintext  (widens record)
        packet            print raw SSL/TLS packets (widens record)

same with `verbose`

src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 206:

> 204:         System.err.println("\trespmgr      print OCSP response tracing");
> 205:         System.err.println("\tsession      print session activity");
> 206:         System.err.println("\tdefaultctx   print default SSL 
> initialization");

`defaultctx` listed twice

src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 208:

> 206:         System.err.println("\tdefaultctx   print default SSL 
> initialization");
> 207:         System.err.println("\tsslctx       print SSLContext tracing");
> 208:         System.err.println("\tsessioncache print session cache tracing");

Missing `sessioncache` in the enum.  In a previous discussion, you said you 
would be filing a separate bug to fix this?  Maybe add it now to the enum, and 
we can figure the call sites later.

src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 209:

> 207:         System.err.println("\tsslctx       print SSLContext tracing");
> 208:         System.err.println("\tsessioncache print session cache tracing");
> 209:         System.err.println("\tkeymanager   print key manager tracing");

`keymanager` listed twice

src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 211:

> 209:         System.err.println("\tkeymanager   print key manager tracing");
> 210:         System.err.println("\ttrustmanager print trust manager tracing");
> 211:         System.err.println("\tpluggability print pluggability tracing");

Remove `pluggability`.  I think this was removed once already, but found it's 
way back.

src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 223:

> 221:     }
> 222: 
> 223:     public enum Opt {

A quick comment about the enum's purpose might be appreciated by someone new.  
"list of options, whether they are active..."

src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 242:

> 240: 
> 241:         Opt() {
> 242:             this.component = this.toString().toLowerCase(Locale.ROOT);

Why `Locale.ROOT` instead of `Locale.English` throughout the rest of the class?

-------------

PR Review: https://git.openjdk.org/jdk/pull/18764#pullrequestreview-3170762803
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2311743949
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2311700232
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2311720446
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2311720377
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2311719679
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2311710549
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2311713541
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2311715372
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2311713610
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2311725748
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2311735622

Reply via email to