web-dev-qa-db-ja.com

キーストア、証明書、エイリアスについて

キーストアは実際の証明書ですか、それともエイリアスですか?

別のエイリアスを使用してアプリに署名すると、市場での更新が台無しになりますか?または、物事を台無しにするために、別のキーストアでアプリにサインアップする必要がありますか?また、エイリアスの下の情報はどこから表示できますか?

94
Roger

Keytool によって生成されたキーストアファイルには、秘密キーと公開キーのペアが格納されます。キーストアに格納されている各ペアまたはエントリは、一意のエイリアスによって参照されます。簡単に言うと:

キーストアエントリ=プライベート+公開キーペア=エイリアスで識別

キーストアは、各プライベートキーを個別のパスワードで保護し、また(おそらく異なる)パスワードでキーストア全体の整合性を保護します。

たとえば、Eclipse Androidツールの[署名済みアプリケーションパッケージのエクスポート]オプションを使用してAndroidアプリケーションに署名する場合、最初にキーストアを選択し、次に単一のものを選択するように求められます。そのキーストアのエイリアス/エントリ/ペア。キーストアと選択したエイリアスの両方にパスワードを提供した後、アプリは署名され、そのエイリアスの公開キー(証明書)がAPKに埋め込まれます。

ここで質問に答えるために、同じエイリアスを使用して更新プログラムに再度署名することで、エイリアス「foo」で署名されたアプリケーションの更新プログラムのみをリリースできます。エイリアスが保存されているキーストアを失うと、アプリの更新バージョンをリリースできなくなります。

ただし、新しいエイリアスでアプリに署名する方法がありますが、keytool -keycloneを使用してキーストアの既存のエイリアスを複製する必要があります。

元のエントリと同じ秘密キーと証明書チェーンを持つ新しいキーストアエントリを作成します。

元のエントリはエイリアスによって識別されます(提供されない場合、デフォルトは「mykey」になります)。新しい(宛先)エントリは、dest_aliasによって識別されます。宛先エイリアスがコマンドラインで指定されていない場合、ユーザーはそれを要求されます。

秘密鍵のパスワードがキーストアのパスワードと異なる場合、有効なキーパスが指定されている場合にのみエントリが複製されます。これは、エイリアスに関連付けられた秘密キーを保護するために使用されるパスワードです。コマンドラインでキーパスワードが指定されておらず、プライベートキーのパスワードがキーストアのパスワードと異なる場合、ユーザーはそれを要求されます。複製されたエントリの秘密鍵は、必要に応じて別のパスワードで保護できます。コマンドラインで-newオプションが指定されていない場合、ユーザーは新しいエントリのパスワードの入力を求められます(また、クローンエントリのプライベートキーと同じにすることもできます)。

詳しくは:

http://download.Oracle.com/javase/1.5.0/docs/tooldocs/solaris/keytool.html

http://developer.Android.com/guide/publishing/app-signing.html

126
Julio Gorgé