问题描述
这是我的情况。我有两个主机 HostA 和 HostB。我们在 HostA 上触发工作流。 HostA 将此工作流传递给 HostB 以实际处理它。现在一个工作流由 5 个作业组成。作业完成后,HostB 必须通知 HostA 工作流中的一项作业已完成。为了传递此信息,HostB 充当客户端并验证 HostA 证书,并且出于所有真实原因在验证时抛出异常。这会导致 SSLHandshake 失败。因此,HostA 中的工作流状态永远挂在进行中状态,因为 HostB 无法访问 HostA。 HostB 有一个基于 Java 的实现。我们创建我们的休息客户端 (apache.cxf) 并向其添加一个 TLS 验证器。我们有自己的此验证器的自定义实现。
我想知道的是有什么方法或设计可以解决这个问题。我不希望在证书验证失败时进行通信,但我确实希望服务器(在本例中为 HostA)被告知 SSLHandshake 失败。
截至目前,我能想到的唯一解决方案是在尝试访问 HostA 的方法中捕获异常,检查它是否为 SSLHandshakeException,然后将错误传播到带有不验证的其余客户端的服务器证书。
如果有其他更好的解决方案,我想知道。 感谢您花时间浏览内容。
解决方法
也许你可以通过 http 或使用套接字和另一个端口公开一些小东西
我正在使用一个站点,该站点不断更改证书,定期出现很多 ssl 异常... 我们安排了一个工作,每天用证书存储验证 url,如果失败,则使用新证书更新存储 (sh + curl + openssl)