我有一个web服务(用java编写),它连接到我们的活动目录,我试图让它使用SSL protocole进行此连接,所以我从URL中下载了证书,将其导入我的信任库中,在我的代码中指定使用SSL协议安全性,如下所示:
env.put(Context.SECURITY_PROTOCOL, "ssl");
env.put(Context.PROVIDER_URL, "ldap://MyHost:636");
我的问题是连接不能一直工作,我收到此错误:
javax.naming.CommunicationException: simple bind failed: MyHost:636 [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]
我的想法是这个主机上有多个证书,当我尝试连接时,它并不总是使用正确的证书(我在我的信任库中拥有的证书) 那么有没有办法在java中指定要使用哪个证书?用名字或别名或别的东西?
感谢您的时间和帮助
答案 0 :(得分:0)
首先:您确定将正确的证书添加到信任库并且您使用的是正确的信任库吗? 您可以指定信任库:
System.setProperty("javax.net.ssl.trustStore","clientTrustStore.key");
第二:您的AD证书是否有任何中间证书颁发机构?
第三:查看链接Obtain the CA Certificate from AD 他们展示了如何通过几种方法获得证书形式AD。
-Jim