【问题标题】:App signing by Google Play: no keystore, just .p12Google Play 应用签名:没有密钥库,只有 .p12
【发布时间】:2018-06-05 21:22:20
【问题描述】:

我正在尝试将现有应用切换到 Google Play 应用签名。有一篇文章对使用密钥库文件的人有很好的说明:How to enable Google Play App Signing

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

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

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

【问题讨论】:

    标签: android google-play android-app-signing


    【解决方案1】:

    Oracle has written complete instructions 将 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
    

    【讨论】:

    • 谢谢尼克!几天后我会尝试一下,并会报告它的效果。
    【解决方案2】:

    谢谢尼克,这是完美的工作。 通过创建的 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-06-22
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 2018-11-09
      • 2017-12-01
      • 2021-02-16
      • 2018-07-29
      • 2019-01-10
      相关资源
      最近更新 更多