On Tue, 12 Nov 2024 11:49:25 GMT, Sean Coffey <coff...@openjdk.org> 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 incrementally with one additional 
> commit since the last revision:
> 
>   keep expand option and add test coverage

More comments.  I will have to look over the `SSLLogger` changes with fresher 
eyes tomorrow.  I had some great comments for you, but then I realized I 
misread something.   :) 

When walking through the `SSLLogger.isOn()` calls, I noticed some 
inconsistencies that aren't your fault, but should probably be addressed while 
we're down here.  The important ones are noted below.  

That said, thoughout the existing code, I question whether the categorical 
assignments are correct.  It would be a good idea to have "someone" in dev have 
a look and see if all these assignments are correctly defined.  For example, 
what does `slctx` have to do with `PredefinedDHParameterSpecs.java`.  Should 
session messages that are generated during handshaking be marked as `handshake` 
or `session`?  And are we consistently `verbose`ing?  Should so many of these 
be just `ssl`?  I filed JDK-8344158 to track.

`DTLSInputRecord.java`: shouldn't there be a `ssl,record` for 837/861/897?

`SSLContextImpl.java`:  387/396, should these `handshake` instead of `sslctx`, 
or should verbose be removed?

`SSLEngineImpl.java`:  336/618, should this be a `record` instead of `verbose`?

`SSLTransport.java`:  same as `SSLEngineImpl.java` above?  `ssl,verbose` isn't 
right. 

`SSLExtensions.java`:  146/et.al., should this all be `verbose`?  This would 
match what was done in some of the other code.

I noticed a lot of new <=80 char lines in many files.  I started calling them 
out, but stopped.   I'd really like to keep the code readable when viewing 
side-by-side diffs (e.g. github) without having to horizontal scroll, please!  
Thanks.

For the CSR (JDK-8330987):

...per documentation in help output menu.
->
...per documentation in help output menu and the JSSE Reference Guide.

...for a standard client TLS connection.
->
...for a standard TLS connection.

You would be in a better position to advise about backport impacts, but it 
would be nice to fix for everyone.

If you decide to update the wording for things like  `expand` , be sure to 
update here also.

src/java.base/share/classes/sun/security/ssl/DTLSInputRecord.java line 1075:

> 1073:                 if (!isDesired) {
> 1074:                     // Too old to use, discard this retransmitted record
> 1075:                     if (SSLLogger.isOn && 
> SSLLogger.isOn("ssl,handshake,verbose")) {

<=80 chars, please.  Noticed this in several files/places.

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

> 88:                             && property.length() == 10
> 89:                             && 
> !Character.isLetterOrDigit(property.charAt(3))
> 90:                             && property.endsWith("expand"));

I believe this is not needed, and the code can be simplified using the same 
style as I remember from the earlier stack.  I'll look at this tomorrow.

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

> 101:         System.err.println("\tdefaultctx   print default SSL 
> initialization");
> 102:         System.err.println("\tsslctx       print SSLContext tracing");
> 103:         System.err.println("\tsessioncache print session cache tracing");

Did the `sessioncache` category also get pulled?  It used to be used whenever 
we added/retrieved/deleted(expired) a `SSLSession` to/from the cache.  (i.e. 
when a handshake completed, or we are handshaking and we retrieved a session 
from the cache to potentially resume.)

I don't see any usages of it now.  If so, this is a defect and needs a bug to 
track.

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

Changes requested by wetmore (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/18764#pullrequestreview-2434697986
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r1841442130
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r1841353663
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r1841367363

Reply via email to