2016-07-06 18 views
0

Auch hier habe ich Probleme mit Solr. Ich versuche, einen SolrCloud-Cluster mit drei ZooKeeper-Instanzen und zwei Solr-Instanzen einzurichten. Die Kommunikation sollte mit SSL gesichert werden. Ich habe das offizielle Solr-Wiki als Handbuch benutzt: https://cwiki.apache.org/confluence/display/solr/Enabling+SSLInter-Solr-Knoten Kommunikation mit SSL

Wenn ich den ersten Solr-Knoten starte funktioniert alles einwandfrei. Ich kann über HTTP S auf die Web-UI zugreifen und die Kommunikation zwischen Solr und ZooKeeper funktioniert auch. Aber wenn ich den zweiten Solr Knoten in meinem Cluster starten erhalte ich die folgende Ausnahme:

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) 

So scheint es, dass Solr nicht das selbst signierte Zertifikat nicht akzeptiert. Die im Solr-Wiki angegebene Option -Dsolr.ssl.checkPeerName=false hat keine Auswirkung (ich habe diesen Parameter in das Skript solr.in.sh gesetzt). Ich muss zugeben, dass ich jetzt ziemlich ratlos bin :(

Hat jemand eine Ahnung, was ich tun konnte, die Inter-Solr-Knoten Kommunikationsarbeit zu machen

BTW: Ich bin auf Solr 6.1. 0, und bevor ich SSL alles aktiviert funktionierte wie ein Zauber.

vielen Dank!

+0

Schließlich funktioniert die Kommunikation zwischen den Knoten. Wir verwenden Let's Enrypt für die Zertifikate und wir müssen die Zertifikate von allen anderen Knoten in jedem Knoten importieren. Der 'Dsolr.ssl.checkPeerName = false' wird - wie heute - ignoriert: https://issues.apache.org/jira/browse/SOLR-9304 – tbmsu

Antwort

0

an Ausnahme Details der Suche es ein Handshake-Problem zwischen Java-Client-Code und dem SSL-fähiger Server. die JRE beteiligt zu sein scheint hier vertraut wahrscheinlich nicht dem Zertifikat Sie können versuchen, das Zertifikat als vertrauenswürdig zu markieren (in JRE-Truststore enthalten) ic-Dokumentation für Schritte zum Aktualisieren von Truststore.

0

Sie können auch zweiten Knoten des Zertifikats an den ersten Knoten des Schlüsselspeicher hinzufügen und auch erste Knoten des Zertifikats an den zweiten Knoten des Schlüsselspeichers über folgenden Befehl hinzufügen:

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

Dann können Sie selbst signiertes Zertifikat verwenden.