Создание файла PKCS12 для использования в качестве хранилища доверенных сертификатов Java - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь создать файл PKCS12, содержащий только сертификат (без закрытых ключей). Я использую следующую команду:

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

Я могу успешно использовать этот файл pkcs12 с curl, и он подтверждает мой сертификат сервера.

Если я пытаюсь использовать этот файл в качестве хранилища доверия в 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())

Однако, если я создаю хранилище ключей JKS, содержащее файл ca.crt, а затем преобразую его в файл pkcs12, мое java-приложение правильно проверяет сертификат сервера, используя тот же код.

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

Какую команду openssl мне нужно использовать для создания файла pkcs12, содержащего один сертификат, который jvm принимает в качестве действительного хранилища доверия?

1 Ответ

0 голосов
/ 20 мая 2019

Я не мог решить эту проблему с помощью поставщика Sun Security.Поскольку я уже использую надувной замок, я инициализировал хранилище доверия с помощью поставщика BC, и теперь все работает правильно.

val trustKeyStore = KeyStore.getInstance("PKCS12", "BC")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...