Jak utworzyć magazyn kluczy i magazyn zaufanych certyfikatów przy użyciu samopodpisanego certyfikatu?


17

Serwer i klient JAVA komunikują się przez sieć za pomocą protokołu SSL. Serwer i klient wzajemnie się uwierzytelniają za pomocą certyfikatów. Typ magazynu kluczy używany przez serwer i klienta to JKS. Serwer i klient ładują swoje pliki kluczy i pliki zaufanych certyfikatów. Nazwy plików magazynu kluczy i zaufanych certyfikatów to: server.keystore, server.truststore, client.keystore i client.truststore. Używam certyfikatów z podpisem własnym wyłącznie do testów.

Pytania:

Pytanie 1 Chciałbym wiedzieć, dlaczego muszę dodać własne certyfikaty serwera i klienta do odpowiednich magazynów zaufania w kroku 6.

Q2 Czy mogę zmniejszyć liczbę kroków, aby osiągnąć to samo? Jeśli tak, to jak?

Kroki tworzenia klucza RSA, certyfikatów z podpisem własnym, magazynu kluczy i magazynu zaufanych certyfikatów dla serwera

  1. Wygeneruj prywatny klucz RSA

    openssl genrsa -out diagserverCA.key 2048
    
  2. Utwórz certyfikat x509

    openssl req -x509 -new -nodes -key diagserverCA.key \
                -sha256 -days 1024 -out diagserverCA.pem
    
  3. Utwórz magazyn kluczy PKCS12 z klucza prywatnego i certyfikatu publicznego.

    openssl pkcs12 -export -name server-cert \
                   -in diagserverCA.pem -inkey diagserverCA.key \
                   -out serverkeystore.p12
    
  4. Konwertuj magazyn kluczy PKCS12 na magazyn kluczy JKS

    keytool -importkeystore -destkeystore server.keystore \
            -srckeystore serverkeystore.p12 -srcstoretype pkcs12 
            -alias server-cert
    
  5. Zaimportuj certyfikat klienta do magazynu zaufania serwera.

    keytool -import -alias client-cert \
            -file diagclientCA.pem -keystore server.truststore
    
  6. Zaimportuj certyfikat serwera do magazynu zaufania serwera.

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

Kroki tworzenia klucza prywatnego RSA, certyfikatu z podpisem własnym, magazynu kluczy i magazynu zaufanych certyfikatów dla klienta

  1. Wygeneruj klucz prywatny

    openssl genrsa -out diagclientCA.key 2048
    
  2. Utwórz certyfikat x509

    openssl req -x509 -new -nodes -key diagclientCA.key \
                -sha256 -days 1024 -out diagclientCA.pem
    
  3. Utwórz magazyn kluczy PKCS12 z klucza prywatnego i certyfikatu publicznego.

    openssl pkcs12 -export -name client-cert \
                   -in diagclientCA.pem -inkey diagclientCA.key \
                   -out clientkeystore.p12
    
  4. Przekształć magazyn kluczy PKCS12 w magazyn kluczy JKS

    keytool -importkeystore -destkeystore client.keystore \
            -srckeystore clientkeystore.p12 -srcstoretype pkcs12 \
            -alias client-cert
    
  5. Zaimportuj certyfikat serwera do magazynu zaufania klienta.

    keytool -import -alias server-cert -file diagserverCA.pem \
            -keystore client.truststore
    
  6. Zaimportuj certyfikat klienta do magazynu zaufania klienta.

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

Odpowiedzi:


3

Normalne https wymaga tylko 1 polecenia;

keytool -genkeypair

Jeśli klient nie ufa ślepo żadnemu certyfikatowi, musisz skopiować publiczny certyfikat serwera na klienta.

Dlaczego w ogóle używasz openssl?

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


Dopóki moja edycja nie zostanie sprawdzona przez recenzenta: Flaga ma wartość -genkeypair i można dodać wiele różnych flag w celu dostosowania certyfikatu (np. -Validity 365 lub -dname "cn = Mark Jones, ou = JavaSoft, o = Sun, c = US „). Najlepiej zobacz link w odpowiedzi, aby uzyskać więcej informacji.
Johannes Stadler

1
@JohannesStadler Dziękuję Zatwierdziłem twoją edycję i zaktualizowałem link do najnowszej wersji java, zauważ, że „To polecenie w poprzednich wydaniach nosiło nazwę -genkey”
user1133275
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.