我在solaris机器上有一个sun LDAP服务器,我的Web应用程序可以通过389端口连接到LDAP。现在我想使用636端口连接到LDAP over SSL。在我的LDAP服务器中,我已经安装了证书。现在,我已使用LDAP服务器中的密钥导出证书,以便我可以将此证书与我的Web应用程序一起使用。在同一台机器上,我的glassfish服务器也已安装。我将证书复制到/ usr / java / jre / lib / security /文件夹中。现在,在我的Web应用程序中,我使用此代码通过sll连接到LDAP,但无法连接到LDAP。
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
ht.put(Context.PROVIDER_URL,"ldap://ldapserver:636");
ht.put(Context.SECURITY_AUTHENTICATION, "EXTERNAL");
// ht.put(Context.SECURITY_AUTHENTICATION, "simple");
System.setProperty("javax.net.ssl.keyStore","/usr/java/jre/lib/security/cert");
System.setProperty("javax.net.ssl.keyStorePassword",certpass);
ht.put(Context.SECURITY_PRINCIPAL,binddn);
// Specify SSL
ht.put(Context.SECURITY_PROTOCOL, "ssl");
ht.put(Context.SECURITY_CREDENTIALS,bindpass);
我做错了什么?请纠正我。
答案 0 :(得分:0)
如果您在LDAP服务器上安装的SSL / TLS证书是自签名证书,或者您的JVM的lib/security/cacerts
信任库中不存在其签名者证书,则需要将证书导入信任库并指定信任库的位置是设置系统属性javax.net.ssl.trustStore
和javax.net.ssl.trustStorePassword
。您似乎已将证书导入JKS文件(假设它是JKS格式)。您需要将javax.net.ssl.trustStore
指向该文件并指定其密码,以便JVM可以访问它。