Java 7 和 8 如何以不同方式处理 DHE 密钥并解决错误

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

在 Java 7 和 8 下,如果在 WSO2 产品中使用“弱”DHE 公钥进行 SSL 通信,Firefox v39.0 + 和 Chrome v45.0 + 可能会产生错误。

要解决此问题,您有以下三种选择:

1.您需要 禁用 使用的DHE密码。

配置以下密码套件,然后可用于 CARBON_HOME/repository/conf/tomcat/catalina-server.xml 中的 SSL 通信。此密码参数必须在 TLS 连接器元素内配置。


 ciphers="SSL_RSA_WITH_RC4_128_MD5,SSL_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA"

为了实现“ 完美前向保密 ”,我们通常需要 DHE;因此,删除 DHE 密码不是一个好的选择。

2. 为 DHE_RSA SSL 密码套件使用 1024 位 (或更大)Diffie-Hellman 组。

为此,您需要使用 JAVA 8.0 。 JAVA 8.0 中的以下参数可用于将密钥大小自定义为某个更大的值。


 ciphers="SSL_RSA_WITH_RC4_128_MD5,SSL_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA"

JAVA 7.0 支持 1024 位密钥大小,您不能使用上述参数来配置更大的密钥大小(在最新的 JAVA 7.0 公开版本中)

目前WSO2产品 不能 使用JAVA 8.0运行;但是,WSO2 的未来版本将能够使用 JAVA 8.0 运行,然后您可以使用具有更大密钥大小的 DHE 密码。

3.启用 ECDHE
我们可以在 WSO2 服务器中只启用 ECDHE 密码而不使用 DHE 密码。这样,我们就可以免受“弱密码”和“完美前向保密”攻击。

因此,您可以在 CARBON_HOME/repository/conf/tomcat/catalina-server.xml 中添加以下可用于 SSL 通信的密码套件。 此密码的参数必须在 TLS 连接器元素内配置。


 ciphers="SSL_RSA_WITH_RC4_128_MD5,SSL_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA"