Импорт пары private-key / public-certificate в Java KeyStore

Я использовал следующие шаги для создания нового хранилища ключей Java с парой частного / открытого ключа, который будет использоваться сервером Java (внутренний) с TLS. Обратите внимание, что сертификат самоподписан:

1) Создать ключ с AES256

openssl genrsa -aes256 -out server.key 1024 

2) Генерировать запрос сертификата для CA

 openssl req -x509 -sha256 -new -key server.key -out server.csr 

3) Сгенерировать самостоятельно подписанное время истечения 10 лет

 openssl x509 -sha256 -days 3652 -in server.csr -signkey server.key -out selfsigned.crt 

4) Используйте программу, например KeyStoreExplorer, для импорта пары (закрытый ключ и самоподписанный сертификат) в новом JKS

Это работает, но я хотел бы реализовать последний шаг без использования графического интерфейса.

Я знаю, как импортировать только подписанный сертификат:

 // create the keystore and import the public key. THIS WILL NOT IMPORT THE PRIVATE KEY SO THE KEYSTORE CAN'T BE USED ON THE SERVER TO MAKE THE TLS CONNECTION /usr/java/jdk1.6.0_45/bin/keytool -import -alias myservercert -file server.crt -keystore mykeystore.jks 

Поэтому возникает вопрос: как я могу создать Java KeyStore и импортировать как сертификат с открытым ключом, так и закрытый ключ без использования графического интерфейса?

    С вашим личным ключом и общедоступным сертификатом сначала необходимо создать хранилище ключей PKCS12, а затем преобразовать его в JKS.

     # Create PKCS12 keystore from private key and public certificate. openssl pkcs12 -export -name myservercert -in selfsigned.crt -inkey server.key -out keystore.p12 # Convert PKCS12 keystore into a JKS keystore keytool -importkeystore -destkeystore mykeystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -alias myservercert 

    Чтобы проверить содержимое JKS, вы можете использовать следующую команду:

     keytool -list -v -keystore mykeystore.jks 

    Если это не был самозаверяющий сертификат, вы, вероятно, захотите следовать этому шагу, импортируя цепочку сертификатов, ведущую к доверенному сертификату CA.

    Для хранилища ключей требуется файл хранилища ключей. Для classа KeyStore требуется FileInputStream . Но если вы FileInputStream нуль (вместо экземпляра FileInputStream ), будет загружено пустое хранилище ключей . Создав хранилище ключей, вы можете проверить его целостность с помощью keytool .

    Следующий код создает пустое хранилище ключей с пустым паролем

      KeyStore ks2 = KeyStore.getInstance("jks"); ks2.load(null,"".toCharArray()); FileOutputStream out = new FileOutputStream("C:\\mykeytore.keystore"); ks2.store(out, "".toCharArray()); 

    Когда у вас есть хранилище ключей, импорт сертификата очень прост. Оформить эту ссылку для примера кода.

    Давайте будем гением компьютера.