【问题标题】:Spring boot ssl configuration broken after upgrade to 1.4.0 from 1.3.x从 1.3.x 升级到 1.4.0 后 Spring Boot ssl 配置损坏
【发布时间】:2016-12-23 19:14:31
【问题描述】:

我的ssl配置有问题,我的配置如下:

server.port=8449
# self signed cert with CN=localhost used for https method tests
server.ssl.key-store=keystore.p12
server.ssl.key-password=password
server.ssl.key-alias=some-alias
server.ssl.key-store-type=PKCS12

如果与 1.3.7 版本的 spring boot 一起使用,一切正常。如果在客户端升级到 1.4.0,我会得到:

javax.ws.rs.ProcessingException: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

at org.glassfish.jersey.client.internal.HttpUrlConnector.apply(HttpUrlConnector.java:287)
at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:255)
at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:700)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:696)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:448)

并从 chrome 结果调用 ssl 端口:

客户端和服务器不支持通用的 SSL 协议版本或密码套件。这很可能是当服务器需要 RC4 时引起的,这不再被认为是安全的。

Firefox 也出现类似错误。

正如我所说,唯一不同的配置是 Spring Boot 版本。我是否在配置中遗漏了某些内容,以便可以与较新版本的 Spring Boot 一起使用?

提前致谢 干杯!

附:我对 ssl 相关的主题不是很了解,所以请尽量简单地解释一下。

【问题讨论】:

  • 您不需要在 1.4 中以不同方式配置 SSL。我刚刚尝试过Boot's Tomcat SSL sample,它适用于 Safari 和 Chrome。你能提供一个重现问题的小样本吗?
  • 感谢示例链接,它帮助我解决了问题:) 问题在于它的配置方式,使用 Tomcat 8.0.x 配置工作得很好,但使用 Tomcat 8.5.4 似乎(也许我错了)您需要明确指定密钥库密码,而不仅仅是我的示例中的密钥密码。
  • 我有一个非常相似的问题,在将 Spring Boot 从 1.3 升级到 1.4 时,我丢失了所有 ECDHE 密码,只剩下 DHE 密码。如果我将 Tomcat 降级到 8.0.x,一切都会恢复正常。我指定了密钥库和密钥密码都无济于事。

标签: java spring ssl spring-boot


【解决方案1】:

感谢Andy提供的Boot's Tomcat SSLsample,我设法解决了这个问题

server.port=8449
# self signed cert with CN=localhost used for https method tests
server.ssl.key-store=keystore.p12
server.ssl.key-password=password
server.ssl.key-alias=some-alias
server.ssl.key-store-type=PKCS12

我的猜测(我可能错了)是 Tomcat 8.5.4 需要指定 server.ssl.key-store-password=password 仅指定 server.ssl.key-password 是不够的,所以在更新配置后我想出了这样的东西:

server.port=8449
# self signed cert with CN=localhost used for https method tests
server.ssl.key-store=keystore.p12
server.ssl.key-store-password=changeit
server.ssl.key-alias=some-alias
server.ssl.key-password=changeit
server.ssl.key-store-type=PKCS12

现在它按预期工作了:) 希望这个答案对其他人有所帮助。

附:是的,我知道对特定密钥和通用存储使用相同的密码是不好的,但这只是一个测试密钥存储。

【讨论】:

  • 非常感谢您分享这个。我倾向于忘记我是如何创建密钥库的,实际上有两个不同的密码,如果密钥库的密码错误,则会出现异常,但如果另一个丢失,则没有警告,没有错误,日志文件中没有任何内容.
【解决方案2】:

对我来说,一切都在我的本地机器上运行,但是当我尝试在我的 Linux 服务器 (Amazon AWS EC2) 上运行 Spring Boot Server 时,我得到了同样的错误。我在使用 Spring Boot 1.3.x 时没有收到此错误。

我能够通过安装 Oracle JDK 而不是服务器上预安装的 Open JDK 来解决此问题。

这是我遵循的指南:https://gist.github.com/rtfpessoa/17752cbf7156bdf32c59

【讨论】:

    猜你喜欢
    • 2018-10-07
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 2016-12-16
    • 2019-01-13
    • 2014-12-16
    • 1970-01-01
    • 2014-02-04
    相关资源
    最近更新 更多