2017-04-10 2 views
1

Ich brauche Hilfe bei der Verbindung zu Apache Directory Server mit SSL. Ich kann eine Verbindung zum LDAP-Server herstellen, aber wenn ich versuche, eine Verbindung mit LDAPS herzustellen, erhalte ich immer Fehler. Ich habe TSLv1.2 Protokoll in der Serverkonfiguration aktiviert und noch kein Glück. Ich habe die Apache-Bedienungsanleitung genau befolgt und habe immer noch kein Glück!Wie verbinde ich mich mit ApacheDS mit SSL?

Hier ist mein Code versucht API Apache LDAP-Client zu verbinden:

Edit: Ich habe den Manager Vertrauen.

public class SecureP2P { 

public static void main(String[] args) throws LdapException, IOException, NamingException { 

    LdapConnectionConfig config = new LdapConnectionConfig(); 
    config.setLdapHost(Network.LOOPBACK_HOSTNAME); 
    config.setLdapPort(10636); 
    config.setUseSsl(true); 
    config.setEnabledProtocols("TLSv1.2"); 
    config.setSslProtocol("TLSv1.2"); 
    config.setTrustManagers(new NoVerificationTrustManager()); 

    LdapConnection connection = new LdapNetworkConnection(config); 
    connection.connect(); 
    connection.bind("uid=admin,ou=system", "secret"); 
    connection.unBind(); 
    connection.close(); 
} 
} 

Fehlermeldung von Auftraggeber:

WARN : org.apache.directory.ldap.client.api.LdapNetworkConnection - SSL 
handshake failed. 
javax.net.ssl.SSLHandshakeException: SSL handshake failed. 
at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:519) 
atorg.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:947) 
at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:109) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:535) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:703) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:659) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:648) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:68) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1120) 
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) 
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: javax.net.ssl.SSLHandshakeException: General SSLEngine problem 
at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1431) 
at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535) 
at sun.security.ssl.SSLEngineImpl.writeAppRecord(SSLEngineImpl.java:1214) 
at sun.security.ssl.SSLEngineImpl.wrap(SSLEngineImpl.java:1186) 
at javax.net.ssl.SSLEngine.wrap(SSLEngine.java:469) 
at org.apache.mina.filter.ssl.SslHandler.handshake(SslHandler.java:601) 
at org.apache.mina.filter.ssl.SslHandler.messageReceived(SslHandler.java:360) 
at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:500) 
... 15 more Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem 
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 
at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1728) 
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:304) 
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$1.run(Handshaker.java:919) 
at sun.security.ssl.Handshaker$1.run(Handshaker.java:916) 
at java.security.AccessController.doPrivileged(Native Method) 
at sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1369) 
at org.apache.mina.filter.ssl.SslHandler.doTasks(SslHandler.java:793) 
at org.apache.mina.filter.ssl.SslHandler.handshake(SslHandler.java:567) 
... 17 more 
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) 
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) 
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:281) 
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:136) 
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1496) 
... 25 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) 
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) 
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) 
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) 
... 31 more 
Exception in thread "main" org.apache.directory.api.ldap.model.exception.LdapProtocolErrorException: PROTOCOL_ERROR: The server will disconnect! 
at org.apache.directory.api.ldap.model.message.ResultCodeEnum.processResponse(ResultCodeEnum.java:2169) 
at org.apache.directory.ldap.client.api.AbstractLdapConnection.bind(AbstractLdapConnection.java:129) 
at org.apache.directory.ldap.client.api.AbstractLdapConnection.bind(AbstractLdapConnection.java:112) 
at edu.fau.security.network.SecureP2P.SecureP2P.main(SecureP2P.java:26) 

Fehlermeldung von Server:

