如何将 x509.pem pk8 文件导入 jks-keystore?
How to import x509.pem pk8 file into 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
发生错误。
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
鉴于 keytool-importkeypair 仅适用于已经存在的密钥库,您可以使用此其他版本的脚本,它将通过创建和导入您的 .x509.pem 和 .pk8 在 新密钥库.
方的回答是正确的,但缺乏解释。我必须弄清楚一些事情才能理解它,虽然我不是 100% 确定我从我的经验中得到的一切,但我很确定它可以帮助人们,所以这里开始。
在此之前,请确保您已安装 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”文件。
密钥别名是您提供的字符串值,它可以是您想要的任何内容,但您需要记住它。
输入此命令后,系统将提示您输入密码(以及密码确认)。您将自己定义此密码。这将是您的“密钥密码”,当然,您也需要记住它。
keytool -importkeystore -destkeystore {{STORE_FILE_NAME}}.jks -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass {{KEY_PASSWORD}} -alias {{KEY_ALIAS}}
最后的命令实际上会做两件事之一:
- 如果指定的 jks 文件已经存在,它将导入(或覆盖如果它存在)具有给定别名的密钥
- 如果该文件尚不存在,它将创建一个全新的 jks 文件,并使用给定的别名导入您的密钥
无论如何,该命令采用先前定义的密钥密码和密钥别名。
输入命令后,系统将提示您输入商店密码。如果它是一个已经存在的 JKS
文件,您将必须提供已经存在的 JKS 商店密码。
否则就是一个新的JKS
你定义的新密码。记住你给它的价值。
一天结束时,您定义了 4 个值:
- 密钥别名
- 密钥密码
- 存储密码
- 存储文件名
这正是您的 Android 项目的 Gradle 文件签署您的 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 位置开始的相对路径。
希望对您有所帮助!
我已经尝试使用命令
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
发生错误。
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
鉴于 keytool-importkeypair 仅适用于已经存在的密钥库,您可以使用此其他版本的脚本,它将通过创建和导入您的 .x509.pem 和 .pk8 在 新密钥库.
方的回答是正确的,但缺乏解释。我必须弄清楚一些事情才能理解它,虽然我不是 100% 确定我从我的经验中得到的一切,但我很确定它可以帮助人们,所以这里开始。
在此之前,请确保您已安装 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”文件。 密钥别名是您提供的字符串值,它可以是您想要的任何内容,但您需要记住它。
输入此命令后,系统将提示您输入密码(以及密码确认)。您将自己定义此密码。这将是您的“密钥密码”,当然,您也需要记住它。
keytool -importkeystore -destkeystore {{STORE_FILE_NAME}}.jks -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass {{KEY_PASSWORD}} -alias {{KEY_ALIAS}}
最后的命令实际上会做两件事之一:
- 如果指定的 jks 文件已经存在,它将导入(或覆盖如果它存在)具有给定别名的密钥
- 如果该文件尚不存在,它将创建一个全新的 jks 文件,并使用给定的别名导入您的密钥
无论如何,该命令采用先前定义的密钥密码和密钥别名。
输入命令后,系统将提示您输入商店密码。如果它是一个已经存在的 JKS
文件,您将必须提供已经存在的 JKS 商店密码。
否则就是一个新的JKS
你定义的新密码。记住你给它的价值。
一天结束时,您定义了 4 个值:
- 密钥别名
- 密钥密码
- 存储密码
- 存储文件名
这正是您的 Android 项目的 Gradle 文件签署您的 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 位置开始的相对路径。
希望对您有所帮助!