Подтвердить что ты не робот

Как импортировать файл x509.pem pk8 в jks-keystore?

Я уже пытался использовать команду

keytool -import -keystore *.jks -alias alias_name -keypass alias_passwd -file *.x509.pem' (no *.pk8 file)

но когда я использую jks для подписи APK,

trusted certificate entries are not password-protected

ошибка.

4b9b3361

Ответ 1

openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.priv.pem -nocrypt

openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.pk12 -name android

keytool -importkeystore -destkeystore platform.jks -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass android -alias android

Ответ 2

Учитывая, что keytool-importkeypair работает только с уже имеющимся хранилищем ключей, вы можете использовать эту другую версию сценария, которая будет работать, создав и импортировав ваши .x509.pem и .pk8 в новый Хранилище ключей.

Здесь скрипт platform_import_keystore

Ответ 3

Ответ клыка правильный, но ему не хватает объяснения. Я должен был придумать пару вещей, чтобы понять это, и хотя я не уверен на 100% во всем, что я извлек из своего опыта, я почти уверен, что это может помочь людям, так что здесь.

Предварительно убедитесь, что у вас установлены openssl и keytool и добавлены в PATH, иначе команды, конечно, не будут работать.

openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.priv.pem -nocrypt

Это создаст файл "platform.priv.pem" из файла pk8.

openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.pk12 -name {{KEY_ALIAS}}

При этом будет создан файл "platform.pk12" с использованием как файла "platform.x509.pem", так и ранее созданного "platform.priv.pem". Псевдоним ключа - это предоставленное вами строковое значение, оно может быть любым, но вы должны его запомнить.

После ввода этой команды вам будет предложено ввести пароль (и подтверждение пароля). Вы сами определите этот пароль. Это будет ваш "ключевой пароль", и, конечно же, вам придется помнить его тоже.

keytool -importkeystore -destkeystore {{STORE_FILE_NAME}}.jks -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass {{KEY_PASSWORD}} -alias {{KEY_ALIAS}}

Последняя команда на самом деле сделает одну из двух вещей:
 - если указанный файл jks уже существует, он импортирует (или перезаписывает, если он существует) ключ с указанным псевдонимом
 - если файл еще не существует, он создаст новый файл jks и импортирует ваш ключ с указанным псевдонимом
В любом случае, команда принимает предварительно определенный пароль и псевдоним ключа.

Как только команда введена, вам будет предложено ввести пароль SOTRE. Если это уже существующий JKS файл, вам придется дать ему уже существующий пароль магазина. В противном случае вы определяете его и, еще раз, следите за значением, которое вы ему даете.

В конце дня вы определили 4 значения:
- псевдоним ключа
- ключевой пароль
- сохранить пароль
- хранить имя файла

И это именно то, что нужно файлу вашего проекта Android для подписи вашего APK:

Файл: [Android Project Root]/app/build.graddle

[...]
android {
    [...]
    signingConfigs {
        release {
            storeFile file("{{STORE_FILE_PATH*}}/{{STORE_FILE_NAME}}.jks")
            storePassword "{{STORE_PASSWORD}}"
            keyAlias "{{KEY_ALIAS}}"
            keyPassword "{{KEY_PASSWORD}}"
        }
    }
    [...]
}
[...]

*: файл jks, вероятно, должен быть размещен в вашем проекте, как для создания версий, так и для простоты. Укажите относительный путь от вашего местоположения build.graddle.

Надеюсь это поможет !