Perbedaan Antara Keystore Java dan Truststore

Java Top

Saya baru saja mengumumkan kursus Learn Spring baru , yang berfokus pada dasar-dasar Spring 5 dan Spring Boot 2:

>> LIHAT KURSUSnya

1. Ikhtisar

Dalam artikel singkat ini, kami akan memberikan gambaran umum tentang perbedaan antara keystore Java dan truststore Java.

2. Konsep

Dalam kebanyakan kasus, kami menggunakan keystore dan truststore saat aplikasi kami perlu berkomunikasi melalui SSL / TLS .

Biasanya, ini adalah file yang dilindungi kata sandi yang berada di sistem file yang sama dengan aplikasi kami yang sedang berjalan. Format default yang digunakan untuk file-file ini adalah JKS hingga Java 8 .

Sejak Java 9, format keystore default adalah PKCS12 . Perbedaan terbesar antara JKS dan PKCS12 adalah bahwa JKS adalah format khusus untuk Java, sedangkan PKCS12 adalah cara standar dan bahasa-netral untuk menyimpan kunci privat dan sertifikat terenkripsi.

3. Java KeyStore

Sebuah keystore Java menyimpan entri kunci privat, sertifikat dengan kunci publik atau hanya kunci rahasia yang dapat kami gunakan untuk berbagai tujuan kriptografi. Itu menyimpan masing-masing dengan alias untuk kemudahan pencarian.

Secara umum, keystore menyimpan kunci yang dimiliki aplikasi kita yang dapat digunakan untuk membuktikan integritas pesan dan keaslian pengirim, misalnya dengan menandatangani payload.

Biasanya, kita akan menggunakan keystore saat kita menjadi server dan ingin menggunakan HTTPS . Selama handshake SSL, server mencari kunci pribadi dari keystore dan menyajikan kunci publik dan sertifikatnya yang sesuai kepada klien.

Sejalan dengan itu, jika klien juga perlu mengautentikasi dirinya sendiri - situasi yang disebut otentikasi timbal balik - maka klien juga memiliki keystore dan juga menunjukkan kunci publik dan sertifikatnya.

Tidak ada keystore default, jadi jika kita ingin menggunakan saluran terenkripsi, kita harus menyetel javax.net.ssl.keyStore dan javax.net.ssl.keyStorePassword. Jika format keystore kami berbeda dari default, kami dapat menggunakan javax.net.ssl.keyStoreType untuk menyesuaikannya.

Tentu saja, kita dapat menggunakan kunci ini untuk melayani kebutuhan lain juga. Kunci pribadi dapat menandatangani atau mendekripsi data, dan kunci publik dapat memverifikasi atau mengenkripsi data. Tombol rahasia juga dapat menjalankan fungsi ini. Keystore adalah tempat kita bisa menyimpan kunci-kunci ini.

Kita juga bisa berinteraksi dengan keystore secara terprogram.

4. Java TrustStore

Truststore adalah kebalikannya - sementara keystore biasanya menyimpan sertifikat yang mengidentifikasi kita, truststore memegang sertifikat yang mengidentifikasi orang lain.

Di Java, kami menggunakannya untuk mempercayai pihak ketiga yang akan kami hubungi.

Ambil contoh kami sebelumnya. Jika klien berbicara dengan server berbasis Java melalui HTTPS, server akan mencari kunci terkait dari keystore dan menyajikan kunci publik dan sertifikat kepada klien.

Kami, klien, kemudian mencari sertifikat terkait di toko kepercayaan kami. Jika sertifikat atau Otoritas Sertifikat yang diberikan oleh server eksternal tidak ada di toko kepercayaan kami, kami akan mendapatkan SSLHandshakeException dan sambungan tidak akan berhasil disiapkan.

Java telah menggabungkan truststore yang disebut cacerts dan berada di direktori $ JAVA_HOME / jre / lib / security .

Ini berisi Otoritas Sertifikat default dan tepercaya:

$ keytool -list -keystore cacerts Enter keystore password: Keystore type: JKS Keystore provider: SUN Your keystore contains 92 entries verisignclass2g2ca [jdk], 2018-06-13, trustedCertEntry, Certificate fingerprint (SHA1): B3:EA:C4:47:76:C9:C8:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D

Kita lihat di sini bahwa truststore mengandung 92 terpercaya entri sertifikat dan salah satu entri adalah verisignclass2gca entri . Artinya, JVM akan secara otomatis mempercayai sertifikat yang ditandatangani oleh verisignclass2g2ca .

Di sini, kita dapat mengganti lokasi truststore default melalui properti javax.net.ssl.trustStore . Demikian pula, kita dapat menyetel javax.net.ssl.trustStorePassword dan javax.net.ssl.trustStoreType untuk menentukan sandi dan jenis truststore .

5. Kesimpulan

Dalam tutorial ini, kita membahas perbedaan utama antara keystore Java dan truststore Java serta tujuannya.

Juga, kami menunjukkan bagaimana default dapat diganti dengan properti sistem.

Selanjutnya, kita bisa melihat panduan SSL berikut atau Panduan Referensi JSSE untuk mempelajari lebih detail tentang komunikasi terenkripsi di Java.

Jawa bawah

Saya baru saja mengumumkan kursus Learn Spring baru , yang berfokus pada dasar-dasar Spring 5 dan Spring Boot 2:

>> LIHAT KURSUSnya