如何在 SpringXD 中禁用 "defaultHostnameVerifier" 属性

How to disable "defaultHostnameVerifier" property in SpringXD

我需要在 Q 上发送消息时从我的处理器模块连接到 https URL(假设这里的 q 名称是:readFromQ),然后只记录来自 url GET 调用。我在这里使用 http-client 处理器对 url 进行 GET 调用。 我的信息流如下所示:

stream create --name hitSSL --definition "jms --destination=readFromQ | http-client --url='''https://remoteHost:remotePort/trafficcontrol/''' --http方法=获取 |日志

现在的问题是 URL 向 spring-xd 提供的证书与我尝试访问的主机名不匹配。证书的名称类似于 abc.mycompany.com,而 URL 的主机名是 remoteHost。

Spring XD 抛出: java.security.cert.CertificateException: 找不到与 remoteHost 匹配的名称

我的 cacerts 确实添加了 abc.mycompany.com 证书。

我想知道是否有一种方法可以禁止 SpringXD 在建立 SSL 连接时使用 CN 验证主机名。 有没有办法禁用 java 属性 javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier

注意:我可以使用 "http"

在上面的 URL 上成功执行 GET

我能够覆盖主机名验证。感谢我团队中的人们。

我将 xd-admin 和 xd-container 脚本更新为:

DEFAULT_JVM_OPTS="-javaagent:/opt/spring-xd-1.1.0.M1/xd/lib/HostnameVerifier.jar

这个 HostnameVerifier.jar 是一个 javaagent,它覆盖了 setDefaultHostnameVerifier 属性 中的验证方法,如下所示:

HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier()
    {
      public boolean verify(String s, SSLSession sslSession)
      {
        return true;
      }
    }

现在 SpringXD 不会抱怨连接到的主机和证书中的服务器名称不匹配。