On 6/3/2019 5:42 PM, Anthony Scarpino wrote:
http://cr.openjdk.java.net/~ascarpino/stateless/webrev.02
----------
381 if (chc.localSupportedSignAlgs == null) {
382 chc.localSupportedSignAlgs =
383 SignatureScheme.getSupportedAlgorithms(
384 chc.algorithmConstraints,
chc.activeProtocols);
385 }
386
387 // Make sure the list of supported signature
algorithms matches
388 Collection<SignatureScheme> sessionSigAlgs =
389 chc.resumingSession.getLocalSupportedSignatureSchemes();
390 if
(!chc.localSupportedSignAlgs.containsAll(sessionSigAlgs)) {
391 if (SSLLogger.isOn &&
SSLLogger.isOn("ssl,handshake")) {
392 SSLLogger.fine("Existing session uses
different " +
393 "signature algorithms");
394 }
395 return null;
396 }
I did not get the idea here. Does the session signature algorithms
impact the use of session ticket extension?
This was something I got from the 1.3 CHPreSharedKeyProducer.produce().
I can remove it, should I remove it from PSK as well?
I did not get the idea of the similar code in
CHPreSharedKeyProducer.produce() either. I'm fine if you want to remove
the block as well.
----------
426 // If no buffer or we are already using stateless
resumption
427 if (buffer == null || shc.statelessResumption) {
428 return;
429 }
I did not follow the idea of the checking. I think the buffer should
never be null. For the 'shc.statelessResumption', as this method is to
parse the session ticket in the ClientHello handshake message, there
might be no chance to set the shc.statelessResumption yet for initial
handshaking.
The ST extension runs twice. The CH consumer has resumption checking
before the extensions are consumed normally from getEnabledExtensions().
I wasn't able figure out how to remove ST from the consumption list,
so I used shc.statelessResumption. If shc.statelessResumption is set,
it skips the consumption. Because I already have the boolean, I used it
for this purpose.
I see where you were from now.
It is similar to provider_versions extension in ClientHello. Maybe, you
can use a similar block (at line 1077-1078?) as the one in
ClientHello.java, by exclude the ST extension for TLS 1.2:
1166 extTypes = shc.sslConfig.getExclusiveExtensions(
1167 SSLHandshake.CLIENT_HELLO,
1168 Arrays.asList(
1169 SSLExtension.PSK_KEY_EXCHANGE_MODES,
1170 SSLExtension.CH_PRE_SHARED_KEY,
1171 SSLExtension.CH_SUPPORTED_VERSIONS));
1172 clientHello.extensions.consumeOnLoad(shc, extTypes);
----------
509 // Skip if extension is not provided
510 if (!hc.sslConfig.isAvailable(SH_SESSION_TICKET)) {
511 return;
512 }
If the extension is not provided, but receive the NST handshake
message from server, is it expected to terminate the connection with
an unexpected_message" alert?
if shc.statelessResumption is false NST is not added as a consumer.
shc.statelessResumption is true when both sides sent their ST in the CH
& SH.
So, do you mean will the return value of
"hc.sslConfig.isAvailable(SH_SESSION_TICKET)" is always 'true'? If this
code block (510-512) is just for assurance, as if it is checked here, I
may just send back an alert. Silently dispose the extension does not
sound like a good logic here, although it should never happens as you
have already checked everything.
----------
514 // If the context does not allow stateless tickets,
exit
515 if (!((SSLSessionContextImpl)hc.sslContext.
516 engineGetClientSessionContext()).statelessEnabled()) {
517 return;
518 }
Similar to above comment.
----------
What's client behavior if the server response with ST in ServerHello,
but does not send the NewSessionTicket handshake message?
Then no ticket is stored and the next session is a full handshake.
Did we need the HandshakeAbsence handler for NewSessionTicket
handshake message?
I don't believe so.
If I read correctly, the NewSessionTicket is not an optional handshake
message. If the server sent the ST extension in ServerHello, the
NewSessionTicket must be present.
Besides the NewSessionTicket handshake message, there are also some
other server behavior changes. For example, the server may use empty
session ID in the SH message. These changes may lead to issues we are
not aware of yet. For safe, I would suggest to make sure the
NewSessionTicket is present as if ST is present in SH.
Xuelei