基本上,我有一个位于 JBoss 上的应用程序,它需要连接到 LDAP 服务器。(操作系统是 Windows XP Pro)我使用 run.bat -c all -b 192.168.1.1 启动了 JBoss。
我没有遇到任何与不使用 SSL 的 LDAP 服务器连接的问题。只有当 LDAP 服务器使用 SSL 设置时,才会出现此问题,我无法连接到 LDAP 服务器。以下是错误消息。
javax.naming.CommunicationException:简单绑定失败:192.168.1.100:636 [根异常是 javax.net.ssl.SSLException:java.lang.RuntimeException:意外错误:java.security.InvalidAlgorithmParameterException:trustAnchors 参数必须非空]
我在 Google 上搜索了有关配置 JBoss 和 LDAP 的信息,并偶然发现了http://docs.jboss.org/jbportal/v2.6.2/referenceGuide/html/ldap.html。我真的需要一个 JBoss Portal 来设置 LDAP 吗??
有人能帮我解决这个问题吗?我是否遗漏了 JBoss 上的任何配置?
任何建议都将不胜感激。提前致谢。
凯文
答案1
我认为您需要将受信任的根证书(可能还有任何中间证书)导入 JBoss 正在使用的 Java 密钥库。(在 Linux 上运行时,我唯一运行 JBoss 的地方是它使用 Tomcat 在其中运行 JBoss)。
我不确定 Tomcat 的默认 Java 密钥库在哪里。您可以keytool
从任何 Java JDK 安装中使用,并以此方式导入受信任的根。密钥库密码应为“默认”,因为受信任的根公钥没有任何秘密。
Keytool 语法示例可能为:
keytool -importcert -keystore Path/to/store -storepass Password (Usually default or changeit) -alias Something -file FileWithPublicKey
要获取受信任的根,一个简单的方法是将相同的证书用于 HTTP 接口。但我认为 IE 会让你尝试 ldaps://serverIP/,然后在带锁的图标中,你可以看到证书详细信息。
有一个用于证书链的选项卡。最上面的项目是签署此证书的 CA(也就是我们需要信任的根,以使其成为受信任的根)。
如果这一切太过分,那么这里有一个有趣的技巧!获取基于 Java 的 600K LDAP 浏览器,名为铅基氧化物并删除本地文件lbecacert
,然后运行 LDAP 浏览器,为您的 LDAP 服务器进行配置,启用 SSL,当您第一次连接时,它将获得受信任的根,提示您信任一次、始终信任或永不信任。选择始终,然后退出。
新创建的 lbecacert 文件现在只有一个受信任的根。很可爱吧?我懒的时候会用它,效果很好。
现在 Tomcat cacerts 应该放在哪里?好吧,在您的 JVM 安装 lib/security 中,将受信任的根添加到那里的 cacerts 中可能就足够了,或者用这个文件替换那个文件(这不是最好的选择,因为您可能需要一些默认的受信任的根)。