Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

Объедините все файлы * .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 что я модифицировал для вашего сценария.

  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
    ...
    КОНЕЦ ЧАСТНОГО КЛЮЧА RSA

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

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

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

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