Bagaimana cara membuat keystore dan truststore menggunakan sertifikat yang ditandatangani sendiri?

17

Kami memiliki server JAVA dan klien berkomunikasi melalui jaringan menggunakan SSL. Server dan klien saling mengotentikasi satu sama lain menggunakan sertifikat. Jenis keystore yang digunakan oleh server dan klien adalah JKS. Server dan klien memuat file keystore dan truststore mereka. Nama file keystore dan truststore adalah: server.keystore, server.truststore, client.keystore, dan client.truststore. Saya menggunakan sertifikat yang ditandatangani sendiri untuk pengujian saja.

Pertanyaan:

Q1. Saya ingin tahu mengapa saya perlu menambahkan sertifikat server dan klien sendiri ke dalam truststore masing-masing, pada langkah 6.

Q2. Bisakah saya mengurangi jumlah langkah untuk mencapai hal yang sama? Jika ya, lalu bagaimana?

Langkah-langkah untuk membuat kunci RSA, sertifikat yang ditandatangani sendiri, keystore, dan truststore untuk server

  1. Hasilkan kunci RSA pribadi

    openssl genrsa -out diagserverCA.key 2048
    
  2. Buat sertifikat x509

    openssl req -x509 -new -nodes -key diagserverCA.key \
                -sha256 -days 1024 -out diagserverCA.pem
    
  3. Buat keystore PKCS12 dari kunci pribadi dan sertifikat publik.

    openssl pkcs12 -export -name server-cert \
                   -in diagserverCA.pem -inkey diagserverCA.key \
                   -out serverkeystore.p12
    
  4. Ubah PKCS12 keystore menjadi keystore JKS

    keytool -importkeystore -destkeystore server.keystore \
            -srckeystore serverkeystore.p12 -srcstoretype pkcs12 
            -alias server-cert
    
  5. Impor sertifikat klien ke toko kepercayaan server.

    keytool -import -alias client-cert \
            -file diagclientCA.pem -keystore server.truststore
    
  6. Impor sertifikat server ke toko kepercayaan server.

    keytool -import -alias server-cert \
            -file diagserverCA.pem -keystore server.truststore
    

Langkah-langkah untuk membuat kunci pribadi RSA, sertifikat yang ditandatangani sendiri, keystore, dan truststore untuk klien

  1. Buat kunci pribadi

    openssl genrsa -out diagclientCA.key 2048
    
  2. Buat sertifikat x509

    openssl req -x509 -new -nodes -key diagclientCA.key \
                -sha256 -days 1024 -out diagclientCA.pem
    
  3. Buat keystore PKCS12 dari kunci pribadi dan sertifikat publik.

    openssl pkcs12 -export -name client-cert \
                   -in diagclientCA.pem -inkey diagclientCA.key \
                   -out clientkeystore.p12
    
  4. Ubah keystore PKCS12 menjadi keystore JKS

    keytool -importkeystore -destkeystore client.keystore \
            -srckeystore clientkeystore.p12 -srcstoretype pkcs12 \
            -alias client-cert
    
  5. Impor sertifikat server ke toko kepercayaan klien.

    keytool -import -alias server-cert -file diagserverCA.pem \
            -keystore client.truststore
    
  6. Impor sertifikat klien ke toko kepercayaan klien.

    keytool -import -alias client-cert -file diagclientCA.pem \
            -keystore client.truststore
    
vic99
sumber

Jawaban:

3

Https normal hanya membutuhkan 1 perintah;

keytool -genkeypair

Jika klien tidak secara buta mempercayai sertifikat apa pun, maka Anda perlu menyalin sertifikat publik server Anda ke klien.

Mengapa Anda menggunakan openssl?

https://docs.oracle.com/javase/10/tools/keytool.htm

pengguna1133275
sumber
Sampai hasil edit saya ditinjau oleh rekan: Bendera adalah -pengasuh dan Anda dapat menambahkan banyak tanda yang berbeda untuk menyesuaikan sertifikat (mis. -Validitas 365 atau -nama "cn = Mark Jones, ou = JavaSoft, o = Sun, c = US "). Lihat tautan di jawaban untuk lebih jelasnya.
Johannes Stadler
1
@JohannesStadler Terima kasih, saya menyetujui suntingan Anda dan memperbarui tautan ke versi java terbaru, perhatikan bahwa "Perintah ini bernama -genkey di rilis sebelumnya"
user1133275