Как создать хранилище ключей из существующего сертификата (abc.crt) и файлов abc.key?

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

Как создать хранилище ключей, импортировав как существующий сертификат (abc.crt), так и файлы abc.key?


person Ravi Jain    schedule 14.08.2012    source источник


Ответы (5)


Вероятно, проще всего создать файл PKCS#12 с помощью OpenSSL:

openssl pkcs12 -export -in abc.crt -inkey abc.key -out abc.p12

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

Если вам действительно нужно, вы можете преобразовать его в JKS, используя keytool -importkeystore (доступно в keytool из Java 6):

keytool -importkeystore -srckeystore abc.p12 \
        -srcstoretype PKCS12 \
        -destkeystore abc.jks \
        -deststoretype JKS
person Bruno    schedule 14.08.2012
comment
Спасибо, Бруно. Не могли бы вы сообщить мне, где я могу получить утилиту openssl? - person Ravi Jain; 14.08.2012
comment
Еще один вопрос: является ли сгенерированное хранилище ключей специфичным для платформы? Значит, будет ли работать, если я создам хранилище ключей в Windows и буду использовать его в Unix? - person Ravi Jain; 14.08.2012
comment
Сгенерированное хранилище ключей не зависит от платформы. OSX и большинство дистрибутивов Linux должны поставляться с OpenSSL (в противном случае просто установите пакет). Существуют также двоичные файлы для Windows (например, здесь, хотя вы, вероятно, можете найти и другие места тоже) - person Bruno; 14.08.2012
comment
Я также должен отметить, что в хранилище ключей PKCS12 пароль ключей совпадает с паролем хранилища (в то время как они могут отличаться для других типов хранилищ, особенно JKS). - person Bruno; 14.08.2012
comment
Откуда берется пароль, который должен использоваться в KeyStore.load()? Я не думаю, что он уже установлен в файле .key, который у меня есть, потому что openssl rsa -text может отображать что-то похожее на действительный закрытый ключ. - person hmakholm left over Monica; 15.08.2012
comment
@HenningMakholm, возможно, ваш файл закрытого ключа не защищен паролем, вам придется настроить его при создании файла PKCS # 12. - person Bruno; 15.08.2012
comment
Итак, предположим, у меня нет закрытого хранилища ключей, так или иначе, чтобы преобразовать из .crt в .jks? - person Jeryl Cook; 03.01.2017
comment
@Бруно Спасибо. У меня есть сертификат s pkcs #7. Должен ли я использовать pkcs12 или 7? - person Abel Jojo; 06.03.2018
comment
Примечание. Я думаю, что что-то изменилось в keytool Java 10. Он не создавал файл хранилища ключей Java. Изменил его на keytool Java 8, и он работал, как и ожидалось. - person dvlcube; 15.04.2019

Вы должны использовать OpenSSL и keytool.

OpenSSL для файла CER и PVK > P12

openssl pkcs12 -export -name servercert -in selfsignedcert.crt -inkey serverprivatekey.key -out myp12keystore.p12

Keytool для p12 > JKS

keytool -importkeystore -destkeystore mykeystore.jks -srckeystore myp12keystore.p12 -srcstoretype pkcs12 -alias servercert

person S.A.    schedule 13.02.2015
comment
где закрытый ключ? - person Sequoya; 29.12.2016
comment
вот чего я не понимаю!! - person Sequoya; 29.12.2016
comment
Чем это отличается от другого более раннего ответа ?? - person vikingsteve; 20.03.2017
comment
Спасибо. У меня есть сертификат s pkcs #7. Должен ли я использовать pkcs12 или 7? - person Abel Jojo; 06.03.2018
comment
Обратите внимание на параметры, которые мы передаем -name (для PKCS) -alias (для Jks). - person Vijayanand; 13.06.2019

Добавление к ответу @MK Yung и @Bruno. Введите пароль для целевого хранилища ключей. Я видел, как моя консоль зависала, когда я ввел команду без пароля.

openssl pkcs12 -export -in abc.crt -inkey abc.key -out abc.p12 -name localhost  -passout pass:changeit
person Swarna    schedule 29.04.2020

В дополнение к ответу @Bruno вам необходимо указать -name для псевдонима, иначе Tomcat выдаст ошибку Alias name tomcat does not identify a key entry

Пример команды: openssl pkcs12 -export -in localhost.crt -inkey localhost.key -out localhost.p12 -name localhost

person MK Yung    schedule 05.02.2019

Если хранилище ключей предназначено для tomcat, то после создания хранилища ключей с приведенными выше ответами вы должны добавить последний шаг для создания псевдонима «tomcat» для ключа:

keytool -changealias -alias "1" -destalias "tomcat" -keystore keystore-file.jks

Вы можете проверить результат с помощью:

keytool -list -keystore keystore-file.jks -v
person Theo    schedule 24.09.2019