Hi Xuelei, thanks for the comments.  Keep 'em coming!

On 06/22/2015 08:26 PM, Xuelei Fan wrote:
src/java.base/share/classes/sun/security/ssl/HandshakeStateManager.java
=======================================================================
Thanks for the correction of typos, etc.

line 777-797.
Mayber, we can use the "default" block at line 857, and may not need the
block from line 777 to 797.  What do you think?
I think that would work. I'll remove the cert status case and see what happens.

src/java.base/share/classes/sun/security/ssl/ClientHandshaker.java
==================================================================
-  private final boolean enableStatusRequestExtension =
+  private final static boolean enableStatusRequestExtension =
May not want to support dynamic system property.
Actually I did want it to take that value of the property at instantiation time so people could selectively turn it on and off before creating sockets/engines. What concerns do you have about it being dynamic?

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

- private byte setCertValidationFailure(CertificateException cexc)
+ private byte getCerticateAlert(CertificateException cexc)
Looks more like a getter method than a setter method.
I guess it's a little of both. But I have no problem with changing the name.

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

- private void checkServerCerts(X509Certificate[] certs)
-        throws CertificateException {
+ private void checkServerCerts(X509Certificate[] certs)
+        throws IOException {

The caller is always handle the thrown exception with the same code:

    try {
        checkServerCerts(deferredCerts);
    } catch (CertificateException e) {
        // This will throw an exception, so include the
        // original error.
        fatalSE(setCertValidationFailure(e), e);
    }

What do you think if moving the code into checkServerCerts() and
throwing IOException?
That would be fine. At the time I wrote it, I wasn't sure if I'd be doing the same thing as a consequence of checkServerCerts throwing a CPVE. But it turned out to be the same in all cases and I never went back to clean that up. Good catch. I'll get this fixed up.

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

   if (staplingActive && ignoredOptStates.contains(
       ...
   }

The same code block is used in several places in processMessage().  I
understand the point.  However, this code block need to be inserted into
every message of the server hello series messages, or need careful
analysis of the message sequence.  As may not quite friendly for
maintaining.

What do you think if moving the block to the header of processMessage()?

void processMessage(byte type, int messageLen) throws IOException {
    // check the handshake state
    List<Byte> ignoredOptStates = handshakeState.check(type);
+  if (staplingActive && ignoredOptStates.contains(
+     ...
+  }
I know. I didn't like the duplication either, but I wasn't sure if I could just call it at the top safely so I instead moved it into each state transition from Server Certificate. If we can do it once at the top like I did in the pre-DTLS code, then that's by far the better way to go. I'll try that out.
---------------------------

  753  // Only enable the stapling feature if the client asserted
  754  // these extensions.
  755  if (enableStatusRequestExtension) {
  756      staplingActive = true;
+     } else {
+         fatalSE(Alerts.alert_unexpected_message, "...");
  757  }

Maybe, better to terminate the connection with a fatal
unexpected_message if the extension is not requested.
Yes, I think you're right.  I'll fix this up too.

Xuelei


On 6/19/2015 8:27 AM, Jamil Nimeh wrote:
Hello all,

I have a first cut at the OCSP stapling webrev posted for your review:

JEP: https://bugs.openjdk.java.net/browse/JDK-8046321
Webrev: http://cr.openjdk.java.net/~jnimeh/reviews/8046321/webrev.0/

A couple items to note:

   * I'm in the process of updating the JEP with some more details.  I
     should be done with these changes by tonight (PDT).
   * Missing are some of the TLS end-to-end tests.  These tests have been
     coded and run outside the jtreg framework, but for some reason
     things hang in jtreg.  I've included some of the supporting classes
     that these tests will use (CertificateBuilder.java and
     SimpleOCSPResponder.java) so folks could review those if they're
     interested.  I will update the webrev and notify the list as soon as
     I've got the tests working in jtreg.

Thanks to everyone who has helped along the way.

--Jamil



Reply via email to