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