我必须在Active Directory服务器上启用SSL,为此,我按照此处提到的每个步骤进行操作:http://www.linuxmail.info/enable-ldap-ssl-active-directory/
现在我不确定SSL是否真的正确启用了?
在服务器本身,如果我运行ldp,我想我可以连接636端口。但是在我的系统上,我没有在ldp客户端上看到SSL选项?
我有两个其他LDAP客户端(Softerra LDAP Browser和Apache Directory Studio),但我无法使用ldaps(在636端口上)进行连接。我想我需要导入AD服务器中使用的证书,这样这些工具就可以信任我在AD服务器上使用的自签名证书。
使用Java代码,我已将证书添加到cacerts中(使用此处提到的步骤获取证书:http://www.linuxmail.info/export-ssl-certificate-windows-2003/),但我仍然无法使用SSL连接到AD。
我尝试过SSL以及TSL:
TLS:
// got LdapContext using ldap (not with ldaps)
StartTlsResponse tls = (StartTlsResponse)ctx.extendedOperation(new StartTlsRequest());
它提供以下例外:
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
SSL
String ldapURL = "ldaps://<domain-name>:636";
String keystore = "C:/Oracle/Middleware/jdk160_24/jre/lib/security/cacerts";
System.setProperty("javax.net.ssl.trustStore",keystore);
env.put(Context.SECURITY_PROTOCOL,"ssl");
// other properties are set in env
LdapContext ctx = new InitialLdapContext(env, null);
它提供以下例外:
javax.naming.CommunicationException: <domain-name>:636 [Root exception is java.net.ConnectException: Connection timed out: connect]
任何人都可以建议我错在哪里吗?
感谢。
答案 0 :(得分:1)
这个是固定的。
我使用错误(相当不完整)的命令导入证书。
我正在使用:
keytool -import -alias mycert -keystore cacerts -file d:\mycert.cer
当我使用follwing时:
keytool -import -noprompt -trustcacerts -alias mycert -file c:/mycert.cer -keystore C:/Oracle/Middleware/jdk160_24/jre/lib/security/cacerts -storepass changeit
它开始工作了。
答案 1 :(得分:0)
如果您无法使用TLS,则SSL不太可能正常工作。您确定您获得了正确的证书并正确配置了密钥库吗?在尝试使用TLS时,基于SSLHandshakeException,似乎可能无法正确设置。
请查看此SO答案,了解有关如何验证密钥库是否已正确设置的一些提示:https://stackoverflow.com/a/9619478/1792088