java - 转换后的 PFX SSL 证书抛出 SSLHandshakeException?

标签 java ssl keystore keytool pfx

我获得了 *.ourdomain.example.org 的 PFX“通配符”SSL 证书(我相信它是 VeriSign 证书)。然后我使用了 this answer帮助我将 PFX 转换为 JKS keystore 条目并将其添加到 JKS keystore 。当我运行 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 之前我使用的是自签名证书,并且我的浏览器给我典型的“我不信任此证书”警告。在我添加转换后的 PFX 并重新启动我的应用程序后,这些警告消失了。关于这里可能发生的事情有什么想法吗?

最佳答案

首先,在许多情况下,您不需要从 PKCS#12 (PFX) 转换为 JKS,许多应用程序会让您将 keystore 类型设置为 PKCS12(而不是默认的 JKS),这将允许您直接使用 PFX 文件。

看起来您在这里混淆了信任库和 keystore 的用法(请参阅 this question)。

拥有一个带有证书的 keystore 及其 PrivateKeyEntry(此处来自 PKCS#12 文件)通常用作“ keystore keystore ”(与用作信任库的 keystore 相反) .这通常用于您作为服务器提供给客户端的证书,或者您在连接到请求证书的服务器时使用的客户端证书。

在这里,“PKIX 路径构建失败”异常意味着您的 Java 应用程序不信任它正在连接的远程证书。据推测,您的 AD 服务器与此 JKS keystore 无关。相反,使用 keystore 的服务器也是该 AD 服务器的客户端,它不能信任 AD 服务器证书。

您没有说您是如何配置您的应用程序的。也许您已将 keystore 用于 keystore 和信任库设置(有效地防止使用与默认 JRE 信任库捆绑在一起的 CA 证书),或者您的 AD 证书是自签名的或不是由属于默认信任库。如果是后者,只需将 AD 证书(只是证书,而不是证书及其私钥)导入信任库(您可以将此导入 JRE 的 cacert 文件或创建一个复制它并通过 javax.net.ssl.trustStore 和相关系统属性使用它)。

关于java - 转换后的 PFX SSL 证书抛出 SSLHandshakeException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23502964/

相关文章:

ssl - 反向代理时如何阻止Nginx向外部url添加端口

java - 该方法必须返回InputStream类型的结果

android - Burp Suite - Pixel 2 XL (Android P) 找不到使用 Burp Suite 的证书方法

java - java中可以扩展泛型类吗?

java - 在 Java 中打开 SSLSocket 时验证证书链

java - keystore 、HttpClient 和 HTTPS : Can someone explain this code to me?

keystore - 信任库和 keystore 定义

java - Eclipse ADT : Failed to create key, 无法分配内存

java - Cucumber:许多示例行 VS 许多场景轮廓

java - 如何从 WSDL 生成 EJB