Comment créer un keystore et un truststore à l'aide d'un certificat auto-signé?

17

Nous avons un serveur et un client JAVA qui communiquent sur un réseau en utilisant SSL. Le serveur et le client s'authentifient mutuellement à l'aide de certificats. Le type de fichier de clés utilisé par le serveur et le client est JKS. Le serveur et le client chargent leurs fichiers de clés et de fichiers de clés certifiées. Les noms de fichier du magasin de clés et du magasin de clés de confiance sont: server.keystore, server.truststore, client.keystore et client.truststore. J'utilise des certificats auto-signés uniquement pour les tests.

Des questions:

Q1. Je voudrais savoir pourquoi je dois ajouter les propres certificats du serveur et du client dans leurs magasins de confiance respectifs, à l'étape 6.

Q2. Puis-je réduire le nombre d'étapes pour obtenir la même chose? Si oui, alors comment?

Étapes pour créer une clé RSA, des certificats auto-signés, un magasin de clés et un magasin de clés de confiance pour un serveur

  1. Générer une clé RSA privée

    openssl genrsa -out diagserverCA.key 2048
    
  2. Créer un certificat x509

    openssl req -x509 -new -nodes -key diagserverCA.key \
                -sha256 -days 1024 -out diagserverCA.pem
    
  3. Créez un fichier de clés PKCS12 à partir d'une clé privée et d'un certificat public.

    openssl pkcs12 -export -name server-cert \
                   -in diagserverCA.pem -inkey diagserverCA.key \
                   -out serverkeystore.p12
    
  4. Convertir le fichier de clés PKCS12 en fichier de clés JKS

    keytool -importkeystore -destkeystore server.keystore \
            -srckeystore serverkeystore.p12 -srcstoretype pkcs12 
            -alias server-cert
    
  5. Importez un certificat client dans le magasin de clés de confiance du serveur.

    keytool -import -alias client-cert \
            -file diagclientCA.pem -keystore server.truststore
    
  6. Importez un certificat de serveur dans le magasin de clés de confiance du serveur.

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

Étapes pour créer une clé privée RSA, un certificat auto-signé, un magasin de clés et un magasin de clés de confiance pour un client

  1. Générer une clé privée

    openssl genrsa -out diagclientCA.key 2048
    
  2. Créer un certificat x509

    openssl req -x509 -new -nodes -key diagclientCA.key \
                -sha256 -days 1024 -out diagclientCA.pem
    
  3. Créez le magasin de clés PKCS12 à partir de la clé privée et du certificat public.

    openssl pkcs12 -export -name client-cert \
                   -in diagclientCA.pem -inkey diagclientCA.key \
                   -out clientkeystore.p12
    
  4. Conversion d'un fichier de clés PKCS12 en fichier de clés JKS

    keytool -importkeystore -destkeystore client.keystore \
            -srckeystore clientkeystore.p12 -srcstoretype pkcs12 \
            -alias client-cert
    
  5. Importez un certificat de serveur dans le magasin de clés de confiance du client.

    keytool -import -alias server-cert -file diagserverCA.pem \
            -keystore client.truststore
    
  6. Importez un certificat client dans le magasin de clés de confiance du client.

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

Réponses:

3

Le https normal ne nécessite qu'une seule commande;

keytool -genkeypair

Si le client ne fait pas confiance aveuglément à un certificat, vous devez copier votre certificat public de serveur sur le client.

Pourquoi utilisez-vous openssl?

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

user1133275
la source
Jusqu'à ce que ma modification soit examinée par les pairs: le drapeau est -genkeypair et vous pouvez ajouter de nombreux drapeaux différents pour personnaliser le certificat (par exemple, -validité 365 ou -dname "cn = Mark Jones, ou = JavaSoft, o = Sun, c = US "). Mieux voir le lien dans la réponse pour plus de détails.
Johannes Stadler
1
@JohannesStadler Merci d'avoir approuvé votre modification et mis à jour le lien vers la dernière version java, notez que "Cette commande a été nommée -genkey dans les versions précédentes"
user1133275