[java/ssl/jndi] No trusted certificate found

Pagina: 1
Acties:

  • Thyzz
  • Registratie: September 2001
  • Laatst online: 24-05 16:03

Thyzz

-=leeg=-

Topicstarter
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
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 :P
Ik denk dat het iets met de keystore te maken heeft. maar ik kan maar niet achterhalen wat het is.

5325wp


  • Thyzz
  • Registratie: September 2001
  • Laatst online: 24-05 16:03

Thyzz

-=leeg=-

Topicstarter
klein schopje

5325wp