[13:21:10] WARN [org.apache.directory.server.ldap.LdapProtocolHandler] - 
Unexpected exception forcing session to close: sending disconnect notice to 
client. 
javax.net.ssl.SSLHandshakeException: SSL handshake failed. 
at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:519) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:943) 
at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:109) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:535) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:697) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:651) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:640) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:68) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1097) 
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) 
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: javax.net.ssl.SSLException: Received fatal alert: certificate_unknown 
at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) 
at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1666) 
at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1634) 
at sun.security.ssl.SSLEngineImpl.recvAlert(SSLEngineImpl.java:1800) 
at sun.security.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:1083) 
at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:907) 
at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781) 
at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624) 
at org.apache.mina.filter.ssl.SslHandler.unwrap(SslHandler.java:753) 
at org.apache.mina.filter.ssl.SslHandler.unwrapHandshake(SslHandler.java:688) 
at org.apache.mina.filter.ssl.SslHandler.handshake(SslHandler.java:574) 
at org.apache.mina.filter.ssl.SslHandler.messageReceived(SslHandler.java:359) 
at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:500) 
... 15 more 

ich nicht bekommen, die "Certificate Unbekannte Ausnahme" vom Server. Selbst wenn ich versuche, Apaches Directory Studio für die Verbindung mit dem Server mit SSL zu verwenden, wird es sich trotzdem nicht authentifizieren! Das Zertifikat wird von ApacheDS generiert, so dass ich nicht weiß, was das Problem ist. Das ist wirklich frustrierend.

+0

Haben Sie das Zertifikat des Servers (es sieht wie selbstsigniert aus) in den lokalen Client-Keystore importiert? –

+0

@ JonSampson Hey Jon, danke für die schnelle Antwort. Ich habe vergessen, in meiner Konfiguration hinzuzufügen, dass ich einen "NoVerificationTrustManager" verwendet habe, so dass der Client jedes Zertifikat akzeptieren sollte, ohne es zu verifizieren. Und ich habe auch die Option, dem Zertifikat in Apache Directory Studio zu vertrauen und immer noch kein Glück. Die Verbindung ist gut, es ist die Authentifizierung Ich habe ein Problem mit – LR07

Antwort

1

Ich konnte das Problem lösen. Ich habe ein Zertifikat mit Keytool erstellt und es in den Keystore für die ApacheDS-Konfiguration importiert. Ich konnte über LDAPS verbunden und authentifiziert werden. Ich verstehe einfach nicht, warum das von ApacheDS generierte Zertifikat nicht vom Apache Directory Studio-Client akzeptiert wird.

+0

Gut finden. Möglicherweise verwendete das Standardzertifikat einen Algorithmus, der von Ihrer JVM nicht unterstützt wird. Scheint allerdings etwas weit hergeholt. – mvreijn

0

Sicher haben Sie ein Fall von selbst signierten Serverzertifikat nicht vom Client akzeptiert wird, erkenne ich alle Zeichen.

Sie erwähnen eine NoVerificationTrustManager Klasse (nie eine sehr gute Idee, durch die Art und Weise - besser eine trust erstellen, die ein konfigurierte Zertifikat oder Schlüsselspeicher lesen) aber ich bezweifle, dass es tatsächlich verwendet wird.

Ich denke, mit Apache API müssen Sie eine spezifische TrustManager mit der Methode LdapConnectionConfig.setTrustManagers(TrustManager... tms).

Andernfalls müssen Sie einen Weg finden, um sicherzustellen, dass Ihre TrustManager wirklich verwendet wird.

+0

Hey vielen Dank für die Antwort. Ich habe meinen Code bearbeitet und den Trust-Manager hinzugefügt. Es hat immer noch nicht funktioniert. Aber ich habe einen Weg gefunden, die LDAPS zu umgehen. Ich habe das Passwort des Admins geändert, um ein einfacher Text anstatt mit dem SHA-Algorithmus zu sein, und konnte schließlich eine Verbindung herstellen und authentifiziert werden. Aber wenn ich auf der Server-Seite Passwort Hashing einschalten sollte es nicht funktionieren? – LR07

Verwandte Themen