Java 连接到LDAPS(Active Directory)时发生SSLHandshakeException

Java 连接到LDAPS(Active Directory)时发生SSLHandshakeException,java,active-directory,ldap,ssl-certificate,Java,Active Directory,Ldap,Ssl Certificate,我们正在使用LDAP(Active Directory)对用户进行身份验证。ldap服务器是一个安全的服务器,因此我们已生成证书并将其添加到密钥库中。要生成和导入证书,我们遵循以下步骤: 1. Retrieve the public CA certificate from the server echo | openssl s_client -connect <host>:<port> 2>&1 | sed -ne '/-BEGIN CERTIFICATE

我们正在使用LDAP(Active Directory)对用户进行身份验证。ldap服务器是一个安全的服务器,因此我们已生成证书并将其添加到密钥库中。要生成和导入证书,我们遵循以下步骤:

1.  Retrieve the public CA certificate from the server
echo | openssl s_client -connect <host>:<port> 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ca-cert.cer

2.  Import the certificate into the keystore.
sudo keytool -keystore <path-tojre>/jre/lib/security/cacerts -import -alias <name> -file ca-cert.crt

Java应用程序和LDAP服务器都位于不同的机器(Linux环境)

[已解决]

我们能够解决这个问题。实际上,就在SSLHandshake错误和closeSocket()调用之前,我有这样一个问题:

%% Invalidated:  [Session-2, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384]
main, SEND TLSv1.2 ALERT:  fatal, description = certificate_unknown
了解到TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384是服务器期望的密码。由于某些国家的限制,Java-8对密码进行了限制。细节

Oracle分别提供了无限制的政策JAR,用于额外的密码,这些密码可以从


我必须替换jre/lib/security文件夹中的JAR,并且必须重新安装证书。之后一切正常。

检查您的Java应用程序是否有权访问颁发LDAPS证书的根CA。您的意思是使用TrustManager编写程序并读取所有证书?我将看到一个示例代码,因为我不知道如何使用它。同时,我使用Debug=ALL选项运行应用程序。我看到为证书编写的invalidated,其原因类似于(未知证书),后跟closeSocket()调用。在此SSLHandshake异常之后存在。我怀疑它是否喜欢读取密钥库,并在发现其中一个证书无效时关闭套接字。不,我的意思是检查来自颁发LDAPS证书的CA的根CA证书(或证书本身,如果是自签名的)是否存在于Java的证书存储中,而Java的证书存储反过来存在于验证证书的应用程序中。如果不是,让它出现。这些东西应该可以通过运行你的应用程序的电脑上的Java控制面板访问。现在可以使用了。以上更新。最好将更新发布为解决方案,这样问题将被列为“已回答”,并且可能不会被搜索相同问题的人过滤掉,因为他们没有回答。
-------->>>  FOUND MASTER ACCOUNT!    <<<---------
javax.naming.CommunicationException: simple bind failed: server: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]
%% Invalidated:  [Session-2, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384]
main, SEND TLSv1.2 ALERT:  fatal, description = certificate_unknown