我获得了PFX"通配符" *.ourdomain.example.org
的SSL证书(我相信它是VeriSign证书)。然后我使用this answer帮助我将PFX转换为JKS密钥库条目并将其添加到JKS密钥库。当我运行keytool -list -keystore mykeys.jks
时,我看到了:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
<my key's long GUUID>, May 1, 2014, PrivateKeyEntry,
Certificate fingerprint (SHA1): <cert's fingerprint>
所以我知道转换后的PFX证书就在那里。但是在运行时,当JNDI使用SSL建立与AD服务器的连接(通过LDAPS)时,我看到以下异常:
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
我想知道在从PFX到JKS的转换中是否出现了问题。我确定非常确保SSL证书没有其他问题,因为在使用此PFX之前我使用的是自签名证书,而我的浏览器给了我典型的&#34;我做的不相信这个证书&#34;警告。在我添加转换后的PFX并重新启动我的应用程序后,这些警告就消失了。关于可能会发生什么的任何想法?
答案 0 :(得分:0)
首先,在许多情况下,您不需要从PKCS#12(PFX)转换为JKS,许多应用程序将允许您将密钥库类型设置为PKCS12
(而不是默认的{{ 1}}),这将允许您直接使用您的PFX文件。
您似乎在这里混淆了信任存储和密钥存储的使用(请参阅this question)。
拥有证书的密钥库及其JKS
(此处来自PKCS#12文件)通常用作&#34;密钥库密钥库&#34; (与用作信任库的密钥库相对)。这通常用于您作为服务器提供给客户端的证书,或连接到请求服务器的服务器时使用的客户端证书。
此处,&#34; PKIX路径构建失败&#34;例外意味着您的Java应用程序不信任它所连接的远程证书。据推测,您的AD服务器与此JKS密钥库无关。相反,使用密钥库的服务器也是该AD服务器的客户端,并且它不能信任AD服务器证书。
您不能说出您的应用程序配置方式。您可能已将密钥库用于密钥库和信任库设置(有效阻止使用与默认JRE信任库捆绑在一起的CA证书),或者您的AD证书可能是自签名的,也可能不是由CA颁发的。默认信任库的一部分。如果是后者,只需将AD证书(只是证书,而不是证书及其私钥)导入信任库(您可以将此文件导入JRE的PrivateKeyEntry
文件或制作它的副本并使用cacert
和相关的系统属性来使用它。