使用openssl证书直接使用cordova apk时apksigner失败

问题描述 投票:0回答:1

TLDR:apksigner sign -key rsa_der.key -cert x509.cert app.apk在直接使用openssl生成的证书和密钥时未能存储在密钥库中。


我想让apksigner在我们的CI服务器上工作,但是,我不想在每个构建上生成一个java密钥库文件,或者在构建之间安全地存储一个。

该应用程序是一个使用cordova build android --release构建的cordova应用程序。

我做了以下工作来创建一个证书和密钥的预期格式。我已经尝试了多种生成证书和密钥的方法,以下是最简洁的。 (nb.passphrase.txt包含一个大密码,在Fedora 29机器上执行的所有命令)

$ openssl req -x509 -days 9125 -newkey rsa:4096 -keyout rsa_pem.key -out x509.cert # generate certificate & key
$ openssl pkcs8 -topk8 -inform PEM -outform DER -in rsa_pem.key -out rsa_der.key -passout file:passphrase.txt # convert key over to DER formatted pkcs8, as required by apksigner

尝试使用证书和密钥签署apk失败:

$ apksigner sign -key rsa_der.key --key-pass file:passphrase.txt -cert x509.cert app.apk
Failed to load signer "signer #1"
java.security.spec.InvalidKeySpecException: Failed to load PKCS #8 encoded private key from ./rsa_der.key
    at com.android.apksigner.ApkSignerTool$SignerParams.loadPrivateKeyAndCertsFromFiles(ApkSignerTool.java:911)
    at com.android.apksigner.ApkSignerTool$SignerParams.loadPrivateKeyAndCerts(ApkSignerTool.java:665)
    at com.android.apksigner.ApkSignerTool$SignerParams.access$500(ApkSignerTool.java:615)
    at com.android.apksigner.ApkSignerTool.sign(ApkSignerTool.java:269)
    at com.android.apksigner.ApkSignerTool.main(ApkSignerTool.java:89)
Caused by: java.security.spec.InvalidKeySpecException: Not an RSA, EC, or DSA private key
    at com.android.apksigner.ApkSignerTool$SignerParams.loadPkcs8EncodedPrivateKey(ApkSignerTool.java:968)
    at com.android.apksigner.ApkSignerTool$SignerParams.loadPrivateKeyAndCertsFromFiles(ApkSignerTool.java:909)
    ... 4 more

如上所述,我不希望在每个构建上创建和删除密钥库,或者需要在构建之间存储密钥库。

我究竟做错了什么?

android cordova apk android-signing
1个回答
0
投票

在这种特殊情况下,它最终成为密钥长度(我认为),并使用基于文件的密码短语。

以下为我们工作:

openssl req -x509 -days 9125 -newkey rsa:1024 -nodes -keyout key.pem -out certificate_x509.pem
openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 -nocrypt
apksigner sign --key key.pk8 --cert certificate_x509.pem app.apk

由于这在私钥上缺少密码,因此它的安全性稍差。

© www.soinside.com 2019 - 2024. All rights reserved.