Memahami keystore, sertifikat, dan alias

95

Apakah keystore adalah sertifikat yang sebenarnya, atau apakah alias adalah sertifikat?

Jika saya menggunakan alias yang berbeda untuk menandatangani aplikasi saya, apakah itu akan mengacaukan pembaruan di pasar? Atau apakah saya perlu menandatangani aplikasi saya dengan keystore yang berbeda untuk mengacaukan semuanya? Dan dari mana info di bawah alias dapat dilihat?

Roger
sumber

Jawaban:

127

File keystore yang dibuat oleh Keytool menyimpan pasangan kunci pribadi dan publik. Setiap pasangan atau entri yang disimpan di keystore direferensikan dengan alias unik. Secara singkat:

Entri Keystore = private + pasangan kunci publik = diidentifikasi dengan alias

Keystore melindungi setiap kunci pribadi dengan sandi individualnya, dan juga melindungi integritas seluruh keystore dengan sandi (yang mungkin berbeda).

Misalnya, saat Anda menandatangani aplikasi Android menggunakan opsi Ekspor Paket Aplikasi yang Ditandatangani dari alat Android Eclipse, Anda akan diminta untuk memilih keystore terlebih dahulu, lalu diminta untuk memilih satu alias / entri / pasangan dari keystore tersebut. Setelah memberikan sandi untuk keystore dan alias yang dipilih, aplikasi ditandatangani dan kunci publik (sertifikat) untuk alias tersebut disematkan ke dalam APK.

Sekarang untuk menjawab pertanyaan Anda, Anda hanya dapat merilis pembaruan untuk aplikasi yang ditandatangani dengan alias 'foo' dengan menandatangani pembaruan lagi dengan alias yang sama. Kehilangan keystore tempat alias disimpan akan mencegah Anda merilis versi terbaru dari aplikasi Anda.

Namun ada cara untuk menandatangani aplikasi dengan alias baru, tetapi ini melibatkan penggandaan alias yang ada di keystore menggunakan keytool -keyclone :

Membuat entri keystore baru, yang memiliki kunci pribadi dan rantai sertifikat yang sama dengan entri asli.

Entri asli diidentifikasi dengan alias (yang defaultnya ke "mykey" jika tidak disediakan). Entri baru (tujuan) diidentifikasi oleh dest_alias. Jika tidak ada alias tujuan yang diberikan pada baris perintah, pengguna akan diminta untuk itu.

Jika kata sandi kunci pribadi berbeda dari kata sandi keystore, maka entri hanya akan digandakan jika keypass yang valid diberikan. Ini adalah kata sandi yang digunakan untuk melindungi kunci pribadi yang terkait dengan alias. Jika tidak ada kata sandi kunci yang diberikan pada baris perintah, dan kata sandi kunci privat berbeda dari kata sandi keystore, pengguna akan diminta untuk memasukkannya. Kunci pribadi dalam entri kloning mungkin dilindungi dengan kata sandi yang berbeda, jika diinginkan. Jika tidak ada opsi -new yang diberikan pada baris perintah, pengguna diminta memasukkan kata sandi entri baru (dan dapat memilih untuk membiarkannya sama dengan kunci pribadi entri kloning).

Informasi lebih lanjut:

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

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

Julio Gorgé
sumber
3
Situs dev menyarankan penggunaan sertifikat yang sama untuk semua aplikasi Anda. Jadi apakah ini berarti, selama saya menggunakan keystore yang sama, saya dapat menggunakan alias apa pun dengan kata sandi apa pun dan itu tidak akan mengacaukan pembaruan, karena itu hanya referensi? Keystore sebenarnya adalah bagian penting?
Roger
1
Saya menulis ulang jawaban saya agar lebih akurat. Singkatnya, Anda memang harus menggunakan alias yang sama untuk menandatangani semua pembaruan aplikasi Anda.
Julio Gorgé
2
@Julio Jadi, apakah praktik terbaiknya adalah menggunakan alias yang sama untuk semua Aplikasi berbeda yang ingin Anda terbitkan, seperti yang disarankan situs pengembang? Saya tidak melihat alasan untuk membuat alias terpisah untuk semua Aplikasi Anda.
Tony Chan
@ JulioGorgé-Hei, saya hanya ingin tahu bahwa nama alias R case sensitive .. ??
Namanya adalah Nilay
@ Julioorgé maksud Anda alias yang sama atau kunci yang sama. Alias ​​hanyalah sebuah nama, saya dapat mengganti nama aliasnya. Anda bisa merilis update selama kunci (kunci publik untuk lebih spesifik) dalam aplikasi cocok.
Dheeraj Bhaskar