我有一些通过SSL连接到LDAP服务器的java代码:
protected DirContext getDirectoryContext(String usersDn, String password)
throws NamingException {
Hashtable<String, String> env = new Hashtable<String, String>();
System.out.println("Connecting to LDAP. Server=" + mURL + " User="
+ usersDn + " Password=" + password);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, mURL);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, usersDn);
env.put(Context.SECURITY_CREDENTIALS, password);
if (mURL.startsWith("ldaps") || mURL.endsWith("636")) {
env.put(Context.SECURITY_PROTOCOL, "ssl");
}
return new InitialDirContext(env);
}
代码是从Notes客户端V8.5.3中的Notes表单上的按钮运行的。代码在Java脚本库中。
有些人获得SSLHandshakeException找不到可信任的证书,而其他人没有得到删除,代码运行正常。这个问题似乎与工作站有关。
我没有收到错误。我有自己的id,它可以对Notes服务器进行特殊访问,但我有一个没有特殊访问权限的测试ID,并且都可以在我的PC上运行。
我有一个用户也是我们的ldap支持,所以他应该拥有连接到服务器所需的一切。但是代码给了他一个例外。尝试使用Notes ldapsearch可以在他的电脑上正常工作,因此我们知道连接性很好。
我们的Dev服务器和QA服务器上的一个用户发生错误。在开发中,我给了她与我相同的访问权限。让他成为一名开发人员和一切,但她仍然是例外。
到目前为止,代码工作正常的唯一人员是我小组中的人。但正如我所提到的,我将一位女士添加到我们的小组中,我也使用了一个不在我们小组中的测试ID。我能想到的唯一区别是我们都有设计师,而其他人则没有。但我不明白这是怎么回事。
想法为什么有些人会得到错误而其他人却没有?
答案 0 :(得分:2)
AFAIK Lotus ldapsearch实用程序不进行SSL连接,所以我相信它的工作原理毫无意义。我会在面值处获取错误消息:LDAP服务器的SSL证书是自我认证的,或者由根证书不在用户密钥库中的CA认证。由于这是在Notes按钮中运行的Java,我不太确定密钥库使用了什么。即,我不确定它是否在Notes中安装的JVM中使用了一个文件,或者它是否已连接到使用本地names.nsf。但是作为一个注重力量的人,我会查看它工作的机器上的客户端names.nsf中的证书视图以及它不支持的机器上的证书视图。
答案 1 :(得分:0)
IBM通过修复程序回复了我们。结果证明导入证书所需的“其他”用户。他们从未回答过为什么它适用于有设计师的人。当安装了与我们的服务器一起使用的设计器时,可能会安装公共证书。