Come creare keystore e truststore utilizzando un certificato autofirmato?


17

Abbiamo server e client JAVA che comunicano su una rete tramite SSL. Il server e il client si autenticano reciprocamente mediante certificati. Il tipo di keystore utilizzato dal server e dal client è JKS. Il server e il client caricano i file di archivio chiavi e truststore. I nomi dei file keystore e truststore sono: server.keystore, server.truststore, client.keystore e client.truststore. Sto usando i certificati autofirmati solo per i test.

Domande:

Q1. Vorrei sapere perché devo aggiungere i certificati del server e del client nei rispettivi truststores, nel passaggio 6.

Q2. Posso ridurre i passaggi numerici per ottenere la stessa cosa? Se sì, allora come?

Passaggi per creare chiave RSA, certificati autofirmati, keystore e truststore per un server

  1. Genera una chiave RSA privata

    openssl genrsa -out diagserverCA.key 2048
    
  2. Crea un certificato x509

    openssl req -x509 -new -nodes -key diagserverCA.key \
                -sha256 -days 1024 -out diagserverCA.pem
    
  3. Creare un keystore PKCS12 da chiave privata e certificato pubblico.

    openssl pkcs12 -export -name server-cert \
                   -in diagserverCA.pem -inkey diagserverCA.key \
                   -out serverkeystore.p12
    
  4. Converti il ​​keystore PKCS12 in un keystore JKS

    keytool -importkeystore -destkeystore server.keystore \
            -srckeystore serverkeystore.p12 -srcstoretype pkcs12 
            -alias server-cert
    
  5. Importa il certificato di un client nel truststore del server.

    keytool -import -alias client-cert \
            -file diagclientCA.pem -keystore server.truststore
    
  6. Importa il certificato di un server nel truststore del server.

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

Passaggi per creare chiave privata RSA, certificato autofirmato, keystore e truststore per un client

  1. Genera una chiave privata

    openssl genrsa -out diagclientCA.key 2048
    
  2. Crea un certificato x509

    openssl req -x509 -new -nodes -key diagclientCA.key \
                -sha256 -days 1024 -out diagclientCA.pem
    
  3. Creare il keystore PKCS12 dalla chiave privata e dal certificato pubblico.

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

    keytool -importkeystore -destkeystore client.keystore \
            -srckeystore clientkeystore.p12 -srcstoretype pkcs12 \
            -alias client-cert
    
  5. Importare il certificato di un server nel truststore del client.

    keytool -import -alias server-cert -file diagserverCA.pem \
            -keystore client.truststore
    
  6. Importare il certificato di un cliente nel truststore del cliente.

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

Risposte:


3

Il normale https richiede solo 1 comando;

keytool -genkeypair

Se il client non si fida ciecamente di alcun certificato, è necessario copiare il certificato pubblico del server sul client.

Perché stai usando openssl?

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


Fino a quando la mia modifica non sarà sottoposta a peer review: il flag è -genkeypair ed è possibile aggiungere molti flag diversi per personalizzare il certificato (ad esempio -validità 365 o -dname "cn = Mark Jones, ou = JavaSoft, o = Sun, c = US "). Meglio vedere il link nella risposta per maggiori dettagli.
Johannes Stadler,

1
@JohannesStadler Grazie ho approvato la tua modifica e aggiornato il link all'ultima versione di java, nota che "Questo comando è stato chiamato -genkey nelle versioni precedenti"
user1133275
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.