【问题标题】:Configure Spring Boot to Prevent Logjam Attack配置 Spring Boot 以防止 Logjam 攻击
【发布时间】:2015-08-07 11:53:31
【问题描述】:

Firefox v39 将不再通过 HTTPS 连接到我的 Web 应用程序。我正在使用带有嵌入式 Tomcat 的 Spring Boot,并确保我使用的是最新版本的 Boot (v1.2.5)。 Firefox 显示以下错误消息:

安全连接失败

连接到 [网站] 时出错。 SSL 在服务器密钥交换握手消息中收到了一个较弱的临时 Diffie-Hellman 密钥。 (错误代码:ssl_error_weak_server_ephemeral_dh_key)

我知道这是为了防止一个名为Logjam 的已知漏洞。 weakdh.org 提供了 Tomcat 的解决方案。

Spring Boot 通过 application.properties 将 SSL 配置传递给 Tomcat,因此我已将 server.ssl.ciphers 添加到我的 application.properties 中,如下所示:

server.port=443
server.ssl.key-store=/home/ec2-user/boot.p12
server.ssl.key-store-password=...
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=...
server.ssl.ciphers=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_SHA256,TLS_ECDHE_RSA_WITH_AES_128_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_SHA,TLS_ECDHE_RSA_WITH_AES_256_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_SHA384,TLS_ECDHE_RSA_WITH_AES_256_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_SHA,TLS_DHE_RSA_WITH_AES_128_SHA256,TLS_DHE_RSA_WITH_AES_128_SHA,TLS_DHE_DSS_WITH_AES_128_SHA256,TLS_DHE_RSA_WITH_AES_256_SHA256,TLS_DHE_DSS_WITH_AES_256_SHA,TLS_DHE_RSA_WITH_AES_256_SHA

重启启动后,我在日志文件中注意到以下内容:

WARN 2674 [main] --- o.a.t.util.net.jsse.JSSESocketFactory : None of the ciphers specified are supported by the SSL engine : TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, ...

此外,使用 Firefox 连接失败并显示以下消息:

安全连接失败

在加载页面时,与 [网站] 的连接中断。

我在日志文件中看到以下内容:

javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

很遗憾,我不是加密专家。谁能建议如何解决这个问题?我需要重新创建我的 HTTPS 证书吗?

【问题讨论】:

  • 是的 - 您需要更新证书。

标签: spring security ssl https spring-boot


【解决方案1】:

解决方案是将服务器上的服务器 Java 从 1.7 升级到 1.8。

  • sudo yum remove java-1.7.0-openjdk
  • sudo yum install java-1.8.0

完成后,无需进行其他配置。甚至没有按照weakdh.org 上的建议修改Tomcat。

【讨论】:

  • 只是想知道,如果您公开休息服务,您的休息客户是否必须做一些特别的事情或根本不需要?
  • REST 客户端通过 HTTPS 连接并通过用户名和密码进行身份验证。不使用客户端证书。
  • @Adam,我在 java-1.8.0-openjdk-1.8.0.212 上,但在使用 ssllabs.com 进行测试时失败了。
  • 我正在运行 OpenJDK 11.0.8 (2020-07-14),甚至只启用了您帖子中的密码(在 .properties 配置文件中),我的服务器仍然使用 DH。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多