diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 4a2d1659800..11df1ffb8b8 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -671,6 +671,8 @@ Release 2.6.0 - UNRELEASED HADOOP-11217. Disable SSLv3 in KMS. (Robert Kanter via kasha) + HADOOP-11243. SSLFactory shouldn't allow SSLv3. (Wei Yan via kasha) + Release 2.5.1 - 2014-09-05 INCOMPATIBLE CHANGES diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/ssl/SSLFactory.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/ssl/SSLFactory.java index 404b00739ac..bbea33b7a09 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/ssl/SSLFactory.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/ssl/SSLFactory.java @@ -66,6 +66,10 @@ public static enum Mode { CLIENT, SERVER } public static final String KEYSTORES_FACTORY_CLASS_KEY = "hadoop.ssl.keystores.factory.class"; + public static final String SSL_ENABLED_PROTOCOLS = + "hadoop.ssl.enabled.protocols"; + public static final String DEFAULT_SSL_ENABLED_PROTOCOLS = "TLSv1"; + private Configuration conf; private Mode mode; private boolean requireClientCert; @@ -73,6 +77,8 @@ public static enum Mode { CLIENT, SERVER } private HostnameVerifier hostnameVerifier; private KeyStoresFactory keystoresFactory; + private String[] enabledProtocols = null; + /** * Creates an SSLFactory. * @@ -94,6 +100,9 @@ public SSLFactory(Mode mode, Configuration conf) { = conf.getClass(KEYSTORES_FACTORY_CLASS_KEY, FileBasedKeyStoresFactory.class, KeyStoresFactory.class); keystoresFactory = ReflectionUtils.newInstance(klass, sslConf); + + enabledProtocols = conf.getStrings(SSL_ENABLED_PROTOCOLS, + DEFAULT_SSL_ENABLED_PROTOCOLS); } private Configuration readSSLConfiguration(Mode mode) { @@ -122,7 +131,7 @@ public void init() throws GeneralSecurityException, IOException { context = SSLContext.getInstance("TLS"); context.init(keystoresFactory.getKeyManagers(), keystoresFactory.getTrustManagers(), null); - + context.getDefaultSSLParameters().setProtocols(enabledProtocols); hostnameVerifier = getHostnameVerifier(conf); } @@ -185,6 +194,7 @@ public SSLEngine createSSLEngine() sslEngine.setUseClientMode(false); sslEngine.setNeedClientAuth(requireClientCert); } + sslEngine.setEnabledProtocols(enabledProtocols); return sslEngine; } diff --git a/hadoop-common-project/hadoop-common/src/main/resources/core-default.xml b/hadoop-common-project/hadoop-common/src/main/resources/core-default.xml index a23a7fa3643..4ba2e5ad61b 100644 --- a/hadoop-common-project/hadoop-common/src/main/resources/core-default.xml +++ b/hadoop-common-project/hadoop-common/src/main/resources/core-default.xml @@ -1365,6 +1365,14 @@ for ldap providers in the same way as above does. + + hadoop.ssl.enabled.protocols + TLSv1 + + Protocols supported by the ssl. + + + hadoop.jetty.logs.serve.aliases true diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/site/apt/EncryptedShuffle.apt.vm b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/site/apt/EncryptedShuffle.apt.vm index e766cbc10ed..da412df7877 100644 --- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/site/apt/EncryptedShuffle.apt.vm +++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/site/apt/EncryptedShuffle.apt.vm @@ -53,6 +53,8 @@ Hadoop MapReduce Next Generation - Encrypted Shuffle | <<>> | <<>> | Resource file from which ssl server keystore information will be extracted. This file is looked up in the classpath, typically it should be in Hadoop conf/ directory | *--------------------------------------+---------------------+-----------------+ | <<>> | <<>> | Resource file from which ssl server keystore information will be extracted. This file is looked up in the classpath, typically it should be in Hadoop conf/ directory | +*--------------------------------------+---------------------+-----------------+ +| <<>> | <<>> | The supported SSL protocols (JDK6 can use <>, JDK7+ can use <>) | *--------------------------------------+---------------------+-----------------+ <> Currently requiring client certificates should be set to false.