我正在尝试创建仅包含证书(不包含私钥)的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密钥库,然后将其转换为pkcs12文件,则我的Java应用程序将使用相同的代码正确地验证服务器证书。
keytool -importkeystore -srckeystore server-ca.jks -destkeystore from-jks.pfx -srcstoretype JKS -deststoretype PKCS12
我需要使用什么openssl
命令来创建一个包含单个证书的pkcs12文件,jvm将该证书作为有效的信任存储接受?
答案 0 :(得分:0)
我无法使用sun security provider解决此问题。由于我已经在使用充气城堡,因此我使用BC提供程序初始化了信任存储,现在一切正常。
val trustKeyStore = KeyStore.getInstance("PKCS12", "BC")