SSLHandshakeException连接到Notes中的LDAP服务器

时间:2013-12-04 21:11:54

标签: java ssl lotus-notes lotusscript

我有一些通过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。我能想到的唯一区别是我们都有设计师,而其他人则没有。但我不明白这是怎么回事。

想法为什么有些人会得到错误而其他人却没有?

2 个答案:

答案 0 :(得分:2)

AFAIK Lotus ldapsearch实用程序不进行SSL连接,所以我相信它的工作原理毫无意义。我会在面值处获取错误消息:LDAP服务器的SSL证书是自我认证的,或者由根证书不在用户密钥库中的CA认证。由于这是在Notes按钮中运行的Java,我不太确定密钥库使用了什么。即,我不确定它是否在Notes中安装的JVM中使用了一个文件,或者它是否已连接到使用本地names.nsf。但是作为一个注重力量的人,我会查看它工作的机器上的客户端names.nsf中的证书视图以及它不支持的机器上的证书视图。

答案 1 :(得分:0)

IBM通过修复程序回复了我们。结果证明导入证书所需的“其他”用户。他们从未回答过为什么它适用于有设计师的人。当安装了与我们的服务器一起使用的设计器时,可能会安装公共证书。