Ik zit met een vaag probleem.
Ik ben aan het proberen om een LDAP server te bereiken met java.
Als ik de server probeer te bereiken zonder ssl inciptie gaat alles goed.
Nu moet ik de server gaan laten werken met ssl incriptie. Dus ik met openssl een certificaat aangemaakt.
Volgens deze howto OpenLDAP_TLS_howto
Daarna het cacert.pem geimporteerd in een keystore van java met het volgende commando
En in java met de volgende code probeer ik verbinding te maken:
Nu kan ik dus in de dump zien dat het certificaat uit de keystore wordt toegevoegd aan de trusted certificaten
maar als hij verbinding wil maken krijg ik dit te zien
En er dus geen connectie wordt opgezet.
Ik kan uit deze dump + de dump van ethereal halen dat het de javaclient is die het certificaat niet vertrouwed (en dus niet de ldap-server)
Nu worden er bij het maken van de certificaten nog 2 files gemaakt.
serverkey.pem en servercrt.pem.
Ik dacht misschien moet ik servercrt.pem ook wel importeren in de keystore. maar dan krijg ik de volgende foutmelding:
Dus dat lijkt me niet goed
Ik denk dat het iets met de keystore te maken heeft. maar ik kan maar niet achterhalen wat het is.
Ik ben aan het proberen om een LDAP server te bereiken met java.
Als ik de server probeer te bereiken zonder ssl inciptie gaat alles goed.
Nu moet ik de server gaan laten werken met ssl incriptie. Dus ik met openssl een certificaat aangemaakt.
Volgens deze howto OpenLDAP_TLS_howto
Daarna het cacert.pem geimporteerd in een keystore van java met het volgende commando
code:
1
| keytool -import -alias serverCert -file cacert.pem -keystore server.keystore |
En in java met de volgende code probeer ik verbinding te maken:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| public DirContext connect(String to, String admin, String passwd){ String path = "C:\\server.keystore"; DirContext ctx = null; Attributes answer = null; System.setProperty("javax.net.debug","all"); //dumpt alle debugcode System.setProperty("javax.net.ssl.trustStore", path); //zet de trustkeystore System.setProperty("javax.net.ssl.keyStorePassword",".....");//keystore password Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, to); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, admin); env.put(Context.SECURITY_CREDENTIALS, passwd); try { ctx = new InitialDirContext(env); } catch (AuthenticationException e) { System.err.println(e.getMessage()); // attempt to reacquire the authentication information } catch (NamingException e){ // Handle the error System.err.println("[DEBUG ERR] " + e); e.printStackTrace(); } return ctx; } |
Nu kan ik dus in de dump zien dat het certificaat uit de keystore wordt toegevoegd aan de trusted certificaten
code:
1
2
| adding as trusted cert: Subject: CN=dev00...... |
maar als hij verbinding wil maken krijg ik dit te zien
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| init context trigger seeding of SecureRandom done seeding SecureRandom [......] [read] MD5 and SHA1 hashes: len = 74 AWT-EventQueue-0, READ: TLSv1 Handshake, length = 910 AWT-EventQueue-0, SEND TLSv1 ALERT: fatal, description = certificate_unknown AWT-EventQueue-0, WRITE: TLSv1 Alert, length = 2 AWT-EventQueue-0, called closeSocket() AWT-EventQueue-0, handling exception: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found [DEBUG ERR] javax.naming.CommunicationException: simple bind failed: 172.20.220.145:636 [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found] |
En er dus geen connectie wordt opgezet.
Ik kan uit deze dump + de dump van ethereal halen dat het de javaclient is die het certificaat niet vertrouwed (en dus niet de ldap-server)
Nu worden er bij het maken van de certificaten nog 2 files gemaakt.
serverkey.pem en servercrt.pem.
Ik dacht misschien moet ik servercrt.pem ook wel importeren in de keystore. maar dan krijg ik de volgende foutmelding:
code:
1
| keytool error: java.lang.Exception: Input not an X.509 certificate |
Dus dat lijkt me niet goed
Ik denk dat het iets met de keystore te maken heeft. maar ik kan maar niet achterhalen wat het is.