2016-07-06 6 views
0

다시, Solr에는 몇 가지 문제점이 있습니다. 3 개의 ZooKeeper 인스턴스와 2 개의 Solr 인스턴스로 SolrCloud 클러스터를 설정하려고합니다. 통신은 SSL로 보안되어야합니다. 공식 Solr 위키를 매뉴얼로 사용했습니다 : https://cwiki.apache.org/confluence/display/solr/Enabling+SSLSSL 간 inter-Solr-node 통신

처음 솔라 노드를 시작하면 모든 것이 정상적으로 작동합니다. HTTP S을 통해 웹 UI에 액세스 할 수 있으며 Solr과 ZooKeeper 간의 통신도 가능합니다. 내가 클러스터의 두 번째 SOLR 노드를 시작할 때 나는 다음과 같은 예외를 얻을 :

Error while trying to recover. core=core1_shard2_replica2:java.util.concurrent.ExecutionException: org.apache.solr.client.solrj.SolrServerException: IOException occured when talking to server at: https://ec2-xx-xx-xxx-xx.eu-central-1.compute.amazonaws.com:8983/solr 
    at java.util.concurrent.FutureTask.report(FutureTask.java:122) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:192) 
    at org.apache.solr.cloud.RecoveryStrategy.sendPrepRecoveryCmd(RecoveryStrategy.java:593) 
    at org.apache.solr.cloud.RecoveryStrategy.doRecovery(RecoveryStrategy.java:350) 
    at org.apache.solr.cloud.RecoveryStrategy.run(RecoveryStrategy.java:221) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor.lambda$execute$22(ExecutorUtil.java:229) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.apache.solr.client.solrj.SolrServerException: IOException occured when talking to server at: https://ec2-xx-xx-xxx-xx.eu-central-1.compute.amazonaws.com:8983/solr 
    at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:604) 
    at org.apache.solr.client.solrj.impl.HttpSolrClient.lambda$httpUriRequest$13(HttpSolrClient.java:299) 
    ... 5 more 
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: signature check failed 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949) 
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302) 
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509) 
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) 
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) 
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:914) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) 
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:543) 
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:409) 
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177) 
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304) 
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:611) 
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:446) 
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:882) 
    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:495) 
    ... 6 more 
Caused by: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: signature check failed 
    at sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:352) 
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:260) 
    at sun.security.validator.Validator.validate(Validator.java:260) 
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) 
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229) 
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491) 
    ... 24 more 
Caused by: java.security.cert.CertPathValidatorException: signature check failed 
    at sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:135) 
    at sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:219) 
    at sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:140) 
    at sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:79) 
    at java.security.cert.CertPathValidator.validate(CertPathValidator.java:292) 
    at sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:347) 
    ... 30 more 
Caused by: java.security.SignatureException: Signature does not match. 
    at sun.security.x509.X509CertImpl.verify(X509CertImpl.java:424) 
    at sun.security.provider.certpath.BasicChecker.verifySignature(BasicChecker.java:166) 
    at sun.security.provider.certpath.BasicChecker.check(BasicChecker.java:147) 
    at sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:125) 

는 그래서 SOLR는 자체 서명 된 인증서를 허용하지 않는 것 같다. Solr 위키에 명시된 -Dsolr.ssl.checkPeerName=false 옵션은 효과가 없습니다 (이 매개 변수를 solr.in.sh 스크립트에 넣었습니다). ? 나는 SOLR 6.1 해요 : 나는 지금 아주 우둔 해요 :(

는 아무도 내가 BTW 간 SOLR 노드 통신 작업

를 만들기 위해 무엇을 할 수 있는지 어떤 생각을 가지고 있습니까 인정해야한다. 내가 활성화 0을하기 전에 SSL의 모든 마법처럼 일했다.

감사합니다 많이!

+0

마지막으로, 노드 간 통신이 작동하고 있습니다. 인증서에 대해 Let 's Enrypt를 사용하고 각 노드의 다른 모든 노드에서 인증서를 가져와야합니다. 'Dsolr.ssl.checkPeerName = false'는 - 현재 - 무시되었습니다 : https://issues.apache.org/jira/browse/SOLR-9304 – tbmsu

답변

0

는 자바 클라이언트 코드와 SSL을 사용하는 서버 사이의 데이터 교환 문제가 될 것으로 보인다 예외 정보를 찾고 있습니다. 여기에 관련된 JRE를 아마도 인증서를 신뢰하지 않습니다. 인증서를 신뢰할 수있는 인증서로 표시하려고 할 수 있습니다 (JRE truststore에 포함). JRE 버전을 확인하십시오. truststore를 업데이트하는 단계에 대한 ic 설명서

0

또한 첫 번째 노드의 키 스토어에 두 번째 노드의 인증서를 추가하고 또한 다음과 같은 명령을 통해 두 번째 노드의 키 스토어에 첫 번째 노드의 인증서를 추가 할 수 있습니다

keytool -import -alias ca -file other_node_cert -keystore solr-ssl.keystore.jks

은 다음 당신은 자체 서명 된 인증서를 사용할 수 있습니다.