繁体   English   中英

查找JNDI / LDAP连接安全协议

[英]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

  • 遗传
    • defaultInitCtx
      • 克林特
        • 康恩
          • 袜子
            • 西斯
              • protocolVersion
                • 名称

无论我在上面的代码中输入什么,这始终表示TLSv1

1)这是连接使用的协议吗?

2)我看错了变量吗?

3)如何确定已建立的连接使用的协议?

我发现的另一件事是

ctx

  • 遗传
    • defaultInitCtx
      • 克林特
        • 康恩
          • 袜子
            • 遗传
                • sslContext
                  • 静态的
                    • defaultServerSSLParams
                      • 协议

在这里,我找到了一个清单,上面写着:

  • 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”:

  • 如果服务器支持,则会打开一个安全的SSL / TLS连接
  • 否则将失败,并显示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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM