2017-01-05 20 views
1

私はJava LDAPクライアントで作業していますが、これを正しく行う方法に関する情報や知識がまだ不足しています。Java LDAP接続でSSL/TLSバージョンを指定する方法は?

私のコードは次のようになります

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 
} 

次のことは、現時点では起こら:

  • 私はTLSv1の接続が私のLDAP-Serverの間で確立なっていることがわかり、SSL接続をデバッグします私のプログラマー。私は含まれる暗号を追加

    • をしかし:私は今欠けているもの*** ClientHello, TLSv1.2*** ServerHello, TLSv1

    :私は、SSLハンドシェイク時に私のクライアント&サーバーに対して以下を参照してください

  • 私はクライアントのハローメッセージで提供されているサポートされている暗号のリストでそれを見ることはできません
  • 私のクライアントが自分のハローメッセージでTLS1.2を提供するよう指定していませんでした。
  • TLSまたはSSLを使用したい場合、TLSまたはSSLのいずれのバージョンを使用するかを自分で判断できたらどうすればいいですか? (だから、例えばTLS 1.1だけ許可することができます& 1.2)
+0

どのようにClientHelloを見ていますか? clientHelloは、クライアントが知っている "暗号スイート"のリストを、レジストリに表示されているようにクライアントの好みによって並べ替えます:https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls -parameters-4 – jwilleke

+0

私は '-Djavax.net.debug = ssl:session'を使ってNetbeansのssl接続をデバッグしています。私は暗号リストを見ることができますが、 'env.put(" java.naming.security.ssl.ciphers "、" SSL_RSA_EXPORT_WITH_RC4_40_MD5 ");' – Alkahna

+0

'SSL_RSA_EXPORT_WITH_RC4_40_MD5'で真に追加した暗号は含まれていません。暗号化を解除することができます。 –

答えて

-1

どのjavaバージョンを使用しますか? ldapサーバーがTLSv1.2をサポートしていないようです ldapサービス用に専用のsslソケットファクトリを指定する必要があります。

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

質問について質問がある場合は、コメントを使用してください。 – Sid

0

サーバーをスキャンしてから、時間が無駄になる可能性があります。 https://github.com/rbsec/sslscan

サーバーでTLS 1.0のみがサポートされている可能性があります。

関連する問題