[英]Finding JNDI/LDAP Connection Security Protocol
我正在使用Java(8)连接到LDAP服务器以获取一些信息。 我正在通过SSL进行此操作,但无法确定是否确实使用了我指定的安全协议。
这是我的代码:
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.SECURITY_PRINCIPAL, "user");
env.put(Context.SECURITY_CREDENTIALS, "password");
env.put(Context.SECURITY_PROTOCOL, "ssl");
env.put("com.sun.jndi.ldap.read.timeout", 5000);
env.put("com.sun.jndi.ldap.connect.timeout", 5000);
env.put(Context.PROVIDER_URL, "myurl");
ctx = new InitialLdapContext(env, null);
} catch(NamingException nex) {
// Errors get treated here
}
int debug_stop = 1;
对于我而言,成功建立连接后,所有关于Context.SECURITY_PROTOCOL
。 以下是有关此参数的一些信息: https ://docs.oracle.com/javase/8/docs/technotes/guides/jndi/jndi-ldap-gl.html#protocol
我尝试了usind以下参数(当然,所有参数都在""
之内):
ssl
/ SSL
starttls
/ STARTTLS
SSL/STARTTLS
TLSv1.1
但我完全看不到变化。
我尝试在Netbeans中调试它,然后查看ctx
-variable,但要查看的内容太多,以至于我找不到所需的正确信息。
我看的是:
ctx
无论我在上面的代码中输入什么,这始终表示TLSv1
。
1)这是连接使用的协议吗?
2)我看错了变量吗?
3)如何确定已建立的连接使用的协议?
我发现的另一件事是
ctx
在这里,我找到了一个清单,上面写着:
SSLv2Hello
TLSv1
TLSv1.1
TLSv1.2
所以我也尝试使用TLSv1.1
作为上述参数,但没有成功...
根据您的链接( http://docs.oracle.com/javase/8/docs/technotes/guides/jndi/jndi-ldap-gl.html ),为唯一的价值java.naming.security.protocol
是“SSL ”。
使用Context.SECURITY_PROTOCOL
=“ ssl”:
javax.net.ssl.SSLHandshakeException
使用Context.SECURITY_PROTOCOL
=“ ssl”以外的任何其他单词,它将打开一个简单的连接(不使用SSL / TLS)
因此,对于标准工厂( com.sun.jndi.ldap.LdapCtxFactory
)和“ ssl”参数,您可以使用SSL / TLS连接或不执行任何操作。
您可以使用-Djava.net.debug = ssl参数查看连接的许多详细信息,并可以查看连接使用了哪个版本的TLS和密码。 (请参阅http://www.herongyang.com/JDK/SSL-Socket-Communication-Debug-javax-net-debug.html )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.