Wie erstelle ich einen Keystore und Truststore mit einem selbstsignierten Zertifikat?

17

Wir haben JAVA Server und Client über ein Netzwerk mit SSL kommunizieren. Der Server und der Client authentifizieren sich gegenseitig mithilfe von Zertifikaten. Der vom Server und Client verwendete Keystore-Typ ist JKS. Der Server und der Client laden ihre Keystore- und Truststore-Dateien. Die Namen der Keystore- und Truststore-Dateien lauten: server.keystore, server.truststore, client.keystore und client.truststore. Ich verwende selbstsignierte Zertifikate nur zum Testen.

Fragen:

Q1. Ich möchte wissen, warum ich Server- und Client-eigene Zertifikate in den jeweiligen Truststores in Schritt 6 hinzufügen muss.

Q2. Kann ich die Anzahl der Schritte verringern, um dasselbe zu erreichen? Wenn ja, wie?

Schritte zum Erstellen eines RSA-Schlüssels, selbstsignierter Zertifikate, eines Keystores und eines Truststores für einen Server

  1. Generieren Sie einen privaten RSA-Schlüssel

    openssl genrsa -out diagserverCA.key 2048
    
  2. Erstellen Sie ein x509-Zertifikat

    openssl req -x509 -new -nodes -key diagserverCA.key \
                -sha256 -days 1024 -out diagserverCA.pem
    
  3. Erstellen Sie einen PKCS12-Keystore aus privatem Schlüssel und öffentlichem Zertifikat.

    openssl pkcs12 -export -name server-cert \
                   -in diagserverCA.pem -inkey diagserverCA.key \
                   -out serverkeystore.p12
    
  4. Konvertieren Sie den PKCS12-Keystore in einen JKS-Keystore

    keytool -importkeystore -destkeystore server.keystore \
            -srckeystore serverkeystore.p12 -srcstoretype pkcs12 
            -alias server-cert
    
  5. Importieren Sie das Zertifikat eines Clients in den Trust Store des Servers.

    keytool -import -alias client-cert \
            -file diagclientCA.pem -keystore server.truststore
    
  6. Importieren Sie das Zertifikat eines Servers in den Trust Store des Servers.

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

Schritte zum Erstellen eines privaten RSA-Schlüssels, eines selbstsignierten Zertifikats, eines Keystores und eines Truststores für einen Client

  1. Generieren Sie einen privaten Schlüssel

    openssl genrsa -out diagclientCA.key 2048
    
  2. Erstellen Sie ein x509-Zertifikat

    openssl req -x509 -new -nodes -key diagclientCA.key \
                -sha256 -days 1024 -out diagclientCA.pem
    
  3. Erstellen Sie einen PKCS12-Keystore aus einem privaten Schlüssel und einem öffentlichen Zertifikat.

    openssl pkcs12 -export -name client-cert \
                   -in diagclientCA.pem -inkey diagclientCA.key \
                   -out clientkeystore.p12
    
  4. Konvertieren Sie einen PKCS12-Keystore in einen JKS-Keystore

    keytool -importkeystore -destkeystore client.keystore \
            -srckeystore clientkeystore.p12 -srcstoretype pkcs12 \
            -alias client-cert
    
  5. Importieren Sie das Zertifikat eines Servers in den Trust Store des Clients.

    keytool -import -alias server-cert -file diagserverCA.pem \
            -keystore client.truststore
    
  6. Importieren Sie das Zertifikat eines Clients in den Trust Store des Clients.

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

Antworten:

3

Normales https erfordert nur 1 Befehl.

keytool -genkeypair

Wenn der Client keinem Zertifikat blind vertraut, müssen Sie das öffentliche Zertifikat Ihres Servers auf den Client kopieren.

Warum benutzt du überhaupt openssl?

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

user1133275
quelle
Bis meine Bearbeitung einer Peer-Review unterzogen wird: Das Flag lautet -genkeypair und Sie können viele verschiedene Flags hinzufügen, um das Zertifikat anzupassen (z. B. -validity 365 oder -dname "cn = Mark Jones, ou = JavaSoft, o = Sun, c = US "). Am besten sehen Sie den Link in der Antwort für weitere Details.
Johannes Stadler
1
@JohannesStadler Danke. Ich habe Ihre Bearbeitung genehmigt und den Link auf die neueste Java-Version aktualisiert. Beachten Sie, dass "dieser Befehl in früheren Versionen
-genkey hieß