spring-boot - 来自 EKS 集群 nginx SSL 终结器的错误证书

标签 spring-boot ssl websocket spring-websocket amazon-eks

我有一个奇怪的问题 w.r.t 将 websoket 连接到 spring boot 应用程序(运行 WSS 端点)。基本上我有一个 websoket 客户端,它是我的生产代码的一部分,它应该使用 let's encrypt 证书连接到 EKS 集群中可用的 wss 端点。但是由于某种原因它没有连接并抛出一个异常说明“不是有效的证书路径”。我确信我在双方都使用了正确的证书。

经过一些调查后,我发现 EKS 在握手期间给了我一个 Kubernetes 假证书,而不是出于某种原因让我们加密证书。有趣的是,如果我在生产代码之外编写一个简单的 websoket 客户端,我就可以使用 let's encrypt 证书连接到端点。

仅供引用,我在我的笔记本电脑上运行这两个代码,所以 JVM 环境、证书存储是相同的。以前有没有人遇到过这个问题,或者你能帮我解决我应该开始调查的领域吗?

通过 wireshirk 捕获,我在生产请求和我的示例应用程序请求中看到了以下差异,prod 应用程序中缺少 server_name,不知道为什么。 production request

Sample App request

最佳答案

Java 8基本都会出现这个问题,在一些特定的场景下会出现这种情况。基本上,如果 websocket 端点有一个 IP 和多个主机名,那么 host_name 扩展 header (SNI) 将从客户端提供,如果没有发生,那么您最终可能会遇到诸如获取错误证书等问题。

参见:http://javabreaks.blogspot.com/2015/12/java-ssl-handshake-with-server-name.html?_sm_au_=iVVZj77NHqPn150Q

我用过这个link解决这个问题。基本上我必须使用来自上面链接的 websocket 客户端并提供套接字工厂包装器。

关于spring-boot - 来自 EKS 集群 nginx SSL 终结器的错误证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56594221/

相关文章:

ssl - 当握手后客户端和服务器都经过身份验证时,mTLS 是否更快

.net - 共享 IIS 服务器上的 HTTPS - 浏览器警告

https - IE10 websocket allowInsecureFromHttps

spring - Facebook OAuth 不返回用户的电子邮件

java - Spring Boot 应用程序如何在没有 @Configuration 类的情况下创建 bean

java - 使用 Hibernate 关系的 REST API 请求

apache 将非本地连接的 http 重写为 https

javascript - 易于编程的 WebSocket 服务器

c# - 通过 C# 与 socket.io 服务器通信

java - 当我使用 @Query 时,为方法使用命名参数