src/java.base/share/classes/sun/security/ssl/ServerHandshaker.java
Print this page
rev 10851 : Implement TLS_FALLBACK_SCSV
*** 340,349 ****
--- 340,359 ----
state != HandshakeMessage.ht_hello_request) {
fatalSE(Alerts.alert_handshake_failure,
"Client initiated renegotiation is not allowed");
}
+ CipherSuiteList cipherSuites = mesg.getCipherSuites();
+ if (cipherSuites.contains(CipherSuite.C_FALLBACK_SCSV)
+ && mesg.protocolVersion.compareTo(getActiveProtocols().max) < 0) {
+ // Some clients expect a response with the version they
+ // requested.
+ setVersion(mesg.protocolVersion);
+ fatalSE(Alerts.alert_inappropriate_fallback,
+ "Client protocol downgrade is not allowed");
+ }
+
// check the server name indication if required
ServerNameExtension clientHelloSNIExt = (ServerNameExtension)
mesg.extensions.get(ExtensionType.EXT_SERVER_NAME);
if (!sniMatchers.isEmpty()) {
// we do not reject client without SNI extension
*** 356,366 ****
// Does the message include security renegotiation indication?
boolean renegotiationIndicated = false;
// check the TLS_EMPTY_RENEGOTIATION_INFO_SCSV
- CipherSuiteList cipherSuites = mesg.getCipherSuites();
if (cipherSuites.contains(CipherSuite.C_SCSV)) {
renegotiationIndicated = true;
if (isInitialHandshake) {
secureRenegotiation = true;
} else {
--- 366,375 ----