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

2022-09-02 21:06:25

从在 EC2 Amazon Linux 计算机上运行时,打印不支持所有已配置的 ECDHE 套件。jetty-distribution-9.3.0.v20150612openjdk 1.8.0_51

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

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

更新

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


答案 1

因此,我正在运行类似的设置,其中AWS框运行openjdk-1.8.0.51。对我来说,解决它的方法是添加弹跳城堡作为提供者,如下所示:

  • 将 添加到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
    

(我将其添加为第6个条目,但如果您愿意,可以按顺序添加更高的条目)

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


答案 2

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

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

看起来Amazon 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的椭圆曲线原生库()是根据GPL许可的。您可以通过转到Oracle的下载页面,单击第三方许可证并检查您的Java版本的自述文件来确认这一点。libsunec.so

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

对我来说,这意味着从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仍然需要您设置一个系统属性来启用“无限强度加密”。