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