org.jolokia.client.exception.J4pException:联系服务器时出现IO错误:javax.net.ssl.SSLException:证书中的主机名并不匹配

时间:2016-08-03 15:49:04

标签: java ssl hawtio jolokia

我正在使用jolokia客户端连接到我的保险丝服务器,该服务器使用https for web。我得到以下例外。

org.jolokia.client.exception.J4pException:联系服务器时出现IO错误:javax.net.ssl.SSLException:证书中的主机名并不匹配:< 10.16.205.20> !=     在org.jolokia.client.J4pClient.mapException(J4pClient.java:333)     在org.jolokia.client.J4pClient.execute(J4pClient.java:198)     在org.jolokia.client.J4pClient.execute(J4pClient.java:168)     在org.jolokia.client.J4pClient.execute(J4pClient.java:117)

我已经将10.16.205.20的证书导入到我的客户端应用程序运行jolokia客户端的本地truststrore(cacerts)。我还验证了hosts文件有10.16.205.20服务器上的证书中使用的域的条目。我正在使用以下代码进行连接。

J4pClient client = J4pClient.url(baseUrl).user(user.getName()).password(user.getPassword()).authenticator(new BasicAuthenticator().preemptive()).build();
            J4pExecRequest request = new J4pExecRequest("org.apache.karaf:type=bundles,name=root","list");
            J4pExecResponse response = client.execute(request);
            JSONObject obj = response.asJSONObject();
            ((CloseableHttpClient)client.getHttpClient()).close();

此代码在使用http部署的服务器上运行良好。如果我遗失了什么,请告诉我。

1 个答案:

答案 0 :(得分:-1)

您需要让您的客户端使用绕过此检查的ConnectionSocketFactory。

例如,看下面的代码(代码是Kotlin,但我想您可以轻松地将其翻译为java)

val sslCtx: SSLContext = SSLContexts
    .custom()
    .loadTrustMaterial(null, TrustSelfSignedStrategy())
    .build()

val cf: ConnectionSocketFactory = SSLConnectionSocketFactory(sslCtx, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)

J4pClient.url(s.jolokiaUrl)
    .sslConnectionSocketFactory(cf)
    .connectionTimeout(timeout.toMillis().toInt())
    .build()