В связи с обновлением некоторых сертификатов мне пришлось преобразовать хранилище ключей jks в хранилище ключей PKCS # 12 и включить закрытый ключ во время преобразования.Мы получили хранилище ключей как хранилище ключей JKS, однако наши веб-серверы используют хранилища ключей PKCS # 12, а полученные нами хранилища ключей содержали только сертификаты, а не закрытый ключ.
Я попытался погуглить и просмотреть несколько записей в SO, и я только нашел решение, которое больше похоже на обходной путь, чем на хороший подход, поэтому мне было интересно, есть ли у кого-то лучшеПодход к тому, как внедрить закрытые ключи и преобразовать из хранилища ключей jks в хранилище ключей PKCS # 12 более простым способом.
Кажется, что хранилищами ключей JKS можно манипулировать только с помощью keytool, однако утилита keytool не поддерживает инъекциюзакрытых ключей в AFDIK доверенного сервера, так что я использовал следующий подход:
при условии, что у меня есть закрытый ключ в виде файла pem.
- извлек все сертификаты из хранилища ключей jks с помощьюKeytool.
- создал хранилище ключей PKCS # 12, используя openssl
- , переименуйте псевдоним в созданном PKCS12, используя keytool
- , создайте другое хранилище ключей PKCS # 12, используя openssl
- , объедините два хранилища ключей в один, используя keytool
- , импортируя сертификаты без закрытых ключей
Таквесь процесс выглядит следующим образом (в случае, если это также необходимо):
openssl pkcs12 -in orig.alias.p12 -nodes -nocerts -out key.pem -passin pass:PASSWORD
keytool -keystore keystore1 -storepass PASSWORD -list
keytool -keystore keystore1 -storepass PASSWORD -rfc -file alias.root.pem -alias "root" -exportcert
keytool -keystore keystore1 -storepass PASSWORD -rfc -file alias.ca3.pem -alias "ca3" -exportcert
keytool -keystore keystore1 -storepass PASSWORD -rfc -file alias.long.pem -alias "long" -exportcert
keytool -keystore keystore1 -storepass PASSWORD -rfc -file alias.short.pem -alias "short" -exportcert
openssl pkcs12 -export -out keystore.p12 -inkey key.pem -in alias.short.pem -passout pass:PASSWORD
keytool -changealias -alias "1" -destalias "short" -keypass PASSWORD -keystore keystore.p12 -storepass PASSWORD
openssl pkcs12 -export -out keystore2.p12 -inkey key.pem -in alias.long.pem -passout pass:PASSWORD
keytool -changealias -alias "1" -destalias "long" -keypass PASSWORD -keystore keystore2.p12 -storepass PASSWORD
keytool -importkeystore -srckeystore keystore2.p12 -srcstoretype pkcs12 -srcstorepass PASSWORD -destkeystore keystore.p12 -deststoretype pkcs12 -deststorepass PASSWORD
keytool -keystore keystore.p12 -storepass PASSWORD -file alias.ca3.pem -alias "ca3" -importcert -noprompt
keytool -keystore keystore.p12 -storepass PASSWORD -file alias.root.pem -alias "root" -importcert -noprompt
keytool -keystore keystore.p12 -storepass PASSWORD -list
Я представлял себе, например, если бы я мог установить псевдоним при импорте сертификата с закрытым ключом, тогда мне не нужно было бы впоследствии переименовывать псевдоним.Это возможно?
В любом случае, заранее спасибо