7

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

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

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

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

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

4

2 回答 2

5

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

 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 进行比较,如此所述。由于证书不同,您无法将最初使用 cert1 签名的应用程序更新为使用 cert2 签名的另一个应用程序。

于 2012-11-20T12:14:26.340 回答
0

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

于 2012-11-20T12:15:31.367 回答