Как конвертировать.pfx-файл в хранилище ключей с закрытым ключом?



мне нужно подписать приложение для Android (.apk).

У меня есть . Я преобразовал его в .cer файл через Internet Explorer, а затем преобразуется .cer до .keystore С помощью keytool. Тогда я попытался подписать .apk с jarsigner, но он говорит, что .хранилище ключей не содержит закрытый ключ.



что я делаю не так?

929   6  

6 ответов:

использование JDK 1.6 или более поздней версии

было указано Джастином в комментариях ниже, что keytool сам по себе способен сделать это с помощью следующей команды (хотя только в JDK 1.6 и более поздних версиях):

keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12 
-destkeystore clientcert.jks -deststoretype JKS

С помощью JDK 1.5 или ниже

OpenSSL может сделать все это. это ответ на JGuru лучший метод, который я нашел до сих пор.

во-первых, убедитесь, что у вас есть OpenSSL установленный. Многие операционные системы уже установлены, как я нашел с Mac OS X.

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

openssl pkcs12 -in mypfxfile.pfx -out mypemfile.pem
openssl pkcs12 -export -in mypemfile.pem -out mykeystore.p12 -name "MyCert"

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

вы можете проверить содержимое хранилища ключей с помощью утилиты Java keytool с помощью следующей команды:

keytool -v -list -keystore mykeystore.p12 -storetype pkcs12

наконец, если вы необходимо вы можете преобразовать это в хранилище ключей JKS, импортировав хранилище ключей, созданное выше, в новое хранилище ключей:

keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS

jarsigner может использовать ваш pfx-файл в качестве хранилища ключей для подписи вашего jar. Убедитесь, что ваш pfx-файл имеет закрытый ключ и цепочку сертификатов при экспорте. Нет необходимости конвертировать в другие форматы. Фокус в том, чтобы получить псевдоним из pfx-файла:

 keytool -list -storetype pkcs12 -keystore your_pfx_file -v | grep Alias

как только у вас есть свой псевдоним, подписание легко

jarsigner.exe -storetype pkcs12 -keystore pfx_file jar_file "your alias"

вышеуказанные две команды запросят у вас пароль, указанный при экспорте pfx. Если вы хотите, чтобы ваш пароль повесить в открытом тексте используйте -storepass переключатель перед -keystore переключатель

после подписания, восхищайтесь своей работой:

jarsigner.exe -verify -verbose -certs  yourjarfile

нашел этой страница, которая рассказывает вам, как импортировать PFX в JKS (Java Key Store):

keytool -importkeystore -srckeystore PFX_P12_FILE_NAME -srcstoretype pkcs12 -srcstorepass PFX_P12_FILE -srcalias SOURCE_ALIAS -destkeystore KEYSTORE_FILE -deststoretype jks -deststorepass PASSWORD -destalias ALIAS_NAME

ваш файл PFX должен содержать закрытый ключ внутри него. Экспортируйте закрытый ключ и сертификат непосредственно из вашего PFX-файла (например, с помощью OpenSSL) и импортируйте их в хранилище ключей Java.

Edit

дополнительная информация:

  • скачать OpenSSL для Windows здесь.
  • экспорт закрытого ключа:openssl pkcs12 -in filename.pfx -nocerts -out key.pem
  • экспорт сертификата: openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
  • импорт закрытого ключа и сертификат в хранилище ключей Java с помощью keytool.

Джастин (выше) является точным. Однако имейте в виду, что в зависимости от того, от кого вы получаете сертификат (промежуточный ЦС, корневой ЦС или нет) или как создается/экспортируется pfx, иногда они могут отсутствовать в цепочке сертификатов. После импорта у вас будет сертификат типа PrivateKeyEntry, но с цепочкой длиной 1.

чтобы исправить это, есть несколько вариантов. Более простой вариант, на мой взгляд, заключается в импорте и экспорте pfx-файла в IE(выбор опции Включая все сертификаты в цепочке). Процесс импорта и экспорта сертификатов в IE должен быть очень простым и хорошо документированным в другом месте.

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

некоторые клиенты веб-службы на основе .Net ошибка (не удается установить доверительные отношения), если вы не делаете выше.

если вы работаете с JDK 1.5 или ниже, утилита keytool не будет иметь (см. документация JDK 1.5 keytool) и решение от MikeD будет доступно только при переносе .pfx на машине с более новым JDK (1.6 или выше).

другой вариант в JDK 1.5 или ниже (если у вас есть продукт Oracle WebLogic), должен следовать инструкциям из этого документа Oracle:использование форматов сертификатов PFX и PEM с хранилищами ключей. Оно описывает преобразование в .pem формат, как извлечь информацию о сертификатах из этого текстового формата и импортировать ее в С java utils.ImportPrivateKey утилита (это утилита, входящая в состав продукта WebLogic).

Comments

    Ничего не найдено.