问题描述
在 Google Play 管理中心中,您可以上传加密的应用签名密钥以将现有应用转换为使用 Google 托管应用签名: https://support.google.com/googleplay/android-developer/answer/9842756?hl=en#zippy=%2Cexisting-apps
提供了 3 种不同的方法,它们都会产生相同的加密密钥,但从不同类型的输入开始:
- 来自 Android Studio
- 来自 Java 密钥库
- 来自非 Java 密钥库或自定义密钥格式
我正在迁移以前由我的安全部门管理的 Google Play 帐户,我唯一的输入是 PEM 格式的证书和随附的私钥。
如果查看方法 3,这实际上只提供了一个 pepk-source.jar
文件,据说您可以使用该文件编译自己的 Java 工具,将您的密钥转换为 Google 接受的加密格式。似乎很奇怪,没有记录的方法可以将证书和私钥转换为加密的应用签名密钥?
解决方法
以下是从 .cer
+ .pem
到加密应用签名密钥的说明。
下面,为简单起见,我在所有命令中使用 xxx
作为标识符。根据需要将 xxx
替换为您想要的名称:
输入:
-
xxx.cer
- 证书 -
xxx.pem
- 私钥 (PEM)
我们不是创建一个工具来使用 pepk.jar
从私钥到加密的应用签名密钥,而是从 cer+pem 对创建一个密钥库,然后按照说明导入应用签名来自密钥库的密钥:
1.将 .cer
+.pem
转换为 .pkcs12
:
$ openssl pkcs12 -inkey xxx-private-key.pem -in xxx.cer -name xxx -export -out xxx.pkcs12
请注意 name
是必需的,因为它稍后将用作 alias
。这花了我一段时间
想办法。
2.从 pkcs12 文件创建一个密钥库:
$ keytool -importkeystore -srckeystore xxx.pkcs12 -srcstoretype pkcs12 -alias xxx -destkeystore xxx.keystore
3.运行pepk工具将keystore转换成加密密钥
使用在 Google Play 控制台中找到的公钥(此处被截断):
$ java -jar pepk.jar --keystore=xxx.keystore --alias xxx --output xxx-encrypted-private-key --encryptionkey=eb10fe8...
4.上传生成的 xxx-encrypted-private-key
文件。
完成!