Как конвертировать.pfx-файл в хранилище ключей с закрытым ключом?
мне нужно подписать приложение для Android (.apk).
У меня есть . Я преобразовал его в .cer файл через Internet Explorer, а затем преобразуется .cer до .keystore С помощью keytool. Тогда я попытался подписать .apk с jarsigner, но он говорит, что .хранилище ключей не содержит закрытый ключ.
что я делаю не так?
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