11/*
22 * Copyright 2015-2017 floragunn GmbH
3- *
3+ *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
66 * You may obtain a copy of the License at
7- *
7+ *
88 * http://www.apache.org/licenses/LICENSE-2.0
99 *
1010 * Unless required by applicable law or agreed to in writing, software
1111 * distributed under the License is distributed on an "AS IS" BASIS,
1212 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313 * See the License for the specific language governing permissions and
1414 * limitations under the License.
15- *
15+ *
1616 */
1717
1818package com .amazon .opendistroforelasticsearch .security .ssl ;
5454
5555import org .apache .logging .log4j .LogManager ;
5656import org .apache .logging .log4j .Logger ;
57+
5758import org .elasticsearch .ElasticsearchException ;
5859import org .elasticsearch .ElasticsearchSecurityException ;
60+ import org .apache .lucene .util .Constants ;
5961import org .elasticsearch .SpecialPermission ;
6062import org .elasticsearch .common .settings .Settings ;
6163import org .elasticsearch .env .Environment ;
@@ -88,17 +90,17 @@ private void printJCEWarnings() {
8890 public final SslProvider sslTransportClientProvider ;
8991 private final boolean httpSSLEnabled ;
9092 private final boolean transportSSLEnabled ;
91-
93+
9294 private List <String > enabledHttpCiphersJDKProvider ;
9395 private List <String > enabledHttpCiphersOpenSSLProvider ;
9496 private List <String > enabledTransportCiphersJDKProvider ;
9597 private List <String > enabledTransportCiphersOpenSSLProvider ;
96-
98+
9799 private List <String > enabledHttpProtocolsJDKProvider ;
98100 private List <String > enabledHttpProtocolsOpenSSLProvider ;
99101 private List <String > enabledTransportProtocolsJDKProvider ;
100102 private List <String > enabledTransportProtocolsOpenSSLProvider ;
101-
103+
102104 private SslContext httpSslContext ;
103105 private SslContext transportServerSslContext ;
104106 private SslContext transportClientSslContext ;
@@ -124,7 +126,12 @@ public DefaultOpenDistroSecurityKeyStore(final Settings settings, final Path con
124126 .getAsBoolean (SSLConfigConstants .OPENDISTRO_SECURITY_SSL_TRANSPORT_ENABLE_OPENSSL_IF_AVAILABLE , true );
125127
126128 if (!OpenDistroSecuritySSLPlugin .OPENSSL_SUPPORTED && OpenSsl .isAvailable () && (settings .getAsBoolean (SSLConfigConstants .OPENDISTRO_SECURITY_SSL_HTTP_ENABLE_OPENSSL_IF_AVAILABLE , true ) || settings .getAsBoolean (SSLConfigConstants .OPENDISTRO_SECURITY_SSL_TRANSPORT_ENABLE_OPENSSL_IF_AVAILABLE , true ) )) {
127- String text = "Support for OpenSSL with Java 12+ has been removed from Open Distro Security since Elasticsearch 7.4.0. Using JDK SSL instead.\n " ;
129+ String text = "Support for OpenSSL has been removed from Open Distro Security since Elasticsearch 7.4.0. Use JDK SSL instead\n " ;
130+ if (Constants .JRE_IS_MINIMUM_JAVA11 ) {
131+ text += "Since you are running Java " +Constants .JAVA_VERSION +" you should not experience any performance impact but maybe not all your ciphers are supported. If you experience problems upgrade to Java 11+" ;
132+ } else {
133+ text += "You are running a very old version of Java (" +Constants .JAVA_VERSION +") so you may experience a performance impact and it is strongly advised to update to Java 11+" ;
134+ }
128135 System .out .println (text );
129136 log .warn (text );
130137 }
@@ -171,8 +178,8 @@ public DefaultOpenDistroSecurityKeyStore(final Settings settings, final Path con
171178 Arrays .toString (getEnabledSSLProtocols (sslTransportServerProvider , false )));
172179 log .info ("Enabled TLS protocols for HTTP layer : {}" ,
173180 Arrays .toString (getEnabledSSLProtocols (sslHTTPProvider , true )));
174-
175-
181+
182+
176183 log .debug ("sslTransportClientProvider:{} with protocols {}" , sslTransportClientProvider ,
177184 getEnabledSSLProtocols (sslTransportClientProvider , false ));
178185 log .debug ("sslTransportServerProvider:{} with protocols {}" , sslTransportServerProvider ,
@@ -191,7 +198,7 @@ public DefaultOpenDistroSecurityKeyStore(final Settings settings, final Path con
191198 if (transportSSLEnabled && getEnabledSSLCiphers (sslTransportServerProvider , false ).isEmpty ()) {
192199 throw new ElasticsearchSecurityException ("no ssl protocols for transport protocol" );
193200 }
194-
201+
195202 if (transportSSLEnabled && getEnabledSSLCiphers (sslTransportClientProvider , false ).isEmpty ()) {
196203 throw new ElasticsearchSecurityException ("no ssl protocols for transport protocol" );
197204 }
@@ -248,11 +255,11 @@ private void initSSLConfig() {
248255 final String keystorePassword = settings .get (
249256 SSLConfigConstants .OPENDISTRO_SECURITY_SSL_TRANSPORT_KEYSTORE_PASSWORD ,
250257 SSLConfigConstants .DEFAULT_STORE_PASSWORD );
251-
258+
252259 final String keyPassword = settings .get (
253260 SSLConfigConstants .OPENDISTRO_SECURITY_SSL_TRANSPORT_KEYSTORE_KEYPASSWORD ,
254261 keystorePassword );
255-
262+
256263 final String keystoreAlias = settings .get (SSLConfigConstants .OPENDISTRO_SECURITY_SSL_TRANSPORT_KEYSTORE_ALIAS ,
257264 null );
258265
@@ -296,7 +303,7 @@ private void initSSLConfig() {
296303 /*
297304 * for (int i = 0; i < transportKeystoreCert.length; i++) { X509Certificate
298305 * x509Certificate = transportKeystoreCert[i];
299- *
306+ *
300307 * if(x509Certificate != null) {
301308 * log.info("Transport keystore subject DN no. {} {}",i,x509Certificate.
302309 * getSubjectX500Principal()); } }
@@ -383,12 +390,12 @@ trustedTransportCertificates, getEnabledSSLCiphers(sslTransportClientProvider, f
383390 DEFAULT_STORE_TYPE );
384391 final String keystorePassword = settings .get (SSLConfigConstants .OPENDISTRO_SECURITY_SSL_HTTP_KEYSTORE_PASSWORD ,
385392 SSLConfigConstants .DEFAULT_STORE_PASSWORD );
386-
393+
387394 final String keyPassword = settings .get (
388395 SSLConfigConstants .OPENDISTRO_SECURITY_SSL_HTTP_KEYSTORE_KEYPASSWORD ,
389396 keystorePassword );
390-
391-
397+
398+
392399 final String keystoreAlias = settings .get (SSLConfigConstants .OPENDISTRO_SECURITY_SSL_HTTP_KEYSTORE_ALIAS , null );
393400
394401 log .info ("HTTPS client auth mode {}" , httpClientAuthMode );
@@ -432,7 +439,7 @@ trustedTransportCertificates, getEnabledSSLCiphers(sslTransportClientProvider, f
432439 /*
433440 * for (int i = 0; i < httpKeystoreCert.length; i++) { X509Certificate
434441 * x509Certificate = httpKeystoreCert[i];
435- *
442+ *
436443 * if(x509Certificate != null) {
437444 * log.info("HTTP keystore subject DN no. {} {}",i,x509Certificate.
438445 * getSubjectX500Principal()); } }
@@ -600,7 +607,7 @@ private List<String> getEnabledSSLCiphers(final SslProvider provider, boolean ht
600607 }
601608
602609 }
603-
610+
604611 private String [] getEnabledSSLProtocols (final SslProvider provider , boolean http ) {
605612 if (provider == null ) {
606613 return new String [0 ];
@@ -629,8 +636,8 @@ private void initEnabledSSLCiphers() {
629636 openSSLSecureHttpCiphers .add (secure );
630637 }
631638 }
632-
633-
639+
640+
634641 log .debug ("OPENSSL " +OpenSsl .versionString ()+" supports the following ciphers (java-style) {}" , OpenSsl .availableJavaCipherSuites ());
635642 log .debug ("OPENSSL " +OpenSsl .versionString ()+" supports the following ciphers (openssl-style) {}" , OpenSsl .availableOpenSslCipherSuites ());
636643
@@ -653,15 +660,15 @@ private void initEnabledSSLCiphers() {
653660 } else {
654661 enabledTransportCiphersOpenSSLProvider = Collections .emptyList ();
655662 }
656-
663+
657664 if (OpenDistroSecuritySSLPlugin .OPENSSL_SUPPORTED && OpenSsl .isAvailable () && OpenSsl .version () > 0x10101009L ) {
658665 enabledHttpProtocolsOpenSSLProvider = new ArrayList (Arrays .asList ("TLSv1.3" ,"TLSv1.2" ,"TLSv1.1" ,"TLSv1" ));
659666 enabledHttpProtocolsOpenSSLProvider .retainAll (secureHttpSSLProtocols );
660667 enabledTransportProtocolsOpenSSLProvider = new ArrayList (Arrays .asList ("TLSv1.3" ,"TLSv1.2" ,"TLSv1.1" ));
661668 enabledTransportProtocolsOpenSSLProvider .retainAll (secureTransportSSLProtocols );
662-
669+
663670 log .info ("OpenSSL supports TLSv1.3" );
664-
671+
665672 } else if (OpenDistroSecuritySSLPlugin .OPENSSL_SUPPORTED && OpenSsl .isAvailable ()){
666673 enabledHttpProtocolsOpenSSLProvider = new ArrayList (Arrays .asList ("TLSv1.2" ,"TLSv1.1" ,"TLSv1" ));
667674 enabledHttpProtocolsOpenSSLProvider .retainAll (secureHttpSSLProtocols );
@@ -685,11 +692,11 @@ private void initEnabledSSLCiphers() {
685692 jdkSupportedProtocols );
686693 log .debug ("JVM supports the following {} ciphers {}" , jdkSupportedCiphers .size (),
687694 jdkSupportedCiphers );
688-
695+
689696 if (jdkSupportedProtocols .contains ("TLSv1.3" )) {
690697 log .info ("JVM supports TLSv1.3" );
691698 }
692-
699+
693700 } catch (final Throwable e ) {
694701 log .error ("Unable to determine supported ciphers due to " + e , e );
695702 } finally {
@@ -706,16 +713,16 @@ private void initEnabledSSLCiphers() {
706713 if (jdkSupportedCiphers == null || jdkSupportedCiphers .isEmpty () || jdkSupportedProtocols == null || jdkSupportedProtocols .isEmpty ()) {
707714 throw new ElasticsearchException ("Unable to determine supported ciphers or protocols" );
708715 }
709-
716+
710717 enabledHttpCiphersJDKProvider = new ArrayList <String >(jdkSupportedCiphers );
711718 enabledHttpCiphersJDKProvider .retainAll (secureHttpSSLCiphers );
712-
719+
713720 enabledTransportCiphersJDKProvider = new ArrayList <String >(jdkSupportedCiphers );
714721 enabledTransportCiphersJDKProvider .retainAll (secureTransportSSLCiphers );
715-
722+
716723 enabledHttpProtocolsJDKProvider = new ArrayList <String >(jdkSupportedProtocols );
717724 enabledHttpProtocolsJDKProvider .retainAll (secureHttpSSLProtocols );
718-
725+
719726 enabledTransportProtocolsJDKProvider = new ArrayList <String >(jdkSupportedProtocols );
720727 enabledTransportProtocolsJDKProvider .retainAll (secureTransportSSLProtocols );
721728 }
0 commit comments