Извлечь ключ из хранилища ключей 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.

См. http://httpd.apache.org/docs/2.2/mod/mod_ssl.html

Вы не можете получить закрытый ключ непосредственно из JKS, используя keytool; вместо этого вы должны сначала конвертировать в формат PKCS12, а затем использовать команду openssl. Я сделал эту работу:

  1. Используйте keytool для преобразования хранилища ключей в pkcs12

    keytool -importkeystore -srckeystore jks_filename.jks -destkeystore p12_filename.p12 -deststoretype PKCS12

  2. Используйте openssl для экспорта сертификата в виде файла.pem:

    openssl pkcs12 -in p12_filename.p12 -nokeys -clcerts -out cert_filename.pem

  3. Используйте openssl для экспорта соответствующего закрытого ключа в виде файла.pem:

    openssl pkcs12 -in p12_filename.p12 -nocerts -out key_filename.pem

  4. Обновите 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 если вы не хотите, чтобы полученный ключ был зашифрован, но будьте осторожны с тем, куда вы пишете это.

Полученный файл будет содержать ваш ключ, сертификат и, возможно, полную цепочку сертификатов.

Другие вопросы по тегам