1

我正在尝试将现有应用切换到 Google Play 应用签名。有一篇文章为使用密钥库文件的人提供了很好的说明:如何启用 Google Play 应用签名

我的问题是,我只有一个 .p12 文件,而不是密钥库,我无法将其导入密钥库文件(长篇大论)。

使用 Google Play 应用签名的第一步是“将您的应用签名私钥导出到纯文本 PEM 文件”。我这样做了,现在我有了从原始 .p12 派生的纯文本 PEM 文件。根据 Google 的说明,他们似乎只需要带有我的私钥的 PEM 文件,而不是密钥库文件。

我的问题是如何使用pepk工具从 PEM 文件中创建 Google 需要的加密应用签名私钥。

4

2 回答 2

2

Oracle 已经编写了关于将 PEM 转换为密钥库的完整说明。它还涵盖了 p12。这可能会做你想要的。

不幸的是,搜索引擎很难找到它,因为他们称之为“JKS”而不是密钥库。

简而言之:

使用以下命令将证书从 PEM 转换为 PKCS12:openssl pkcs12 -export -out eneCert.pkcs12 -in eneCert.pem

您可以忽略此命令发出的警告消息。输入并重复导出密码。使用以下命令创建然后删除一个空的信任库:

keytool -genkey -keyalg RSA -alias endeca -keystore truststore.ks
keytool -delete -alias endeca -keystore truststore.ks

-genkey 命令创建如下所示的默认证书。(这是一个临时证书,随后会被 -delete 命令删除,因此您在此处输入什么信息都没有关系。)

Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: 
What is the name of your organizational unit?
[Unknown]:  
What is the name of your organization?
[Unknown]:  
What is the name of your City or Locality?
[Unknown]: 
What is the name of your State or Province?
[Unknown]: 
What is the two-letter country code for this unit?
[Unknown]: 
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
[no]: yes

Enter key password for <endeca>
      (RETURN if same as keystore password):
Re-enter new password:

使用以下命令将 CA 导入信任库:keytool -import -v -trustcacerts -alias endeca-ca -file eneCA.pem -keystore truststore.ks

输入密钥库密码。出现提示“信任此证书?” 输入是。使用以下命令创建一个空的 Java KeyStore:

keytool -genkey -keyalg RSA -alias endeca -keystore keystore.ks
keytool -delete -alias endeca -keystore keystore.ks

-genkey 命令创建如下所示的默认证书。(这是一个临时证书,随后会被 -delete 命令删除,因此您在此处输入什么信息都没有关系。)

Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: 
What is the name of your organizational unit?
[Unknown]:  
What is the name of your organization?
[Unknown]:  
What is the name of your City or Locality?
[Unknown]: 
What is the name of your State or Province?
[Unknown]: 
What is the two-letter country code for this unit?
[Unknown]: 
Is CN="Unknown", OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
[no]: yes

使用以下命令将您的私钥导入空 JKS:

keytool -v -importkeystore -srckeystore eneCert.pkcs12 -srcstoretype PKCS12 -destkeystore keystore.ks -deststoretype JKS
于 2018-06-06T07:38:53.093 回答
0

谢谢尼克,这工作得很好。使用创建的 keystore.ks 我可以使用 pepk jar 命令。也许作为对遇到相同问题的人的扩展:pepk jar 想要一个“别名”作为参数。要从您的 keystore.ks 中获取别名,您可以使用以下命令:

keytool -v  -list  -keystore keystore.ks

这将返回存储在 .ks 文件中的信息。您可以在那里看到属性别名。在我的情况下,该值只是1,因为原始 .p12 文件没有别名。

所以我最后的 pepk 命令看起来像这样:

java -jar pepk.jar --keystore=keystore.ks --alias=1 --output=encrypted_private_key_path --encryptionkey=SomeKeyWhichIsDisplayedInThePlayConsoleWindow
于 2021-07-15T08:06:53.840 回答