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

Jetty EC2 Linux计算机上安装的OpenJDK 8不支持ECDHE密码套件,jetty,java-8,openjdk,jce,jetty-9,Jetty,Java 8,Openjdk,Jce,Jetty 9,当在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 SslContextFacto

当在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
-

<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>
...

,但可能OpenJDK不支持这种功能?还是我应该以某种方式启用它

更新

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

尝试安装(这些将有助于使用更高位的密码)

还要注意的是,在

使用椭圆曲线加密的密码套件(ECDSA、ECDH、ECDHE、ECDH_anon)需要JCE加密提供程序


您在Java 8虚拟机上安装了这样的提供程序吗?

因此我正在运行一个类似的设置,其中一个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的密码套件,如带有AES的TLS\U ECDHE\U RSA\U 128\U GCM\U SHA256

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上下文中启用了S-e。xm

根本原因是CentOS/RHEL/Amazon Linux上的OpenJDK和OpenJDK没有附带支持EC所需的本机库。不受限制的策略文件是一种误导,任何试图取消禁用各种算法的尝试都是如此。如果库不存在,则无法使用这些功能

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

看起来亚马逊Linux上的OpenJDK只能等待了(

参考:

此外:

更新2016-11-09

Oracle的椭圆曲线本机库(
libsunec.so
)似乎是根据GPL授权的。您可以通过转到、单击并检查您的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/
中。这就是启用椭圆曲线算法所需的全部

更新2018-03-08


Oracle Java 9将包含“无限强度加密”库,所以这很好。看起来OpenJDK仍然需要您这样做。

是的,JAR在
jre-1.8.0-OpenJDK.x86_64/lib/security
下被替换,服务器重新启动,但它仍然显示“不受支持”。我试图弄清楚它是否是OpenJDK(在EC2 Linux机器上运行)问题。使用JCE cryptographic provider安装
Oracle JDK 1.8
确实起到了作用。所以问题是,如何在OpenJDK中启用此加密?我将从问题标题中删除Jetty。只想将此堆栈跟踪字符串添加到帖子中,以便其他人在搜索错误时可以找到此帖子。javax.net.ssl.sslhandshakeEx选项:收到致命警报:握手失败在OpenJDK安装上安装Oracle的JCE加密没有效果,因为ECDHE密码是在本机C代码中实现的,并且仅在Oracle JDK中提供(请参阅)这是试图回答问题吗?如果是,请正确设置格式。如果不是,并且是问题,则应将其作为问题发布(同样使用正确的格式)。您还需要从当前CentOS OpenJDK发行版的同一java.security文件中的jdk.tls.disabledAlgorithms定义中删除“EC,ECDHE,ECDH”,否则它仍然不会使用这些密码。只需确认安装bouncycastle提供程序为我解决了类似问题。在bouncycastle站点:
bcprov-jdk15on-.jar
bcprov-ext-jdk15on-.jar
。不确定区别是什么,但我使用了前者,效果很好。在/usr/lib/jre/lib/ext中添加bouncycastle jar v1.55并按照@lenswipe的建议,从jdk.tls.disable中删除“EC、ECDHE、ECDH”后,我仍然没有得到EC ALGdAlgorithms。我在RHEL7.2上的OpenJDK 1.8.0_101上。顺便说一句-我没有使用Jetty-只是在构建一个自定义Java应用程序。我测试ALG可用性的方法是调用SSLServerSocket.GetSupportedCipherSuite()。返回的列表不包含任何EC密码。任何其他可能阻止EC ALG的事情?要清楚,我也在列表中添加了BC提供程序,但在我的例子中是位置9。请注意,BouncyCastle是加密算法的纯Java实现。它们的性能可能不如本机实现,尤其是在这样的情况下本机实现具有硬件意识,可以使用硬件加速的AES(2010年后内置在所有英特尔芯片中,2013年后内置在AMD芯片中,以及)。您可能会发现使用BC会显著降低您的性能。将您的实例升级到Amazon Linux 2016.09 AMIs或更高版本可以解决此问题。这些AMI包括openjdk 1.8.0121,它附带
libsunec。因此默认情况下
。@AlexGrigorovitch这是个好消息。我自己还没有验证过这一点,但Java世界似乎终于实现了越过愚蠢的1990年代的有限强度密码规则,进入现代时代。