У меня есть хранилище ключей в формате JKS, и я хочу использовать его с apache2. Как я могу легко экспортировать ключ и сертификаты (которые я уже привязал) из JKS? Я нашел много ответов, но кажется, что ни у кого нет моей проблемы ... (или ответ частичный)
Спасибо за уделенное время.
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
если вы не хотите, чтобы полученный ключ был зашифрован, но будьте осторожны с тем, куда вы это пишете.
Полученный файл будет содержать ваш ключ, сертификат и, возможно, полную цепочку сертификатов.