mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8222678: Improve TLS negotiation
Reviewed-by: mullan, rhalade, mschoene
This commit is contained in:
parent
cd020a13c9
commit
86be0cd272
5 changed files with 57 additions and 11 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -724,12 +724,14 @@ final class CertStatusExtension {
|
|||
// Update the context.
|
||||
chc.handshakeExtensions.put(
|
||||
SH_STATUS_REQUEST, CertStatusRequestSpec.DEFAULT);
|
||||
chc.handshakeConsumers.put(SSLHandshake.CERTIFICATE_STATUS.id,
|
||||
SSLHandshake.CERTIFICATE_STATUS);
|
||||
|
||||
// Since we've received a legitimate status_request in the
|
||||
// ServerHello, stapling is active if it's been enabled.
|
||||
chc.staplingActive = chc.sslContext.isStaplingEnabled(true);
|
||||
if (chc.staplingActive) {
|
||||
chc.handshakeConsumers.put(SSLHandshake.CERTIFICATE_STATUS.id,
|
||||
SSLHandshake.CERTIFICATE_STATUS);
|
||||
}
|
||||
|
||||
// No impact on session resumption.
|
||||
}
|
||||
|
@ -1079,12 +1081,16 @@ final class CertStatusExtension {
|
|||
// Update the context.
|
||||
chc.handshakeExtensions.put(
|
||||
SH_STATUS_REQUEST_V2, CertStatusRequestV2Spec.DEFAULT);
|
||||
chc.handshakeConsumers.put(SSLHandshake.CERTIFICATE_STATUS.id,
|
||||
SSLHandshake.CERTIFICATE_STATUS);
|
||||
|
||||
// Since we've received a legitimate status_request in the
|
||||
// ServerHello, stapling is active if it's been enabled.
|
||||
// ServerHello, stapling is active if it's been enabled. If it
|
||||
// is active, make sure we add the CertificateStatus message
|
||||
// consumer.
|
||||
chc.staplingActive = chc.sslContext.isStaplingEnabled(true);
|
||||
if (chc.staplingActive) {
|
||||
chc.handshakeConsumers.put(SSLHandshake.CERTIFICATE_STATUS.id,
|
||||
SSLHandshake.CERTIFICATE_STATUS);
|
||||
}
|
||||
|
||||
// No impact on session resumption.
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -330,6 +330,15 @@ final class CertificateRequest {
|
|||
// clean up this consumer
|
||||
chc.handshakeConsumers.remove(SSLHandshake.CERTIFICATE_REQUEST.id);
|
||||
|
||||
SSLConsumer certStatCons = chc.handshakeConsumers.remove(
|
||||
SSLHandshake.CERTIFICATE_STATUS.id);
|
||||
if (certStatCons != null) {
|
||||
// Stapling was active but no certificate status message
|
||||
// was sent. We need to run the absence handler which will
|
||||
// check the certificate chain.
|
||||
CertificateStatus.handshakeAbsence.absent(context, null);
|
||||
}
|
||||
|
||||
T10CertificateRequestMessage crm =
|
||||
new T10CertificateRequestMessage(chc, message);
|
||||
if (SSLLogger.isOn && SSLLogger.isOn("ssl,handshake")) {
|
||||
|
@ -647,6 +656,15 @@ final class CertificateRequest {
|
|||
// clean up this consumer
|
||||
chc.handshakeConsumers.remove(SSLHandshake.CERTIFICATE_REQUEST.id);
|
||||
|
||||
SSLConsumer certStatCons = chc.handshakeConsumers.remove(
|
||||
SSLHandshake.CERTIFICATE_STATUS.id);
|
||||
if (certStatCons != null) {
|
||||
// Stapling was active but no certificate status message
|
||||
// was sent. We need to run the absence handler which will
|
||||
// check the certificate chain.
|
||||
CertificateStatus.handshakeAbsence.absent(context, null);
|
||||
}
|
||||
|
||||
T12CertificateRequestMessage crm =
|
||||
new T12CertificateRequestMessage(chc, message);
|
||||
if (SSLLogger.isOn && SSLLogger.isOn("ssl,handshake")) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -287,12 +287,16 @@ final class CertificateStatus {
|
|||
}
|
||||
|
||||
// Pin the received responses to the SSLSessionImpl. It will
|
||||
// be retrieved by the X509TrustManagerImpl during the certficicate
|
||||
// be retrieved by the X509TrustManagerImpl during the certificate
|
||||
// checking phase.
|
||||
chc.handshakeSession.setStatusResponses(cst.encodedResponses);
|
||||
|
||||
// Now perform the check
|
||||
T12CertificateConsumer.checkServerCerts(chc, chc.deferredCerts);
|
||||
|
||||
// Update the handshake consumers to remove this message, indicating
|
||||
// that it has been processed.
|
||||
chc.handshakeConsumers.remove(SSLHandshake.CERTIFICATE_STATUS.id);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -133,6 +133,15 @@ final class ServerHelloDone {
|
|||
// The consuming happens in client side only.
|
||||
ClientHandshakeContext chc = (ClientHandshakeContext)context;
|
||||
|
||||
SSLConsumer certStatCons = chc.handshakeConsumers.remove(
|
||||
SSLHandshake.CERTIFICATE_STATUS.id);
|
||||
if (certStatCons != null) {
|
||||
// Stapling was active but no certificate status message
|
||||
// was sent. We need to run the absence handler which will
|
||||
// check the certificate chain.
|
||||
CertificateStatus.handshakeAbsence.absent(context, null);
|
||||
}
|
||||
|
||||
// clean up this consumer
|
||||
chc.handshakeConsumers.clear();
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -92,6 +92,15 @@ final class ServerKeyExchange {
|
|||
// clean up this consumer
|
||||
chc.handshakeConsumers.remove(SSLHandshake.SERVER_KEY_EXCHANGE.id);
|
||||
|
||||
SSLConsumer certStatCons = chc.handshakeConsumers.remove(
|
||||
SSLHandshake.CERTIFICATE_STATUS.id);
|
||||
if (certStatCons != null) {
|
||||
// Stapling was active but no certificate status message
|
||||
// was sent. We need to run the absence handler which will
|
||||
// check the certificate chain.
|
||||
CertificateStatus.handshakeAbsence.absent(context, null);
|
||||
}
|
||||
|
||||
SSLKeyExchange ke = SSLKeyExchange.valueOf(
|
||||
chc.negotiatedCipherSuite.keyExchange,
|
||||
chc.negotiatedProtocol);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue