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

Kof*_*Kof 15 openjdk jetty jce java-8 jetty-9

当开始jetty-distribution-9.3.0.v20150612openjdk 1.8.0_51一个亚马逊EC2 Linux机器上运行,是所有配置的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
Run Code Online (Sandbox Code Playgroud)

这些是启用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>
...
Run Code Online (Sandbox Code Playgroud)

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

更新

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

tal*_*leb 16

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

  • 添加bcprov-<verion>.jar/usr/lib/jvm/jre/lib/ext

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

    security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
    
    Run Code Online (Sandbox Code Playgroud)

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

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

  • 您还需要从当前CentOS OpenJDK发行版中的相同java.security文件中的jdk.tls.disabledAlgorithms定义中删除"EC,ECDHE,ECDH",否则它仍然不会使用这些密码 (3认同)
  • 请注意,BouncyCastle 是加密算法的纯 Java 实现。它们的性能可能不如本机实现,特别是当此类本机实现具有硬件感知能力并且可以使用硬件加速 AES 等(在 ~2010 年之后内置于所有 Intel 芯片中,在 ~2013 年之后内置于 AMD 芯片中,[其他] (https://en.wikipedia.org/wiki/AES_instruction_set))。您可能会发现使用 BC *显着*降低了您的性能。 (2认同)

Chr*_*ltz 8

根本原因是在CentOS/RHEL/Amazon Linux上使用OpenJDK的OpenJDK根本不附带所需的本机库来支持EC.在无限的策略文件是一个红色的鲱鱼,因为任何试图取消 -disable各种算法,等等.如果图书馆不存在,你不能使用的功能.

接受"安装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安装中.

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

更新2018-03-08

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

  • 将您的实例升级到 Amazon Linux 2016.09 AMI 或更高版本可解决该问题。这些 AMI 包括 openjdk 1.8.0_121,它默认提供 `libsunec.so`。 (2认同)