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 に答える