Definisi Truststore dan Keystore

Jawaban:

268

Keystore berisi kunci pribadi, dan sertifikat dengan kunci publik yang sesuai.

Toko perwalian berisi sertifikat dari pihak lain yang Anda harapkan untuk berkomunikasi, atau dari Otoritas Sertifikat yang Anda percayai untuk mengidentifikasi pihak lain.

Darron
sumber
12
Meskipun ini harus benar dalam praktiknya, mereka dapat (dan sering) satu sama. Anda sebenarnya dapat mengimpor kunci pribadi dan sertifikat publik ke [home java] / jre / lib / security / cacerts default "truststore". Utilitas keytool tidak membuat perbedaan dalam dua istilah, hanya dalam jenis toko (yaitu - JKS vs PKCS12). Untuk itu, Java melakukan hal yang sama dalam kode sumber. Anda membuat java.security.KeyStore, dan menggunakan trust manager untuk mengelola sertifikat di dalamnya, tetapi tidak ada kelas TrustStore.
4
Java tidak memiliki TrustStore per se . Atau saya tidak dapat menemukannya di java docs (misalnya, java.security.TrustStore). Saat kami ingin mempercayai Otoritas Sertifikat, sertifikat tersebut dipercaya melalui KeyStore(dan KeyStorediteruskan ke TrustManagerFactory).
jww
5
Perlu disebutkan bahwa 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!)
xverges
83
  1. Keystore berisi kunci pribadi. Anda hanya memerlukan ini jika Anda adalah server, atau jika server memerlukan otentikasi klien.

  2. 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

ha9u63ar
sumber
73

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

Aniket Thakur
sumber
31

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.

Peter Mularien
sumber
1
Sayangnya memberikan 404
Chris Beach
@ChrisBeach - telah memperbarui tautan ke yang benar di situs Oracle.
Peter Mularien
1
Truststore digunakan untuk menyimpan sertifikat penandatangan tepercaya.
Marquis of Lorne
9

Di Jawa, apa perbedaan antara keystore dan truststore?

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.

keystore / truststore

Keystore adalah basis data materi utama. Bahan utama digunakan untuk berbagai tujuan, termasuk otentikasi dan integritas data. Berbagai jenis keystores tersedia, termasuk PKCS12 dan JKS Oracle.

Secara umum, informasi keystore dapat dikelompokkan ke dalam dua kategori: entri kunci dan entri sertifikat tepercaya. Entri kunci terdiri dari identitas entitas dan kunci privasinya, dan dapat digunakan untuk berbagai keperluan kriptografi. Sebaliknya, entri sertifikat tepercaya hanya berisi kunci publik di samping identitas entitas. Dengan demikian, entri sertifikat tepercaya tidak dapat digunakan di mana kunci pribadi diperlukan, seperti di javax.net.ssl.KeyManager. Dalam implementasi JDK JKS, keystore dapat berisi entri kunci dan entri sertifikat tepercaya.

Truststore adalah keystore yang digunakan saat membuat keputusan tentang apa yang harus dipercaya. Jika Anda menerima data dari entitas yang sudah Anda percayai, dan jika Anda dapat memverifikasi bahwa entitas itu yang diklaimnya, maka Anda dapat mengasumsikan bahwa data tersebut benar-benar berasal dari entitas itu.

Entri hanya boleh ditambahkan ke truststore jika pengguna mempercayai entitas itu. Dengan menghasilkan pasangan kunci atau dengan mengimpor sertifikat, pengguna memberi kepercayaan pada entri itu. Setiap entri di truststore dianggap sebagai entri tepercaya.

Mungkin bermanfaat untuk memiliki dua file keystore yang berbeda: satu berisi hanya entri kunci Anda, dan yang lainnya berisi entri sertifikat tepercaya Anda, termasuk sertifikat CA. Yang pertama berisi informasi pribadi, sedangkan yang terakhir tidak. Menggunakan dua file alih-alih satu file keystore memberikan pemisahan yang lebih bersih dari perbedaan logis antara sertifikat Anda sendiri (dan kunci pribadi yang sesuai) dan sertifikat orang lain. Untuk memberikan lebih banyak perlindungan untuk kunci pribadi Anda, simpan di suatu keystore dengan akses terbatas, dan berikan sertifikat tepercaya ke dalam keystore yang lebih dapat diakses publik jika diperlukan.

jww
sumber
4
  1. 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.

  2. 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 .

  3. 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/keyStoreatau -Djavax.net.ssl.trustStore /path/to/trustStore. Anda mungkin juga perlu mengatur kata sandi keyStore jika java.security.UnrecoverableKeyException: Password must not be null, menggunakan parameter -Djavax.net.ssl.trustStorePassword=passwordatau-Djavax.net.ssl.trustStorePassword=password

Sumber utama:

http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html

alessiop86
sumber