Kof*_*Kof 15 openjdk jetty jce java-8 jetty-9
当开始jetty-distribution-9.3.0.v20150612有openjdk 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/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仍然需要您设置系统属性以启用"无限强度加密".