Apa perbedaan antara keystore dan truststore?
keystore
encryption-asymmetric
truststore
Rob Wright
sumber
sumber
TrustStore
per se . Atau saya tidak dapat menemukannya di java docs (misalnya,java.security.TrustStore
). Saat kami ingin mempercayai Otoritas Sertifikat, sertifikat tersebut dipercaya melaluiKeyStore
(danKeyStore
diteruskan keTrustManagerFactory
).KeyStore.load(InputStream is, char[] password)
( docs ) dapat mengambil kata sandi nol dan kemudian akan memberikan akses ke sertifikat publik. Artinya, kode yang ingin menelusuri truststore tidak perlu mengetahuinya kata sandi (untuk alasan yang sangat bagus!)Keystore berisi kunci pribadi. Anda hanya memerlukan ini jika Anda adalah server, atau jika server memerlukan otentikasi klien.
Truststore berisi sertifikat CA untuk dipercaya. Jika sertifikat server Anda ditandatangani oleh CA yang diakui, toko kepercayaan default yang dikirimkan bersama JRE akan memercayainya (karena sudah mempercayai CA yang dapat dipercaya), jadi Anda tidak perlu membuat sendiri, atau menambahkan apa pun ke yang dari JRE.
Sumber
sumber
Dalam jabat tangan SSL tujuan trustStore adalah untuk memverifikasi kredensial dan tujuan keyStore adalah untuk memberikan kredensial .
keyStore
keyStore di Java menyimpan kunci pribadi dan sertifikat yang sesuai dengan kunci publik mereka dan mengharuskan jika Anda SSL Server atau SSL memerlukan otentikasi klien.
TrustStore
TrustStore menyimpan sertifikat dari pihak ketiga, aplikasi Java Anda berkomunikasi atau sertifikat yang ditandatangani oleh CA (otoritas sertifikat seperti Verisign, Thawte, Geotrust atau GoDaddy) yang dapat digunakan untuk mengidentifikasi pihak ketiga.
TrustManager
TrustManager menentukan apakah koneksi jarak jauh harus dipercaya atau tidak yaitu apakah pihak jarak jauh adalah pihak yang diklaimnya dan KeyManager memutuskan kredensial otentikasi mana yang harus dikirim ke host jarak jauh untuk otentikasi selama jabat tangan SSL.
Jika Anda seorang Server SSL, Anda akan menggunakan kunci pribadi selama algoritma pertukaran kunci dan mengirim sertifikat yang sesuai dengan kunci publik Anda ke klien, sertifikat ini diperoleh dari keyStore. Di sisi klien SSL, jika ditulis dalam Java, ia akan menggunakan sertifikat yang disimpan di trustStore untuk memverifikasi identitas Server. Sertifikat SSL yang paling sering datang sebagai cer berkas yang ditambahkan ke dalam keystore atau trustStore dengan menggunakan manajemen utilitas kunci misalnya keytool .
Sumber: http://javarevisited.blogspot.ch
sumber
Anda mungkin juga tertarik dengan penulisan dari Sun, sebagai bagian dari dokumentasi JSSE standar:
http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores
Biasanya, trust store digunakan untuk menyimpan kunci publik saja, untuk keperluan verifikasi, seperti dengan otentikasi X.509. Untuk tujuan pengelolaan, cukup umum bagi admin atau pengembang untuk mengubah keduanya menjadi satu toko.
sumber
Berikut deskripsi dari dokumen Java di Panduan Referensi Ekstensi Java Secure Socket (JSSE) . Saya tidak berpikir itu memberitahu Anda sesuatu yang berbeda dari apa yang dikatakan orang lain. Tapi itu memang memberikan referensi resmi.
sumber
Perbedaan pertama dan utama antara trustStore dan keyStore adalah bahwa trustStore digunakan oleh TrustManager untuk menentukan apakah koneksi jarak jauh harus dipercaya, keyStore digunakan dari KeyManager memutuskan kredensial otentikasi mana yang harus dikirim ke host jarak jauh untuk otentikasi selama jabat tangan SSL.
Perbedaan lainnya adalah bahwa keyStore secara teoritis berisi kunci pribadi yang diperlukan hanya jika Anda menjalankan Server dalam koneksi SSL atau Anda telah mengaktifkan otentikasi klien di sisi server dan di sisi lain trustStore menyimpan kunci publik atau sertifikat dari CA (Otoritas Sertifikat) yang digunakan untuk percayai pihak jauh atau koneksi SSL.
Bahkan Anda dapat menyimpan dalam file yang sama baik kunci privat maupun publik, mengingat bahwa alat untuk mengelola file tersebut adalah sama (keytool), sehingga Anda dapat menggunakan satu file untuk kedua tujuan, tetapi Anda mungkin sebaiknya tidak melakukannya .
Setidaknya pada Mac OSX saya, keyStore default adalah
${user.home}/.keystore
, dan trustStore default adalah/System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
.Jika Anda ingin menimpanya, Anda harus menambahkan parameter JVM
-Djavax.net.ssl.keyStore /path/to/keyStore
atau-Djavax.net.ssl.trustStore /path/to/trustStore
. Anda mungkin juga perlu mengatur kata sandi keyStore jikajava.security.UnrecoverableKeyException: Password must not be null
, menggunakan parameter-Djavax.net.ssl.trustStorePassword=password
atau-Djavax.net.ssl.trustStorePassword=password
Sumber utama:
sumber