2016-07-06 17 views
0

また、私はSolrにいくつかの問題があります。 3つのZooKeeperインスタンスと2つのSolrインスタンスを持つSolrCloudクラスタを設定しようとしています。通信はSSLで保護する必要があります。私は公式のSolr Wikiをマニュアルとして使用しました:https://cwiki.apache.org/confluence/display/solr/Enabling+SSLSSLとの間のSolr-node通信

最初のSolrノードを起動すると、すべて正常に動作します。 HTTP SでWeb UIにアクセスでき、SolrとZooKeeper間の通信も機能します。しかし、クラスタで2番目の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 Wikiに記載されている-Dsolr.ssl.checkPeerName=falseオプションは効果がありません(このパラメータをsolr.in.shスクリプトに入れます)。私は誰もが私が間Solrのノード通信の仕事をするために何ができるか任意のアイデアを持っています今:(

かなり無知だ認めなければならない

ところで:?私はSolrの6.1によ。 0、と私はSSLを有効にする前に、すべてが魅力のように働いた。

どうもありがとうございました!

+0

最後に、ノード間通信が機能しています。 Let's Enryptを証明書に使用し、各ノードの他のすべてのノードから証明書をインポートする必要があります。 'Dsolr.ssl.checkPeerName = false'は - 現在は無視されています:https://issues.apache.org/jira/browse/SOLR-9304 – tbmsu

答えて

0

例外を見ると、Javaクライアント・コードとSSL対応のサーバー間のハンドシェイクの問題のように見える詳しく説明します。JREは、ここに関与証明書を信頼していない可能性があります。証明書を信頼できるものとしてマークすることができます(JREトラストストアにインクルード)。トラストストアを更新する手順については、icのドキュメントを参照してください。

0

また、最初のノードのキーストアに2番目のノードの証明書を追加しても、次のコマンドを使用して、第2のノードのキーストアへの最初のノードの証明書を追加することができます。

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

はその後、自己署名証明書を使用することができます。