【发布时间】:2017-05-20 06:06:03
【问题描述】:
我正在使用 java LDAP 客户端,但我仍然缺少有关如何正确执行此操作的一些信息或知识。
我的代码如下所示:
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
}
此时发生以下事情:
- 在调试 ssl 连接时,我看到我的 LDAP 服务器和我的程序之间建立了 TLSv1 连接。
- 我在 ssl 握手时看到我的客户端和服务器的以下信息:
*** ClientHello, TLSv1.2和*** ServerHello, TLSv1
我现在缺少的东西:
- 我添加了一个要包含的密码,但我在客户的问候消息中提供的支持密码列表中没有看到它
- 我没有在他的 hello 消息中指定我的客户提供 TLS1.2,该设置来自哪里?
- 我希望能够确定自己是否要使用 TLS 或 SSL,以及将使用哪个版本的 TLS 或 SSL,我该如何实现? (所以我可以例如只允许 TLS 1.1 和 1.2)
【问题讨论】:
-
您如何查看ClientHello? clientHello 将看到客户端知道的“密码套件”列表,按客户端偏好排序,如注册表中所示:iana.org/assignments/tls-parameters/…
-
我正在使用
-Djavax.net.debug=ssl:session来调试 Netbeans 中的 ssl 连接。我可以看到密码列表,但它不包括我添加的密码env.put("java.naming.security.ssl.ciphers", "SSL_RSA_EXPORT_WITH_RC4_40_MD5"); -
SSL_RSA_EXPORT_WITH_RC4_40_MD5,认真的吗?您可以放弃加密。 -
@Michael-O 仅用于演示目的,所以不用担心^^ 我必须添加一个以前不存在的,所以我只剩下“不安全”的了。
-
看来
java.naming.security.ssl.ciphers仅受“IBM JNDI LDAP 提供程序”支持,Sun/Oracle 不支持。