Java 使用自签名证书在Solr SSL设置中禁用主机名验证

Java 使用自签名证书在Solr SSL设置中禁用主机名验证,java,ssl,solr,wildfly-10,self-signed-certificate,Java,Ssl,Solr,Wildfly 10,Self Signed Certificate,我使用Solr作为搜索服务器,并将所有数据保存在Solr中。我使用的是Solr版本5.5.2。 Solr正在SSL模式下运行,具有自签名证书,主机名为localhost。我不能在这里添加主机名,因为在生成证书时,我没有安装主机名的机器名 我正在从wildfly 10连接到此solr服务器。在wildfly 10上,我将我的solr证书添加为受信任的,所以它不会抱怨自签名证书,但由于我的wildfly位于不同的主机上,所以我在URL中使用主机名调用solr,wildfly发出以下错误 Caused

我使用Solr作为搜索服务器,并将所有数据保存在Solr中。我使用的是Solr版本5.5.2。 Solr正在SSL模式下运行,具有自签名证书,主机名为localhost。我不能在这里添加主机名,因为在生成证书时,我没有安装主机名的机器名

我正在从wildfly 10连接到此solr服务器。在wildfly 10上,我将我的solr证书添加为受信任的,所以它不会抱怨自签名证书,但由于我的wildfly位于不同的主机上,所以我在URL中使用主机名调用solr,wildfly发出以下错误

Caused by: org.apache.solr.client.solrj.SolrServerException: IOException occured when talking to server at: https://SOLR_HOST:8983/solr/default_core
        at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:589)
        at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:240)
        at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:229)
        at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:149)
        at org.apache.solr.client.solrj.SolrClient.query(SolrClient.java:974)
        at org.apache.solr.client.solrj.SolrClient.query(SolrClient.java:990)
        at org.springframework.data.solr.core.SolrTemplate$11.doInSolr(SolrTemplate.java:512)
        at org.springframework.data.solr.core.SolrTemplate$11.doInSolr(SolrTemplate.java:509)
        at org.springframework.data.solr.core.SolrTemplate.execute(SolrTemplate.java:168)
        ... 66 more
Caused by: javax.net.ssl.SSLException: Certificate for <SOLR_HOST> doesn't match common name of the certificate subject: localhost
        at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:173)
        at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:61)
        at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:141)
        at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:114)
        at org.apache.http.conn.ssl.SSLSocketFactory.verifyHostname(SSLSocketFactory.java:580)
        at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:554)
        at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:412)
        at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:179)
        at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:328)
        at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:612)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:447)
        at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:884)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
        at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:481)
        ... 74 more
由于我没有将solr服务器暴露在网络之外,所以我只想忽略此错误并禁用主机名验证。这里的HttpClient是由Solrj创建的,并在SolrTemplate中进行管理,因此我们无法按照建议添加自定义策略


基本上我想为我的设置禁用主机名验证。对此的任何建议都将不胜感激。

我从他们的源代码中找到了解决方法。Solr在创建HttpClient对象时正在检查以下属性。默认值为true,如果我们将其设置为false,则Solr不会在SSL中检查主机名

-Dsolr.ssl.checkPeerName=false

将此属性设置到您的wildfly启动脚本或正在运行的任何程序中,它都会正常工作。Solr将不再使用自签名证书的主机名验证URL的主机名。

我从他们的源代码中找到了方法。Solr在创建HttpClient对象时正在检查以下属性。默认值为true,如果我们将其设置为false,则Solr不会在SSL中检查主机名

-Dsolr.ssl.checkPeerName=false
将此属性设置到您的wildfly启动脚本或正在运行的任何程序中,它都会正常工作。Solr将不再使用自签名证书的主机名验证URL的主机名