【问题标题】:Can I change Android signing certificate Subject while keeping the private key我可以在保留私钥的同时更改 Android 签名证书主题吗
【发布时间】:2012-11-20 22:27:39
【问题描述】:

我开发了一个 Android 应用程序,我将其转移给另一个人以进一步开发。我了解如果新开发者使用相同的密钥库,无缝升级过程将继续。

Android 在更新应用程序时如何验证证书?它只是仅验证签名还是比较整个证书和主题名称?

我的问题是,新开发者想以他们的公司名称而不是我的名义推销该应用程序,因此 Google 帐户发生了变化。但是证书也包含我的名字,我想用相同的私钥生成新证书,它应该产生相同的签名,但证书中的主题不同。

我没有将证书用于任何其他应用程序,所以我可以将其赠送。

PS。是否可以使用相同的密钥库和软件包名称从另一个 Google 帐户上传相同的应用程序,以便继续无缝升级?

【问题讨论】:

    标签: android google-play


    【解决方案1】:

    不,当证书被签署时,证书的TBS 字段被签署。如您所见,TBS 文件包含 Subject 字段。

     Certificate  ::=  SEQUENCE  {
            tbsCertificate       TBSCertificate,
            signatureAlgorithm   AlgorithmIdentifier,
            signatureValue       BIT STRING  }
    
       TBSCertificate  ::=  SEQUENCE  {
            version         [0]  EXPLICIT Version DEFAULT v1,
            serialNumber         CertificateSerialNumber,
            signature            AlgorithmIdentifier,
            issuer               Name,
            validity             Validity,
            subject              Name,
            subjectPublicKeyInfo SubjectPublicKeyInfo,
            issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                                 -- If present, version MUST be v2 or v3
    

    因此,您无法更改 TBS 中的字段。要么继续而不更改证书(主题),要么使用其他人的凭据创建新证书。但为此,您必须停用您的应用程序。 并上传新应用(不是作为更新,而是作为新应用),我认为这不是一个好的解决方案。因此,最好继续使用您的证书。

    它不关心实际的“详细信息”(证书 DN、序列号等),而只是将证书作为二进制 blob 进行比较,如 here 所述。由于证书不同,您无法将最初使用 cert1 签名的应用更新为使用另一个使用 cert2 签名的应用。

    【讨论】:

    • 当然,当我修改tbsCertificate字段时,现有的签名变得无效,但我说的是包含相同公钥并且自己签名的全新证书使用相同的私钥。该证书本身是有效的。由于此公钥对应于用于签署两个应用程序的私钥,因此应用程序的签名也应该通过。
    • 您的意思是Android使用tbsCertificate字段作为验证更新是否为同一应用的基础?
    • @Laas :通过检查 TBS 字段(android 或任何地方)上的签名来验证证书。即使您使用相同的公私对并更改主题名称,它也不起作用。因为现在签名会改变。安卓会检测到签名发生变化,因此不会让你更新应用程序。
    • 你错了。当我签署一些thing 时,我使用我保密的私钥。然后我发布这个签名的thing 以及包含我的公钥 的证书。为了验证我的签名,证书中的公钥用于验证签名实际上是使用我的私钥制作的。
    • @Laas :见这篇文章(也见 cmets)-stackoverflow.com/questions/10938298/… 它说 1)检查了应用程序签名 2)然后将歌唱证书作为二进制 blob 与当前安装的证书进行比较应用程序的版本,以确保两个版本已使用相同的密钥/证书(例如,由同一个人/公司)签署
    【解决方案2】:

    您不能更改已颁发证书的详细信息,也不能颁发新证书作为旧证书的替代品。因此,基本上如果您的应用程序已经发布,您要么坚持使用您使用的证书,要么您需要删除证书,在这种情况下,这意味着您需要发布 新应用程序(而不是更新)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-20
      • 2011-11-16
      • 2020-05-10
      相关资源
      最近更新 更多