我们的 mongo java 驱动程序和监控线程有问题。
我们正在运行 3 个服务器副本集,并使用主机名连接我们的 Spring Boot 微服务。
mongodb://<username>:<password>@A:27017,B:27017,C:27017/?tls=true
到目前为止,我们一直使用非反应式 mongo 驱动程序,一切正常。但是我现在想使用响应式/netty 版本,我们得到了一个java.security.cert.CertificateException
,因为它试图通过 IP 而不是主机名来验证替代名称。
我通过库进行了调试,并且能够看到当 Replicaset 线程的监控线程启动时,它们正在接收{hello: 1}
IP 而不是主机名。
- 监控线程通过主机名连接 --> 一切正常
- 随着监控线程的第一个状态请求,它们接收主机作为 IP
- Mongo 驱动程序使用 IP 地址更新监控集群的副本集并删除主机名
- 新的 IP 监控线程已启动并尝试 hello 命令
- 由于 IP 验证主机名,命令失败
似乎这适用于非反应性,因为 IP 被解析Inet4Address
并因此再次获得正确的主机名。
有人对此有解决方案吗?除了
- 添加 IP 作为证书的替代名称(IP 可能会更改)
- 允许无效的主机名(sslInvalidHostNameAllowed 选项)
是否我们在服务器端配置了一些东西,所以 mongo 返回主机名而不是 IP?
提前谢谢你。