簡體   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