jetty - aws - Los conjuntos de cifrado ECDHE no son compatibles con OpenJDK 8 instalado en la máquina EC2 Linux
install java in aws ec2 (4)
Así que estoy ejecutando una configuración similar, con un cuadro de AWS que ejecuta openjdk-1.8.0.51. lo que lo resolvió para mí es agregar bouncycastle como proveedor de esta manera:
-
Agregue
bcprov-<verion>.jar
a/usr/lib/jvm/jre/lib/ext
-
Edite
/usr/lib/jvm/jre/lib/security/java.security
agregando la siguiente línea a la lista de proveedores:security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
(Lo agregué como la sexta entrada, pero puede agregar más en el orden si lo prefiere)
Reinicié mi aplicación y pude usar conjuntos de cifrado basados en EC como
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
.
Al iniciar
jetty-distribution-9.3.0.v20150612
con
openjdk 1.8.0_51
ejecutándose en una máquina EC2 Amazon Linux, se imprime que no se admiten todas las suites ECDHE configuradas.
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA not supported
Estos están habilitados en
jetty/etc/jetty-ssl-context.xml
-
<Set name="IncludeCipherSuites">
<Array type="java.lang.String">
<!-- TLS 1.2 AEAD only (all are SHA-2 as well) -->
<Item>TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256</Item>
<Item>TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256</Item>
<Item>TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384</Item>
<Item>TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256</Item>
<Item>TLS_DHE_RSA_WITH_AES_256_GCM_SHA384</Item>
<Item>TLS_DHE_RSA_WITH_AES_128_GCM_SHA256</Item>
...
Leí que Oracle Java 8 debería admitir estos protocolos , pero ¿tal vez eso no sea compatible con OpenJDK? ¿O debería habilitarlo de alguna manera?
Actualizar
El proveedor criptográfico JCE de Oracle está instalado en
jre/lib/security/
, pero no ayudó.
Intente instalar los archivos de política de jurisdicción de fuerza ilimitada de JCE (estos deberían ayudar con sus cifrados de bits más altos)
También tenga en cuenta que en el enlace que proporcionó sobre el soporte de protocolo de cifrado java 8 dice
Los conjuntos de cifrado que utilizan criptografía de curva elíptica (ECDSA, ECDH, ECDHE, ECDH_anon) requieren un proveedor criptográfico JCE ...
¿Instaló un proveedor de este tipo en su máquina virtual Java 8?
La causa raíz es que OpenJDK en CentOS / RHEL / Amazon Linux con OpenJDK en ellos simplemente no se envían con las bibliotecas nativas necesarias para admitir EC. Los archivos de política ilimitados son una pista falsa, al igual que cualquier intento de inhabilitar varios algoritmos, etc. Si las bibliotecas no están allí, no puede usar las funciones.
La respuesta aceptada de "instalar Bouncy Castle" funciona porque BC proporciona una implementación de Java puro de todos los algoritmos deseados. Idealmente, el JDK proporcionaría implementaciones nativas que producirían un mayor rendimiento.
Parece que OpenJDK en Amazon Linux solo tendrá que esperar. :(
Ref: http://armoredbarista.blogspot.de/2013/10/how-to-use-ecc-with-openjdk.html
ACTUALIZACIÓN 2016-11-09
Parece que la biblioteca nativa de curva Elíptica de Oracle (
libsunec.so
) está licenciada bajo la GPL.
Puede confirmar esto yendo a
la página de descarga de Oracle
, haciendo clic en
Licencias de terceros
y verificando el archivo README para su versión de Java.
Esto significa que, si puede obtener una copia de JRE / JDK de Oracle para la plataforma y arquitectura de destino, puede tomar la biblioteca
libsunec.so
e instalarla legalmente en la instalación de OpenJDK.
Para mí, eso significaba tomar el archivo
$JAVA_HOME/jre/lib/amd64/libsunec.so
de un Oracle Java 8 JRE y
$JAVA_HOME/jre/lib/amd64/libsunec.so
en, por ejemplo,
/usr/lib/jvm/jre-1.8.0/lib/amd64/
.
Eso es todo lo que se requiere para habilitar los algoritmos de curva elíptica.
ACTUALIZACIÓN 2018-03-08
Oracle Java 9 incluirá las bibliotecas de "criptografía de fuerza ilimitada" habilitadas por defecto , así que eso es bueno. Parece que OpenJDK aún requerirá que establezca una propiedad del sistema para habilitar la "criptografía de fuerza ilimitada" .
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA not supported
Thes-e están habilitados en jetty / etc / jetty-ssl-context.xm