2017-01-05 5 views
1

Im travaillant sur un client LDAP java et il me manque encore des informations ou des connaissances sur la façon de le faire correctement.Comment spécifier la version SSL/TLS sur une connexion Java LDAP?

Mon code ressemble à ceci:

LdapContext ctx = null; 
Hashtable<String, String> env = new Hashtable <String, String>(); 
try{ 
    env.clear(); 
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
    env.put(Context.PROVIDER_URL, "url"); 
    env.put(Context.SECURITY_PRINCIPAL, "user"); 
    env.put(Context.SECURITY_CREDENTIALS, "password"); 
    env.put(Context.SECURITY_PROTOCOL, "ssl"); 
    env.put("java.naming.security.ssl.ciphers", "SSL_RSA_EXPORT_WITH_RC4_40_MD5"); 
    ctx = new InitialLdapContext(env, null); 
} catch(NamingException nex) { 
    // error handling 
} 

Les choses suivantes se produisent au moment:

  • Lors du débogage de la connexion ssl Je vois qu'une connexion TLSv1 est en cours d'établissement entre mon LDAP serveur et mon programme.
  • Je vois ce qui suit pour mon serveur client & sur poignée de main ssl: *** ClientHello, TLSv1.2 et *** ServerHello, TLSv1

Les choses que je me manque en ce moment:

  • J'ai ajouté un chiffre à être inclus, mais Je ne le vois pas dans la liste des chiffrements supportés dans le message Hello de mon client
  • Je n'ai pas spécifié que mon client offre TLS1.2 dans son message hello, d'où vient ce paramètre?
  • Je voudrais être en mesure de déterminer moi-même si je veux utiliser TLS ou SSL et quelle version de TLS ou SSL va être utilisée, comment puis-je y parvenir? (Ainsi je peux par exemple seulement permettre TLS 1.1 1.2)
+0

Comment visualisez-vous le ClientHello? Le clientHello affichera la liste des "suites de chiffrement" que le client connait, classées par préférence client, comme indiqué dans le registre: https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls -parameters-4 – jwilleke

+0

J'utilise '-Djavax.net.debug = ssl: session' pour déboguer la connexion ssl dans Netbeans. Je peux voir la liste de chiffrement mais il n'inclut pas le chiffre que j'ai ajouté avec 'env.put (" java.naming.security.ssl.ciphers "," SSL_RSA_EXPORT_WITH_RC4_40_MD5 ");' ' – Alkahna

+0

' SSL_RSA_EXPORT_WITH_RC4_40_MD5', sérieusement? Vous pouvez supprimer le cryptage. –

Répondre

-1

quelle version de java utilisez-vous? Il semble que le serveur ldap ne supporte pas TLSv1.2 vous devez spécifier une fabrique de socket ssl dédiée pour le service ldap.

env.put("java.naming.ldap.factory.socket", CustomTLSSSLSocketFactory.class.getName); 

CustomTLSSSLSocketFactory extends SSSLSocketFactory { 
public CustomTLSSSLSocketFactory() { 
TrustManagerFactory factory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
     factory.init((KeyStore) null); 
     TrustManager[] defaultTrustManagers = factory.getTrustManagers(); 

     // create the real socket factory 
     SSLContext sc = SSLContext.getInstance("TLS"); //$NON-NLS-1$ 
     sc.init(null, defaultTrustManagers, null); 
     delegate = sc.getSocketFactory(); 
    } 
} 
+0

Si vous avez des questions sur la question, s'il vous plaît utiliser des commentaires. – Sid

0

Scannez d'abord votre serveur avant de perdre votre temps pour des choses qui ne fonctionnent probablement pas du tout. Utilisez:

Il se peut que votre serveur prenne uniquement en charge TLS 1.0.