TL, DR: OpenJDK 8 пакет от Alpine не поддерживает шифры, которые используют эллиптическую кривую, например ECDHE
. Используйте -Dcom.sun.net.ssl.enableECC=false
на Java-вариантах, чтобы любезно попросить OpenJDK не использовать такие шифры.
Это хороший Atlassian paper описывает, как перечислить все по умолчанию и доступные шифры из виртуальной машины Java, используя следующий код:
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import javax.net.ssl.SSLServerSocketFactory;
public class Ciphers
{
public static void main(String[] args)
throws Exception
{
SSLServerSocketFactory ssf = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
String[] defaultCiphers = ssf.getDefaultCipherSuites();
String[] availableCiphers = ssf.getSupportedCipherSuites();
TreeMap ciphers = new TreeMap();
for(int i=0; i<availableCiphers.length; ++i)
ciphers.put(availableCiphers[i], Boolean.FALSE);
for(int i=0; i<defaultCiphers.length; ++i)
ciphers.put(defaultCiphers[i], Boolean.TRUE);
System.out.println("Default\tCipher");
for(Iterator i = ciphers.entrySet().iterator(); i.hasNext();) {
Map.Entry cipher=(Map.Entry)i.next();
if(Boolean.TRUE.equals(cipher.getValue()))
System.out.print('*');
else
System.out.print(' ');
System.out.print('\t');
System.out.println(cipher.getKey());
}
}
}
Запуск этого кода на OpenJDK 8 из Alpine 3.5 не перечислите ECDHE
шифра, на другая сторона этого же кода перечисляет несколько таких шифров из OpenJDK 8, установленных в окне CentOS 7.
По какой-то причине шифры, использующие эллиптическую кривую, отправляются клиентом на сервер в виде доступных шифров в приложении Wildfly. Вне Wildfly - например, java SomeClass
или java -jar some.jar
эти шифры не отправляются и связь работает. Это поведение можно наблюдать, добавляя -Djavax.net.debug=all
в вариантах Java.
Дополнительная информация: curve: 1.2.840.10045.3.1.7 также известен как "secp256r1" или который также называется "P-256" по NIST. Он ** доступен ** в стандартной среде исполнения Java Java Runtime Environment с Java 7. –