我有一个奇怪的问题 w.r.t 将 websoket 连接到 spring boot 应用程序(运行 WSS 端点)。基本上我有一个 websoket 客户端,它是我的生产代码的一部分,它应该使用 let's encrypt 证书连接到 EKS 集群中可用的 wss 端点。但是由于某种原因它没有连接并抛出一个异常说明“不是有效的证书路径”。我确信我在双方都使用了正确的证书。
经过一些调查后,我发现 EKS 在握手期间给了我一个 Kubernetes 假证书,而不是出于某种原因让我们加密证书。有趣的是,如果我在生产代码之外编写一个简单的 websoket 客户端,我就可以使用 let's encrypt 证书连接到端点。
仅供引用,我在我的笔记本电脑上运行这两个代码,所以 JVM 环境、证书存储是相同的。以前有没有人遇到过这个问题,或者你能帮我解决我应该开始调查的领域吗?
通过 wireshirk 捕获,我在生产请求和我的示例应用程序请求中看到了以下差异,prod 应用程序中缺少 server_name,不知道为什么。
最佳答案
Java 8基本都会出现这个问题,在一些特定的场景下会出现这种情况。基本上,如果 websocket 端点有一个 IP 和多个主机名,那么 host_name 扩展 header (SNI) 将从客户端提供,如果没有发生,那么您最终可能会遇到诸如获取错误证书等问题。
我用过这个link解决这个问题。基本上我必须使用来自上面链接的 websocket 客户端并提供套接字工厂包装器。
关于spring-boot - 来自 EKS 集群 nginx SSL 终结器的错误证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56594221/