2016-09-21 4 views
0

Ich benutze Spring-Vorlage, um eine Verbindung zu LDAP-Server über SSL. Ich benutzte den folgenden Befehl ein SSL-Zertifikat von Server zu speichern:Keine Verbindung zum LDAP-Server über ssl mit Spring-Vorlage

echo -n | openssl s_client -connect <ldapserverip>:<port> | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ldapserver.pem 

Dann ging zu/jre/lib/security und ausgeführt, um den folgenden Befehl ein Zertifikat cacerts hinzuzufügen.

keytool -import -keystore cacerts -file ldapserver.pem 

prüft dann die Zählung in der Liste der Einträge in cacerts dem Befehl:

keytool -list -keystore cacerts 

ich die Anwendung in tomcat und tomcat auf gleiche JDK_HOME wird darauf leite.

Ich bekomme die folgende Ausnahme in tomcat während der Anmeldung mit authenticate() in ldapTemplate mit Feder.

Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

Es funktionierte gut mit Nur-Text (ohne https). Ich habe versucht, VMArguments auch zu setzen, aber keiner von ihnen hat funktioniert.

-Djavax.net.ssl.trustStore="<path to cacerts file>" 
-Djavax.net.ssl.trustStorePassword="<passphrase>" 

Wie kann ich dieses Problem lösen?

Dank

+0

Wenn Sie die '-showcerts' Option mit openssl verwenden können Sie alle Zertifikate in der Kette bis zu der ausstellenden Zertifizierungsstelle sehen Alle Zwischenzertifikate müssen ebenfalls importiert werden. – mvreijn

+0

Dank mvreijn, wie Sie alle Zertifikate in der Kette bis zur Ausstellung von CA erhalten. Ich versuchte -showcerts Option, aber es sagt ungültige Option für openssl. – user1188867

+0

-showcerts funktioniert gut, aber es zeigt nicht alle Zertifikate und in der letzten Zeile bekomme ich "Überprüfen Sie Return-Code: 21 (nicht in der Lage, das erste Zertifikat zu überprüfen)". Gibt es einen Befehl, um die gesamte Zertifikatskette zu bekommen, damit ich sie direkt in meine Cacerts importieren kann? – user1188867

Antwort

1

Vertrauenskette gebrochen ist es aussieht. Zwei mögliche Gründe.

  1. Das Zertifikat vom Server ist kein einzelnes Zertifikat, sondern eine Kette bis zur Stammzertifizierungsstelle und Sie haben nur eine importiert. Sie müssen diese vollständige Kette überprüfen und importieren.

    a. Um die Zertifikatskette zu überprüfen, lassen Sie sie unter Verwendung von openssl ab:

    >openssl s_client -showcerts -connect host:port 
    

    b. Um die Kette zu importieren, müssen Sie entweder PEM in PKCS # 7 konvertieren oder teilen.

    i. Convert PEM to PKCS#7

    ii. Split

  2. Verwenden Sie beim Importieren des Zertifikats die Option "-trustcacerts", damit Zertifikate aus dem Keystore für die Vertrauenskette berücksichtigt werden.

    >keytool -import -trustcacerts -file /path/ldapserver.pem -alias somealias -keystore /security/cacerts 
    
+0

Danke Roshith, wie man die komplette Kette bis zum Root CA bekommt.Gibt es einen Befehl, um die komplette Kette zu bekommen – user1188867

+0

Versucht mit -trustcacerts immer noch den gleichen Fehler – user1188867

+0

@ user1188867 Ich habe die Antwort aktualisiert. – Roshith

Verwandte Themen