Dengan melihat file java.security
my JRE
, saya melihat bahwa jenis keystore yang digunakan secara default disetel ke JKS
. Sini , ada daftar jenis keystore yang bisa digunakan.
Apakah ada jenis keystore yang direkomendasikan? Apa pro / kontra dari berbagai jenis keystore?
Jawaban:
Ada beberapa jenis lebih banyak dari yang tercantum dalam daftar nama standar yang Anda tautkan. Anda dapat menemukan lebih banyak di dokumentasi penyedia kriptografi . Yang paling umum adalah
JKS
(default) danPKCS12
(untuk file PKCS # 12, seringkali dengan ekstensi.p12
atau kadang-kadang.pfx
).JKS adalah yang paling umum jika Anda tinggal di dunia Jawa. PKCS # 12 tidak khusus untuk Java, sangat nyaman menggunakan sertifikat (dengan kunci pribadi) yang dicadangkan dari browser atau berasal dari alat berbasis OpenSSL (
keytool
tidak dapat mengonversi keystore dan mengimpor kunci pribadinya sebelum Java 6 , jadi Anda harus menggunakan alat lain).Jika Anda sudah memiliki file PKCS # 12, seringkali lebih mudah untuk menggunakan
PKCS12
tipe secara langsung. Anda dapat mengonversi format, tetapi jarang diperlukan jika Anda dapat memilih jenis keystore secara langsung.Di Java 7,
PKCS12
berguna terutama sebagai keystore tetapi lebih sedikit untuk truststore (lihat perbedaan antara keystore dan truststore ), karena Anda tidak dapat menyimpan entri sertifikat tanpa kunci pribadi. Sebaliknya,JKS
tidak mengharuskan setiap entri menjadi entri kunci privat, sehingga Anda dapat memiliki entri yang hanya berisi sertifikat, yang berguna untuk toko kepercayaan, tempat Anda menyimpan daftar sertifikat yang Anda percayai (tetapi Anda tidak memiliki kunci pribadi untuk mereka).Ini telah berubah di Java 8, jadi Anda sekarang dapat memiliki entri khusus sertifikat di
PKCS12
toko juga. (Rincian lebih lanjut tentang perubahan ini dan rencana lebih lanjut dapat ditemukan di JEP 229: Membuat Keystore PKCS12 secara Default .)Ada beberapa jenis keystore lain, yang mungkin lebih jarang digunakan (bergantung pada konteksnya), yang meliputi:
PKCS11
, untuk pustaka PKCS # 11, biasanya untuk mengakses token kriptografi perangkat keras, tetapi implementasi penyedia Sun juga mendukung penyimpanan NSS (dari Mozilla) melalui ini.BKS
, menggunakan penyedia BouncyCastle (biasanya digunakan untuk Android).Windows-MY
/Windows-ROOT
, jika Anda ingin mengakses penyimpanan sertifikat Windows secara langsung.KeychainStore
, jika Anda ingin menggunakan keychain OSX secara langsung.sumber
KeyStore
implementasi untuk efek tersebut). Namun Anda dapat memuatnya dengan cepat ke dalam instance keystore (biasanya JKS, tipe default) dalam memori menggunakanCertificateFactory
(seperti yang ditunjukkan dalam jawaban ini ).JKS
telah berubah menjadiJCEKS
Berikut adalah posting yang memperkenalkan berbagai jenis keystore di Java dan perbedaan di antara berbagai jenis keystore. http://www.pixelstech.net/article/1408345768-Different-types-of-keystore-in-Java----Overview
Di bawah ini adalah deskripsi keystore yang berbeda dari postingan:
sumber
Jika Anda menggunakan Java 8 atau yang lebih baru, Anda pasti harus memilih
PKCS12
, default sejak Java 9 ( JEP 229 ).Keunggulannya dibandingkan
JKS
danJCEKS
adalah:PKCS12
adalah format standar, dapat dibaca oleh program dan perpustakaan lain 1JKS
danJCEKS
cukup tidak aman. Hal ini dapat dilihat dari jumlah alat untuk brute forcing password dari jenis keystore ini, terutama yang populer di kalangan developer Android. 2, 31 Ada JDK-8202837 , yang telah diperbaiki di Jawa 11
2 Jumlah iterasi untuk PBE yang digunakan oleh semua jenis keystore (termasuk PKCS12) biasanya agak mingguan ( CVE-2017-10356 ), namun hal ini telah diperbaiki di 9.0.1, 8u151, 7u161, dan 6u171
3 Untuk bacaan lebih lanjut:
sumber