Вопрос или проблема
У меня есть только файл mycert.jks. Теперь мне нужно извлечь и сгенерировать файлы .key и .crt и использовать их в сервере Apache httpd.
SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.key
Можете ли вы перечислить все шаги, чтобы это сделать? Я искал, но нет конкретного примера для понимания, шаги перепутаны.
Пожалуйста, подскажите!
[ИЗМЕНЕНИЕ] Получаю ошибку после выполнения шагов из ниже приведенного ответа.
[8/21/2015 9:07 PM] Сохан Бафна:
[Пн, 21 августа 2015 15:32:03.008511 2015] [ssl:emerg] [pid 14:tid 140151694997376] AH02562: Не удалось сконфигурировать сертификат 0.0.0.0:4545:0 (с цепочкой), проверьте /home/certs/smp_cert_key_store.crt
[Пн, 21 августа 2015 15:32:03.008913 2015] [ssl:emerg] [pid 14:tid 140151694997376] Ошибка библиотеки SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line (Ожидание: ДОВЕРЕННЫЙ СЕРТИФИКАТ) -- Плохое содержимое файла или формат - или даже просто забытый SSLCertificateKeyFile?
[Пн, 21 августа 2015 15:32:03.008959 2015] [ssl:emerg] [pid 14:tid 140151694997376] Ошибка библиотеки SSL: error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib
.jks – это хранилище ключей, что является объектом Java
используйте keytool из Java.
экспортируйте .crt:
keytool -export -alias mydomain -file mydomain.der -keystore mycert.jks
конвертируйте сертификат в PEM:
openssl x509 -inform der -in mydomain.der -out certificate.pem
экспортируйте ключ:
keytool -importkeystore -srckeystore mycert.jks -destkeystore keystore.p12 -deststoretype PKCS12
конвертируйте ключ PKCS12 в нешифрованный PEM:
openssl pkcs12 -in keystore.p12 -nodes -nocerts -out mydomain.key
благодарности:
- https://security.stackexchange.com/questions/3779/how-can-i-export-my-private-key-from-a-java-keytool-keystore
- https://stackoverflow.com/questions/2640691/how-to-export-private-key-from-a-keystore-of-self-signed-certificate
- https://www.sslshopper.com/article-most-common-java-keytool-keystore-commands.html
Вот что я делаю,
Сначала экспортируйте ключ:
keytool -importkeystore -srckeystore mycert.jks -destkeystore keystore.p12 -deststoretype PKCS12
Для файла сертификата SSL Apache вам нужен только сертификат:
openssl pkcs12 -in keystore.p12 -nokeys -out my_key_store.crt
Для файла ключа SSL вам нужны только ключи:
openssl pkcs12 -in keystore.p12 -nocerts -nodes -out my_store.key
Ответ найден здесь:
перейдите по URL в браузере, который использует jks с красной линией, и слева будет значок замка
нажав на часть с предупреждением о безопасности, откроется информационный диалог
щелкните по сертификату (неверный), и когда он откроется, нажмите на детали
нажмите на «Копировать в файл…» и следуйте инструкциям
В конце у вас есть файл хранилища в формате crt
Сгенерировать p12 из JKS
/opt/apps/java/java/bin/keytool -importkeystore -srckeystore certname.jks -destkeystore certname.jks password -srcalias cert -srcstoretype certname.jks deststoretype pkcs12
Сгенерировать pem из p12
openssl pkcs12 -in cert.p12 -out cert.pem
Сгенерировать cert из pem
openssl x509 -inform der -in cert.pem -out cert.crt
Сгенерировать ключ из pem
openssl der -in cert.pem -out cert.key
введите пароль для cert.pem
Ответ или решение
Для извлечения файлов .key
и .crt
из хранилища JKS
(Java KeyStore) и их использования в сервере Apache HTTPD, выполните следующие шаги.
Шаг 1: Экспортируйте сертификат из .jks
в формат .p12
Для начала вам нужно экспортировать сертификат из файла mycert.jks
. Вы можете использовать команду keytool
для этого:
keytool -importkeystore -srckeystore mycert.jks -destkeystore keystore.p12 -deststoretype PKCS12
При выполнении этой команды вам нужно будет ввести пароль от вашего файла .jks
.
Шаг 2: Извлеките сертификат (.crt) и закрытый ключ (.key)
После того как вы создадите файл keystore.p12
, вы сможете извлечь сертификат и закрытый ключ с помощью OpenSSL. Выполните следующие команды:
-
Извлечение сертификата (.crt):
openssl pkcs12 -in keystore.p12 -nokeys -out server.crt
-
Извлечение закрытого ключа (.key):
openssl pkcs12 -in keystore.p12 -nocerts -nodes -out server.key
Шаг 3: Настройка Apache HTTPD
После извлечения файлов server.crt
и server.key
вам нужно настроить ваш сервер Apache для использования этих сертификатов. Откройте конфигурационный файл Apache (обычно httpd.conf
или ssl.conf
в каталоге конфигурации Apache) и добавьте следующие строки:
SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.key
Убедитесь, что пути к файлам .crt
и .key
указаны корректно.
Шаг 4: Перезапустите сервер Apache
После изменения конфигурации вам необходимо перезапустить сервер Apache, чтобы изменения вступили в силу:
sudo systemctl restart apache2
или
sudo service apache2 restart
Возможные ошибки и их устранение
Если вы столкнулись с ошибками, связанными с форматом файла или недоступностью закрытого ключа, убедитесь в следующем:
- Файлы
.crt
и.key
корректно извлечены и находятся по указанным путям. - Файл
.crt
содержит строку-----BEGIN CERTIFICATE-----
и-----END CERTIFICATE-----
. - Файл
.key
содержит строку-----BEGIN PRIVATE KEY-----
и-----END PRIVATE KEY-----
.
Если ошибки продолжают возникать, проверьте права доступа к файлам сертификатов и уровню доступа пользователя, под которым работает Apache.
Следуя этим шагам, вы сможете успешно извлечь сертификаты из файла JKS
и настроить их для использования на вашем сервере Apache HTTPD.