2017-05-10 3 views
0

Ich habe eine Keystore-Datei, die gut funktioniert. Ich habe es mit dem folgenden Befehl getestet ::Kann KeyStore-Datei in Qpid Config nicht laden

[email protected] # java -Djavax.net.ssl.trustStore=/tmp/apache-servicemix-7.0.0/deploy/qpid.jks SSLPoke esesslx0ghk.se 9443 
Successfully connected 

Jetzt habe ich ServiceMix bin mit einem qpid applcation zu routen Warteschlangen zu implementieren.

Meine Config ist wie folgt ::

<bean id="amqp" class="org.apache.camel.component.amqp.AMQPComponent"> 
    <property name="connectionFactory"> 
     <bean class="org.apache.qpid.jms.JmsConnectionFactory"> 
     <property name="remoteURI" value="amqps://esesslx0ghk.se:9443?transport.keyStoreLocation=/tmp/apache-servicemix-7.0.0/deploy/qpid.jks&amp;transport.keyStorePassword=test123" /> 
     </bean> 
    </property> 
    </bean> 

Aber wenn ich meine Anwendung laufen lasse, erhalte ich die Fehlermeldung ::

2017-05-10 17:30:02,591 | ERROR | mer[CSDP_output] | JmsConnectionFactory    | 226 - qpid-jms-client.jar - 0.0.0 | Failed to create JMS Provider instance for: amqps 
2017-05-10 17:30:02,619 | ERROR | mer[CSDP_output] | faultJmsMessageListenerContainer | 155 - org.apache.servicemix.bundles.spring-jms - 3.2.17.RELEASE_1 | Could not refresh JMS Connection for destination 'CSDP_output' - retrying in 5000 ms. Cause: Failed to create connection to: amqps://esesslx0ghk.se:9443?transport.keyStoreLocation=%252Ftmp%252Fapache-servicemix-7.0.0%252Fdeploy%252Fqpidd.jks&transport.keyStorePassword=test123; nested exception is javax.net.ssl.SSLHandshakeException: General SSLEngine problem 
javax.jms.JMSException: Failed to create connection to: amqps://esesslx0ghk.se:9443?transport.keyStoreLocation=%252Ftmp%252Fapache-servicemix-7.0.0%252Fdeploy%252Fqpidd.jks&transport.keyStorePassword=test123 


Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem 
     at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1478)[:1.8.0_121] 
     at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535)[:1.8.0_121] 
     at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:813)[:1.8.0_121] 
     at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781)[:1.8.0_121] 
     at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)[:1.8.0_121] 


Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
     at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387)[:1.8.0_121] 
     at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)[:1.8.0_121] 
     at sun.security.validator.Validator.validate(Validator.java:260)[:1.8.0_121] 
     at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)[:1.8.0_121] 
     at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:281)[:1.8.0_121] 
     at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:136)[:1.8.0_121] 
     at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1501)[:1.8.0_121] 
     ... 21 more 
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
     at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)[:1.8.0_121] 
     at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)[:1.8.0_121] 

nun auf der einen Seite Ich bin 100% sicher, dass der Schlüsselspeicher Datei, die ich habe, ist korrekt und sein Pfad ist richtig konfiguriert. Aber die Anwendung kann es nicht aufnehmen. Stimmt etwas nicht mit dieser Linie?

<property name="remoteURI" value="amqps://esesslx0ghk.se:9443?transport.keyStoreLocation=/tmp/apache-servicemix-7.0.0/deploy/qpidd.jks&amp;transport.keyStorePassword=test123" /> 

Antwort

2

Sie reicht dem Kunden einen Schlüsselspeicher, aber im Allgemeinen sollten Sie ihm einen Vertrauensspeicher aushändigen, wie das ist, was den Kunden sagt, welche Serverzertifikate er vertraut. Sie geben nur einen Schlüsselspeicher, wenn Sie eine gegenseitige Authentifizierung durchführen, und der Client muss der Remote ein Zertifikat bereitstellen.

Mein erster Vorschlag wäre, den transport.trustStoreLocation wie im Client documentation definiert zu setzen.

Wenn das nicht funktioniert, dann ist es Zeit zu brechen und einige Debugging der SSL handshake.

+0

Danke. Es wurde in 'transport.trustStoreLocation' geändert. –

Verwandte Themen