Мне нужно подписать приложение для Android ( .apk
).
У меня есть .pfx
файл. Я преобразовал его в .cer
файл через Internet Explorer, а затем преобразовал .cer
в .keystore
keytool. Затем я попытался подписаться .apk
с помощью jarsigner, но он говорит, что .keystore не содержит закрытого ключа.
Что я делаю не так?
Ответы:
Использование JDK 1.6 или новее
В комментариях ниже Джастин указал, что только keytool может сделать это с помощью следующей команды (хотя только в JDK 1.6 и новее):
Использование JDK 1.5 или ниже
OpenSSL может все. Этот ответ на JGuru - лучший метод, который я нашел до сих пор.
Прежде всего убедитесь, что у вас установлен OpenSSL . Во многих операционных системах он уже установлен, как я обнаружил в Mac OS X.
Следующие две команды преобразуют файл pfx в формат, который можно открыть как хранилище ключей Java PKCS12:
ОБРАТИТЕ ВНИМАНИЕ, что имя, указанное во второй команде, является псевдонимом вашего ключа в новом хранилище ключей.
Вы можете проверить содержимое хранилища ключей с помощью утилиты Java keytool с помощью следующей команды:
Наконец, если вам нужно, вы можете преобразовать это в хранилище ключей JKS, импортировав хранилище ключей, созданное выше, в новое хранилище ключей:
источник
jarsigner может использовать ваш pfx-файл в качестве хранилища ключей для подписи вашего jar-файла. При экспорте убедитесь, что в вашем файле pfx есть закрытый ключ и цепочка сертификатов. Нет необходимости конвертировать в другие форматы. Хитрость заключается в том, чтобы получить псевдоним вашего файла pfx:
Если у вас есть псевдоним, подписать легко
Две приведенные выше команды предложат вам ввести пароль, который вы указали при экспорте pfx. Если вы хотите, чтобы ваш пароль отображался в виде открытого текста, используйте переключатель -storepass перед переключателем -keystore
После подписания восхищайтесь своей работой:
источник
Я нашел эту страницу, на которой рассказывается, как импортировать PFX в JKS (хранилище ключей Java):
источник
-srcstorepass
это моя проблема. Этот PFX создан клиентом LetsEncrypt для WindowsВаш PFX-файл должен содержать закрытый ключ. Экспортируйте закрытый ключ и сертификат прямо из файла PFX (например, с помощью OpenSSL) и импортируйте их в свое хранилище ключей Java.
редактировать
Дальнейшая информация:
openssl pkcs12 -in filename.pfx -nocerts -out key.pem
openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
keytool
.источник
Джастин (вверху) прав. Однако имейте в виду, что в зависимости от того, от кого вы получаете сертификат (промежуточный ЦС, задействованный корневой ЦС или нет) или как создается / экспортируется pfx, иногда может отсутствовать цепочка сертификатов. После импорта у вас будет сертификат типа PrivateKeyEntry, но с цепочкой длиной 1.
Чтобы исправить это, есть несколько вариантов. На мой взгляд, более простой вариант - импортировать и экспортировать файл pfx в IE (выбрав вариант «Включить все сертификаты в цепочку»). Процесс импорта и экспорта сертификатов в IE должен быть очень простым и хорошо документирован в другом месте.
После экспорта импортируйте хранилище ключей, как указал Джастин выше. Теперь у вас будет хранилище ключей с сертификатом типа PrivateKeyEntry и длиной цепочки сертификатов более 1.
Некоторые клиенты веб-служб на основе .Net выходят из строя (не могут установить доверительные отношения), если вы не сделаете вышеуказанное.
источник
Если вы работаете с JDK 1.5 или ниже, утилита keytool не будет иметь этой
-importkeystore
опции (см. Документацию по JDK 1.5 keytool ), а решение от MikeD будет доступно только путем переноса.pfx
на машину с более новой JDK (1.6 или выше).Другой вариант в JDK 1.5 или ниже (если у вас есть продукт Oracle WebLogic) - следовать инструкциям из этого документа Oracle: Использование форматов сертификатов PFX и PEM с хранилищами ключей . В нем описывается преобразование в
.pem
формат, как извлечь информацию о сертификатах из этого текстового формата и импортировать ее в.jks
формат с помощьюjava utils.ImportPrivateKey
утилиты (это утилита, включенная в продукт WebLogic).источник