Создание .p12 truststore с помощью openssl

Вопрос:Я пишу приложение Java 8 и хочу создать просто хранилище ключей и доверительное хранилище, используя самозаверяющий сертификат. Обычно это происходит следующим образом: Создайте сертификат keypair + с помощью openssl. Создайте хранилище .jks keystore +.jks, используя keytool Теперь я хотел бы использовать openssl и создавать .p12 keystores вместо .jks keystores. Создание keystore.p12 отлично работает с помощью

Вопрос:

Я пишу приложение Java 8 и хочу создать просто хранилище ключей и доверительное хранилище, используя самозаверяющий сертификат.

Обычно это происходит следующим образом:

  • Создайте сертификат keypair + с помощью openssl.
  • Создайте хранилище .jks keystore +.jks, используя keytool

Теперь я хотел бы использовать openssl и создавать .p12 keystores вместо .jks keystores.

Создание keystore.p12 отлично работает с помощью следующих команд:

# Create private key and certificate openssl req -x509 -newkey rsa:»${rsa}» -sha256 -keyout «${key}» -out «${cert}» -days «${days}» # Create .p12 keystore openssl pkcs12 -export -in «${cert}» -inkey «${key}» -out «${keystore}»

Это хранилище ключей, похоже, работает правильно, так как предоставление соответствующего .jks trustore в моем приложении Java приведет к подключению TLS. Однако я не могу получить .p12-сервис доверия.

Я попытался создать доверительный магазин, как предложено здесь:

# Create .p12 truststore openssl pkcs12 -export -nokeys -in «${cert}» -out «${truststore}»

а затем загрузите его следующим образом:

FileInputStream fis = new FileInputStream(new File(trustorePath)); KeyStore trustStore = KeyStore.getInstance(«PKCS12»); trustStore.load(fis, truststorePassword.toCharArray()); fis.close();

но я получаю следующее исключение в своем java-коде:

Неожиданная ошибка: java.security.InvalidAlgorithmParameterException: параметр trustAnchors должен быть непустым

Любые идеи, что я делаю неправильно?

(Приветствуется рабочий фрагмент с использованием .p12 truststore с Java 8.)

Лучший ответ:

Возможное объяснение этого поведения:

Стандартный поставщик PKCS # 12 до Java 7 не разрешил доверять записи сертификатов. Справочное руководство JSSE говорит следующее:

Сохранение доверенных сертификатов в хранилище ключей PKCS12 не поддерживается. PKCS12 в основном используется для предоставления секретных ключей с соответствующими цепи сертификатов. В нем нет понятия “доверенный”, сертификаты. Что касается совместимости, то другие поставщики PKCS12 имеют такое же ограничение. Браузеры, такие как Mozilla и Internet Explorer не принимайте файл PKCS12 только с доверенными сертификатами.

Это немного изменилось в Java 8, которое поддерживает доверенные сертификаты в PKCS # 12 – если они отмечены специальным атрибутом (OID 2.16.840.1.113894.746875.1.1):

openssl pkcs12 -in microsoft.p12 -info MAC Iteration 1024 MAC verified OK PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 1024 Certificate bag Bag Attributes friendlyName: microsoft it ssl sha2 (baltimore cybertrust root) 2.16.840.1.113894.746875.1.1: <Unsupported tag 6>

Источник:

Оцените статью
Добавить комментарий