Извлечь ключ из хранилища ключей JKS для использования с apache2 и tomcat
У меня есть хранилище ключей в формате JKS, и я хочу использовать это с apache2. Как я могу легко экспортировать ключ и сертификаты (которые я уже связал) из JKS? Я нашел много ответов там, но кажется, что ни у кого нет моей проблемы... (или ответ неполный)
Спасибо за ваше время.
3 ответа
JKS имеет сертификаты в DER, и для Apache вы хотите иметь формат PEM (AKA X509).
Пример того, как это сделать:
$JAVA_HOME/bin/keytool --list -keystore <mykeystore>
$JAVA_HOME/bin/keytool -export -rfc -alias <alias_name> -file <cert.crt> -keystore <mykeystore>
Таким образом, вы хотите экспортировать закрытый ключ, а затем сертификаты.
Затем экспортированный закрытый ключ отправляется в директиву SSLCertificateKeyFile в httpd.conf, и вы можете поместить связанные сертификаты в директиву SSLCertificateChainFile. Это в дополнение к директиве SSLCertificateFile.
Вы не можете получить закрытый ключ непосредственно из JKS, используя keytool; вместо этого вы должны сначала конвертировать в формат PKCS12, а затем использовать команду openssl. Я сделал эту работу:
Используйте keytool для преобразования хранилища ключей в pkcs12
keytool -importkeystore -srckeystore jks_filename.jks -destkeystore p12_filename.p12 -deststoretype PKCS12
Используйте openssl для экспорта сертификата в виде файла.pem:
openssl pkcs12 -in p12_filename.p12 -nokeys -clcerts -out cert_filename.pem
Используйте openssl для экспорта соответствующего закрытого ключа в виде файла.pem:
openssl pkcs12 -in p12_filename.p12 -nocerts -out key_filename.pem
Обновите ssl.conf в двух местах (SSLCertificateFile и SSLCertificateKeyFile), чтобы настроить порт 443 на использование этих файлов сертификатов и ключей.
Нет никакого способа "напрямую" экспортировать что-либо, кроме сертификата. Вам нужно будет пройти промежуточный этап в формате PKCS12.
keytool -importkeystore -srckeystore rec.jks -destkeystore rec.p12 -deststoretype PKCS12
Это запросит исходные и конечные парольные фразы. Если вам нужно автоматизировать это, используйте PW=somepass keytool -srcpass:env PW ...
или же keytool -srcstorepass:file filecontainingpass ...
и аналогично для -deststorepass
И оттуда вы можете использовать openssl для преобразования файла PKCS12 в стандартный PEM:
openssl pkcs12 -in rec.p12 -out rec.pem
Это также будет запрашивать пароли. использование -passin env:PW
или же -passin file:filename
а также -passout
варианты или -nodes
если вы не хотите, чтобы полученный ключ был зашифрован, но будьте осторожны с тем, куда вы пишете это.
Полученный файл будет содержать ваш ключ, сертификат и, возможно, полную цепочку сертификатов.