Як створити сховище ключів і довірений магазин за допомогою самопідписаного сертифіката?


17

У нас сервер JAVA та клієнт спілкуються по мережі за допомогою SSL. Сервер і клієнт взаємно ідентифікують один одного за допомогою сертифікатів. Тип зберігання ключів, який використовується сервером та клієнтом, - це JKS. Сервер і клієнт завантажують свої файли сховищ і довіри. Імена файлів сховища ключів та довіри - це: server.keystore, server.truststore, client.keystore та client.truststore. Я використовую самопідписані сертифікати лише для тестування.

Запитання:

Q1. Мені хотілося б знати, чому мені потрібно додати власні сертифікати сервера та клієнта у відповідні довірені сховища, на кроці 6.

Q2. Чи можна зменшити число кроків, щоб досягти того самого? Якщо так, то як?

Кроки для створення ключа RSA, авторизованих сертифікатів, зберігання ключів та довіри для сервера

  1. Створіть приватний ключ RSA

    openssl genrsa -out diagserverCA.key 2048
    
  2. Створіть сертифікат x509

    openssl req -x509 -new -nodes -key diagserverCA.key \
                -sha256 -days 1024 -out diagserverCA.pem
    
  3. Створіть сховище ключів PKCS12 з приватного ключа та відкритого сертифіката.

    openssl pkcs12 -export -name server-cert \
                   -in diagserverCA.pem -inkey diagserverCA.key \
                   -out serverkeystore.p12
    
  4. Перетворіть сховище ключів PKCS12 у сховище ключів JKS

    keytool -importkeystore -destkeystore server.keystore \
            -srckeystore serverkeystore.p12 -srcstoretype pkcs12 
            -alias server-cert
    
  5. Імпортуйте сертифікат клієнта в сховище сервера.

    keytool -import -alias client-cert \
            -file diagclientCA.pem -keystore server.truststore
    
  6. Імпортуйте сертифікат сервера в магазин довіри сервера.

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

Кроки по створенню приватного ключа RSA, сертифіката, що підписується самостійно, зберігання ключів та довіреного магазину для клієнта

  1. Створіть приватний ключ

    openssl genrsa -out diagclientCA.key 2048
    
  2. Створіть сертифікат x509

    openssl req -x509 -new -nodes -key diagclientCA.key \
                -sha256 -days 1024 -out diagclientCA.pem
    
  3. Створіть сховище ключів PKCS12 з приватного ключа та відкритого сертифіката.

    openssl pkcs12 -export -name client-cert \
                   -in diagclientCA.pem -inkey diagclientCA.key \
                   -out clientkeystore.p12
    
  4. Перетворіть сховище ключів PKCS12 у сховище ключів JKS

    keytool -importkeystore -destkeystore client.keystore \
            -srckeystore clientkeystore.p12 -srcstoretype pkcs12 \
            -alias client-cert
    
  5. Імпортуйте сертифікат сервера в магазин довіри клієнта.

    keytool -import -alias server-cert -file diagserverCA.pem \
            -keystore client.truststore
    
  6. Імпортуйте сертифікат клієнта в магазин довіри клієнта.

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

Відповіді:


3

Для звичайного https потрібна лише 1 команда;

keytool -genkeypair

Якщо клієнт не довіряє жодному серту, тоді вам потрібно скопіювати ваш сервер-відкритий сервер на клієнта.

Чому ви взагалі використовуєте openssl?

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


Поки моя редакція не буде перевірена: Прапор - -genkeypair, і ви можете додати безліч різних прапорів, щоб налаштувати сертифікат (наприклад, -validity 365 або -dname "cn = Mark Jones, ou = JavaSoft, o = Sun, c = US "). Найкраще дивіться посилання у відповіді для отримання більш детальної інформації.
Йоганнес Стадлер

1
@JohannesStadler Дякую Я схвалив ваше редагування та оновив посилання на останню версію Java, зауважте, що "Ця команда була названа -genkey в попередніх випусках"
користувач1133275
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.