Импорт пары закрытый ключ / открытый сертификат в хранилище ключей 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 ответа:
С вашим закрытым ключом и открытым сертификатом вам нужно сначала создать хранилище ключей 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());
как только у вас есть хранилище ключей, импорт сертификата очень прост. Оформить заказ этой ссылке для примера код.