Назад | Перейти на главную страницу

Извлечь ключ из хранилища ключей JKS для использования с apache2 и tomcat

У меня есть хранилище ключей в формате 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.

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

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