如何将x509.pem pk8文件导入jks-keystore?

时间:2016-09-23 09:52:13

标签: keystore jks

我已经尝试使用命令

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
发生错误。

3 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:0)

鉴于 keytool-importkeypair仅适用于已存在的密钥库,您可以使用此脚本的其他版本,该脚本将通过在一个目录中创建并导入.x509.pem和.pk8来起作用。 新密钥库

此处脚本platform_import_keystore

答案 2 :(得分:0)

方的回答是正确的,但缺乏解释。我不得不想出几点要理解它,尽管我不能百分百确定自己从我的经验中学到的一切,但我很确定它可以帮助人们,所以这就是了。

在此之前,请确保已安装openssl和keytool并将其添加到PATH中,否则命令当然将不起作用。

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

这将从您的pk8文件生成一个文件“ platform.priv.pem”。

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

这将同时使用您的“ platform.x509.pem”文件和先前生成的“ platform.priv.pem”来生成“ platform.pk12”文件。 键别名是您提供的String值,可以是您想要的任何值,但是您需要记住它。

输入此命令后,将提示您输入密码(和密码确认)。您将自己定义此密码。这将是您的“关键密码”,当然,您也需要重新注册它。

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

最终命令实际上将执行以下两项操作之一:
 -如果指定的jks文件已存在,它将导入(或覆盖,如果存在)具有给定别名的密钥
 -如果该文件尚不存在,它将创建一个全新的jks文件,并使用给定的别名导入您的密钥
无论如何,该命令将采用先前定义的密钥密码和密钥别名。

输入命令后,将提示您输入超级密码。如果它是已经存在的jks文件,则必须为其提供已经存在的商店密码。否则,您要定义它,然后再次检查输入的值。

最后,您定义了4个值:
-密钥别名
-密钥密码
-储存密码
-存储文件名

这正是您的Android项目的graddle文件对APK进行签名所需要的:

文件:[Android项目根目录] /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位置开始的相对路径。

希望这会有所帮助!