Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找JNDI/LDAP连接安全协议_Java_Ssl_Ldap_Jndi - Fatal编程技术网

Java 查找JNDI/LDAP连接安全协议

Java 查找JNDI/LDAP连接安全协议,java,ssl,ldap,jndi,Java,Ssl,Ldap,Jndi,我正在使用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.s

我正在使用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;
LdapContext ctx=null;
Hashtable env=新的Hashtable();
试一试{
环境清除();
put(Context.INITIAL\u Context\u工厂,“com.sun.jndi.ldap.LdapCtxFactory”);
环境投入(Context.SECURITY_主体,“用户”);
环境put(Context.SECURITY_凭证,“密码”);
环境保护协议(Context.SECURITY_PROTOCOL,ssl);
put(“com.sun.jndi.ldap.read.timeout”,5000);
put(“com.sun.jndi.ldap.connect.timeout”,5000);
env.put(Context.PROVIDER_URL,“myurl”);
ctx=新的InitialLdapContext(env,null);
}捕获(NamingException nex){
//错误在这里得到处理
}
int debug_stop=1;
在我的例子中,当连接成功建立时,这一切都是关于
上下文.SECURITY\u协议的。以下是有关此参数的一些信息:

我尝试使用以下参数(当然都在
中):

  • ssl
    /
    ssl
  • starttls
    /
    starttls
  • SSL/STARTTLS
  • TLSv1.1
但我看不到任何变化

我试着在Netbeans中调试它,并查看
ctx
-变量,但是有太多的东西要看,以至于我找不到正确的信息

我看到的是:

ctx

  • 继承的
    • defaultInitCtx
      • clnt
        • 康涅狄格州
          • 短袜
            • 赛斯
              • 原型
                • 名字
无论我在上面的代码中输入了什么,它都会显示
TLSv1

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

2) 我看错变量了吗

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

我发现的另一件事是

ctx

  • 继承的
    • defaultInitCtx
      • clnt
        • 康涅狄格州
          • 短袜
            • 继承的
              • 自我
                • sslContext
                  • 静止的
                    • defaultServerSSLParams
                      • 协议
在这里,我找到了一份清单,上面写着:

  • SSLv2Hello
  • TLSv1
  • TLSv1.1
  • TLSv1.2
因此,我尝试使用
TLSv1.1
作为上述参数,但没有成功…

根据您的链接(),
java.naming.security.protocol
的唯一值是“ssl”

使用
Context.SECURITY\u协议
=“ssl”:

  • 如果服务器支持,它将打开一个安全的SSL/TLS连接
  • 它会失败,出现
    javax.net.ssl.SSLHandshakeException
    否则
使用
Context.SECURITY\u PROTOCOL
=除“ssl”之外的任何其他单词,它会打开一个简单的连接(没有ssl/TLS)

因此,对于标准工厂(
com.sun.jndi.ldap.LdapCtxFactory
)和“ssl”参数,您可以使用ssl/TLS连接,也可以什么都不做

使用参数-Djava.net.debug=ssl可以查看连接的许多详细信息,并可以查看连接使用的TLS和密码版本。 (请参阅)

根据您的链接(),
java.naming.security.protocol
的唯一值是“ssl”

使用
Context.SECURITY\u协议
=“ssl”:

  • 如果服务器支持,它将打开一个安全的SSL/TLS连接
  • 它会失败,出现
    javax.net.ssl.SSLHandshakeException
    否则
使用
Context.SECURITY\u PROTOCOL
=除“ssl”之外的任何其他单词,它会打开一个简单的连接(没有ssl/TLS)

因此,对于标准工厂(
com.sun.jndi.ldap.LdapCtxFactory
)和“ssl”参数,您可以使用ssl/TLS连接,也可以什么都不做

使用参数-Djava.net.debug=ssl可以查看连接的许多详细信息,并可以查看连接使用的TLS和密码版本。
(请参见)

请将代码放在``下,使其看起来像
感谢您提示使用
-Djava.net.debug=ssl
我会尝试,但在oracle文档中还说“除了上面列出的值之外,提供商还可以支持其他安全协议”我知道服务器也允许TLS,但我无法判断连接是否实际使用了itTLS,这是SSL的后续版本。值
ssl
Context.SECURITY\u PROTOCOL
中有点混乱。Java将尝试使用最好(最强)的连接协议,在2016年,很可能是TLS。在调试输出中,我可以看到我使用了TLS
%%初始化:[Session-1,TLS_RSA_WITH_AES_128_CBC_SHA]**TLS_RSA_WITH_AES_128_CBC_SHA
,尽管代码带有'env.put(Context.SECURITY_PROTOCOL,“ssl”)@OlivierT您在哪里看到调试消息?我在控制台中看到它,就在
***ServerHello
消息之后。您可以添加ligne
System.setProperty(“javax.net.debug”、“ssl”)
在您的代码中,而不是VM参数中,请将代码放在``下,使其看起来像
感谢您提示使用
-Djava.net.debug=ssl
我会尝试,但在oracle文档中,它还说“除了上面列出的值之外,提供商还可以支持其他安全协议”我知道服务器也允许TLS,但我无法判断连接是否实际使用了itTLS,这是SSL的后续版本。值
ssl
Context.SECURITY\u PROTOCOL
中有点混乱。Java将尝试使用最好(最强)的连接协议,在2016年,很可能是TLS。在调试输出中,我可以看到