EC2 Linux机器上安装的OpenJDK 8不支持ECDHE密码套件

在EC2 Amazon Linux机器上运行openjdk 1.8.0_51启动jetty-distribution-9.3.0.v20150612时,打印机不支持所有已配置的ECDHE套件。

 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 

这些在jetty/etc/jetty-ssl-context.xml中启用 –

    TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 ... 

我读过Oracle Java 8 应该支持这些协议 ,但OpenJDK可能不支持这些协议吗? 或者我应该以某种方式启用它?

更新

Oracle的JCE加密提供程序安装在jre/lib/security/ ,但它没有帮助。

所以我正在运行类似的设置,其中一个AWS框运行openjdk-1.8.0.51。 为我解决的是将bouncycastle添加为提供者,如下所示:

  • bcprov-.jar添加到/usr/lib/jvm/jre/lib/ext

  • 编辑/usr/lib/jvm/jre/lib/security/java.security下行添加到提供者列表中:

     security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider 

(我将其添加为第6个条目,但如果您愿意,可以在订单中添加更高的条目)

重新启动了我的应用程序,并能够使用基于EC的密码套件,如TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

根本原因是在CentOS / RHEL / Amazon Linux上使用OpenJDK的OpenJDK根本不附带所需的本机库来支持EC。 无限制策略文件是一个红色鲱鱼,任何尝试取消禁用各种算法等等。如果库不存在,则无法使用这些function。

接受“安装Bouncy Castle”的答案是有效的,因为BC提供了所有所需算法的纯Java实现。 理想情况下,JDK将提供可以产生更高性能的本机实现。

看起来亚马逊Linux上的OpenJDK只需要等待。 🙁

参考: http : //armoredbarista.blogspot.de/2013/10/how-to-use-ecc-with-openjdk.html

另外: https : //security.stackexchange.com/questions/117975/how-to-enable-ecdhe-in-openjdk-1-8-0-in-centos-6-7

更新2016-11-09

似乎Oracle的Elliptic曲线本机库( libsunec.so )是根据GPL许可的。 您可以通过转到Oracle的下载页面 ,单击第三方许可证 ,然后检查您的Java版本的自述文件来确认这一点。

这意味着,如果您可以获取目标平台和体系结构的Oracle JRE / JDK副本,则可以从中获取libsunec.so库并将其合法安装到OpenJDK安装中。

对我来说,这意味着从Oracle Java 8 JRE中获取文件$JAVA_HOME/jre/lib/amd64/libsunec.so并将其放入例如/usr/lib/jvm/jre-1.8.0/lib/amd64/ 。 这就是启用Elliptic-Curve算法所需的全部内容。

更新2018-03-08

Oracle Java 9将包含默认启用的“无限强度加密”库,因此这很好。 看起来OpenJDK仍然需要您设置系统属性以启用“无限强度加密” 。

尝试安装JCE Unlimited Strength Jurisdiction Policy Files (这些应该有助于您的更高位密码)

另请注意,在您提供的有关java 8密码协议支持的链接中说

使用Elliptic Curve Cryptography(ECDSA,ECDH,ECDHE,ECDH_anon)的密码套件需要JCE加密提供程序……

您是否在Java 8 VM上安装了这样的提供程序?

 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 

在jetty / etc / jetty-ssl-context.xm中启用了-s-e