Импорт цепочки сертификатов PEM и ключ к Java Keystore

Существует множество ресурсов по этой теме, но я не нашел ни одного, который бы охватывал этот немного особый случай.

У меня 4 файла;

  • privatekey.pem
  • certificate.pem
  • intermediate_rapidssl.pem
  • ca_geotrust_global.pem

И я хочу импортировать их в свежий склад ключей.

Некоторые сайты предлагают использовать DER-формат и импортировать их один за другим, но это не удалось, потому что ключ не распознан.

Другой сайт предложил специальный класс "ImportKey" для запуска для импорта, и это работало, пока я не увидел, что цепочка разорвана. Т.е. длина цепочки в сертификате равна 1, без учета промежуточного и ок.

Некоторые сайты предлагают PKCS7, но я даже не могу получить цепочку от этого. Другие предлагают формат PKCS12, но, насколько мне известно, мои тесты не сработали для получения всей цепочки.

Любые советы или советы приветствуются.

3 ответа

Решение

Это может быть не идеально, но у меня были некоторые заметки о моем использовании keytool что я изменил для вашего сценария.

  1. Импортируйте корневой или промежуточный сертификат CA в существующее хранилище ключей Java:

    keytool -import -trustcacerts -alias root -file ca_geotrust_global.pem -keystore yourkeystore.jks
    keytool -import -trustcacerts -alias root -file intermediate_rapidssl.pem -keystore yourkeystore.jks 
    
  2. Перед импортом объедините сертификат и закрытый ключ в один файл.

    cat certificate.pem privatekey.pem > combined.pem
    

    Это должно привести к файлу, напоминающему приведенный ниже формат.

    НАЧАТЬ СЕРТИФИКАТ
    ...
    КОНЕЦ СЕРТИФИКАТА
    НАЧАТЬ RSA ЧАСТНЫЙ КЛЮЧ
    ...
    END RSA ЧАСТНЫЙ КЛЮЧ

  3. Импортируйте подписанный первичный сертификат и ключ в существующее хранилище ключей Java:

    keytool -import -trustcacerts -alias yourdomain -file combined.pem -keystore yourkeystore.jks
    

Объединить все файлы *.pem в один файл pem, например all.pem. Затем создать хранилище ключей в формате p12 с закрытым ключом + all.pem.

openssl pkcs12 -export -inkey private.key -in all.pem -name test -out test.p12

Затем экспортируйте p12 в jks

keytool -importkeystore -srckeystore test.p12 -srcstoretype pkcs12 -destkeystore test.jks

keytool не предоставляет способ импортировать сертификат + закрытый ключ из одного (объединенного) файла, как предложено выше. Он работает нормально, но импортируется только сертификат, а закрытый ключ игнорируется. Вы можете проверить это по keytool -list -v -keystore yourkeystore.jks - тип записи вашего домена TrustedCertEntry, а не PrivateKeyEntry.

Таким образом, чтобы решить начальную проблему, нужно сначала создать хранилище ключей PKCS#12 с помощью openssl (или аналогичного инструмента), а затем импортировать хранилище ключей с помощью keytool -importkeystore,

Другие вопросы по тегам