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


этот вопрос уже есть ответ здесь:

  • Как импортировать существующий сертификат x509 и закрытый ключ в хранилище ключей Java для использования в SSL? 10 ответов

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

2 70

2 ответа:

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

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

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

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

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