java - 创建 PKCS12 文件以用作 java 信任库

标签 java ssl

我正在尝试创建一个仅包含证书(无私钥)的 PKCS12 文件。我正在使用以下命令:

openssl pkcs12 -export -in ca.crt -out server-ca.pfx -name server-ca -nokeys

我可以通过 curl 成功使用这个 pkcs12 文件,它验证了我的服务器证书。

如果我尝试将此文件用作 java 中的信任库,我会收到以下错误:

javax.net.ssl.SSLHandshakeException, with message: sun.security.validator.ValidatorException: No trusted certificate found.

我将此文件用于:

val trustInput = new FileInputStream(".../server-ca.pfx")
val trustKeyStore = KeyStore.getInstance("PKCS12")
trustKeyStore.load(trustInput, "123456".toCharArray())
trustInput.close()

val trustFactory = TrustManagerFactory.getInstance("SunX509")
trustFactory.init(trustKeyStore)

val context = SSLContext.getInstance("TLS")
context.init(null, trustFactory.getTrustManagers, new SecureRandom())

但是,如果我创建一个包含 ca.crt 文件的 JKS keystore ,然后将其转换为 pkcs12 文件,我的 java 应用程序会使用相同的代码正确验证服务器证书。

keytool -importkeystore -srckeystore server-ca.jks -destkeystore from-jks.pfx -srcstoretype JKS -deststoretype PKCS12

我需要使用什么 openssl 命令来创建一个 pkcs12 文件,其中包含一个 jvm 接受为有效信任库的证书?

最佳答案

我无法使用 sun 安全提供程序解决此问题。因为我已经在使用充气城堡,所以我使用 BC 提供程序初始化了信任库,现在一切正常。

val trustKeyStore = KeyStore.getInstance("PKCS12", "BC")

关于java - 创建 PKCS12 文件以用作 java 信任库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56150974/

相关文章:

networking - http 重定向到 https

ssl - 在受支持的版本上握手失败

java - 通过网络发送 BigInteger 对象的元组,并将这些元组的二进制表示附加到 Java 中的数组中

java - 使用注释从 Spring-Hibernate 执行存储过程

java - 检测 JavaFX webview 中的 URL 更改

带 SSL 和不带 SSL 的 MongoDB 安装程序

java - 为什么ArrayList创建时元素数组为空,而HashSet创建时表为空?

java - 使用 Java 创建 Ubbi Dubbi 翻译器

apache-flex - 通过 ssl 灵活的 XMLSocket

java - 不支持的密码套件 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256