it-roy-ru.com

Импорт пары закрытый ключ / открытый сертификат в хранилище ключей Java

Я использовал следующие шаги для создания нового хранилища ключей 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 и ​​импортировать сертификат с открытым ключом и секретным ключом без использования графического интерфейса пользователя?

72
kingston

С вашим закрытым ключом и открытым сертификатом вам нужно сначала создать хранилище ключей 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

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

169
gtrig

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

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

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

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

0
Santosh