在 WildFly/CXF Web 服务客户端中使用 DefaultSSLSocketFactory

Use DefaultSSLSocketFactory in WildFly/CXF Webservice client

我希望有人能帮我解决这个问题。我正在使用以下内容:

我正在处理与 HTTPS 握手中与 SNI 相关的合作伙伴端点的集成问题。跟随另一个站点 (here) I have been able to create a custom SSLSocketFactory and set that as the default SSLSocketFactory, but then I ran into the issue where CXF does not use the default SSLSocketFactory(here)。因此,我还没有找到一种方法来通知 CXF 通过配置使用默认的 SSLSocketFactory。

通过调试,我能够将 TLSClientParameters 上的 httpsURLConnectionDefaultHostnameVerifier 设置为 true,并确认这可以解决问题。我还看到许多帖子暗示可以通过配置文件(JBoss WS config 或 CXF config)或作为启动参数来设置此值,但我一直无法找到一种方法这个。

有没有其他人能够做到这一点,如果可以,您能分享一下怎么做吗?

因此,对于这个特定问题,我能找到的唯一答案是非常粗暴的 force/ugly,但希望它可以在以后减轻一些人的痛苦。

  1. 我创建了一个自定义 SSLSocketFactory 并将其设置为默认值 启动。
  2. 这个工厂将return一个自定义连接 扩展 CXF 的实现扩展了 SOAPConnectionImpl 这会将 setUseHttpsURLConnectionDefaultSslSocketFactory 设置为 在 TLSClientParameters 上为真。
  3. 这个是在URLConnectionHTTPConduit上依次设置的
  4. 最后我不得不使用 ThreadLocal class 来保存自定义 SSLSocketFactory
  5. 使用的主机名