WildFly отправляет закрытый ключ вместо сертификата

Вопрос или проблема

Я пытаюсь настроить сервер WildFly, работающий в Docker, для использования SSL:

  • создал закрытый ключ: keytool -genkey -alias axcelpk -keyalg RSA -keystore server.keystore -keysize 2048 -validity 1825
  • создал CSR: keytool -certreq -alias axcelPK -keystore server.keystore -file axcel.csr
  • конвертировал p7b в cer: openssl pkcs7 -print_certs -inform der -in axcel-B64-chain.p7b -out axcel-B64-chain.cer
  • добавил сертификат в хранилище ключей: keytool -import -alias axcelCert -trustcacerts -file axcel-B64-chain.cer -keystore server.keystore

Конфигурация WildFly в standalone.xml уже была выполнена, поэтому я не трогал это (проверил и об этом все в порядке).

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

Есть идеи?

Короче: это не закрытый ключ, это самоподписанный сертификат

Хотя вы этого не говорите (или не показываете), я предполагаю, что вы выполнили keytool -list в вашем хранилище ключей и увидели две записи: одну privateKeyEntry и одну trustedCertEntry, каждая с отпечатком. Отпечаток на privateKeyEntry НЕ является отпечатком закрытого ключа; это отпечаток (первого) сертификата, хранящегося в privateKeyEntry. В вашем случае это фиктивный самоподписанный сертификат, который был сгенерирован как часть операции -genkey, поскольку вы не заменили его впоследствии, как должны были. Такой самоподписанный сертификат всегда имеет Издателя, равного Субъекту (и не установленного на реальный ЦА, как делает реальный сертификат ЦА).

Сервер Java SSL/TLS использует сертификаты в privateKeyEntry, и любой клиент, который получает этот сертификат, должен (1) не доверять ему и отображать ошибку или предупреждение, указывающее на то, что он не доверяет, и (2) показывать его как свой собственный путь сертификации без родителей (т.е. одну запись, не пустую). Невозможно для SSL/TLS сервера отправить закрытый ключ; протокол этого не позволяет, потому что это было бы совершенно небезопасно и глупо.

На четвертом этапе используйте keytool -import для цепочки сертификатов, предоставленной ЦА, к тому же алиасу, который вы использовали для операции -genkey, здесь axcelpk, а не другой алиас. Обратите внимание, что на самом деле вам не нужен ваш третий шаг; при импорте ответа ЦА (т.е. вашей собственной цепочки сертификатов) в запись privatekey, keytool (и более широко CertificateFactory) может читать p7b, как в PEM, так и в DER, напрямую. Хотя если вы хотите получить либо последовательность сертификатов PEM, поддерживаемую OpenSSL, либо последовательность сертификатов DER, которая не поддерживается, они тоже будут работать.

Мне было интересно, могли бы вы воспроизвести шаги, которые должны были быть предприняты по порядку, и показать их здесь. Я новичок в этом, и такой уровень детализации, хотя и хорошо описан в вашем ответе, для меня немного расплывчат, поскольку я новичок в среде Wildfly и JAVA Keystore в целом.

Спасибо за ваш ответ.

Роб

Ответ или решение

Подробное руководство по настройке SSL на сервере WildFly

Введение

Настройка SSL на сервере WildFly может быть сложной задачей, особенно если вы новичок в работе с Java Keystore и сертификатами. В данном руководстве мы пройдём через все необходимые шаги для корректной настройки SSL, чтобы избежать проблемы с отправкой неверного сертификата, такой как отправка самоподписанного сертификата вместо правильного, выданного удостоверяющим центром.

Шаг 1: Генерация ключа и самоподписанного сертификата

Вы начали процесс правильно, создав хранилище ключей и самоподписанный сертификат с помощью следующей команды:

keytool -genkey -alias axcelpk -keyalg RSA -keystore server.keystore -keysize 2048 -validity 1825

Эта команда генерирует и сохраняет как приватный ключ, так и самоподписанный сертификат в файле server.keystore.

Шаг 2: Создание CSR (Запроса на сертификат)

Далее вы создали запрос на сертификат (CSR), который необходимо будет отправить удостоверяющему центру для получения публичного сертификата:

keytool -certreq -alias axcelpk -keystore server.keystore -file axcel.csr

Это правильный шаг, и на данном этапе у вас должен быть CSR файл (axcel.csr).

Шаг 3: Получение сертификата от CA

После отправки CSR в удостоверяющий центр, вы должны получить сертификат или цепочку сертификатов. Мы будем использовать OpenSSL для конвертации полученного сертификата в подходящий формат. Например, если вы получили сертификат в формате PKCS#7 (.p7b), то команды для извлечения сертификатов могут выглядеть следующим образом:

openssl pkcs7 -print_certs -inform DER -in axcel-B64-chain.p7b -out axcel-B64-chain.cer

Вы получите файл axcel-B64-chain.cer, содержащий сертификаты CA.

Шаг 4: Импортирование цепочки сертификатов в хранилище

Теперь, вместо того чтобы использовать другой алиас, как вы делали ранее, вам следует импортировать полученный сертификат напрямую в тот же алиас, который использовался для генерации самоподписанного сертификата:

keytool -import -alias axcelpk -trustcacerts -file axcel-B64-chain.cer -keystore server.keystore

Этот шаг заменит самоподписанный сертификат на тот, что вы получили от CA, и обеспечит корректное создание цепочки сертификатов.

Шаг 5: Проверка содержимого хранилища

Теперь вы можете проверить содержимое вашего хранилища, чтобы удостовериться, что цепочка сертификатов была установлена корректно:

keytool -list -v -keystore server.keystore

Убедитесь, что у вас есть запись privateKeyEntry с правильным сертификатом, а также цепочка сертификатов, показывающая связи с CA.

Шаг 6: Настройка WildFly

На этом этапе убедитесь, что конфигурация вашего standalone.xml для HTTPS настроена правильно, с указанием корректного хранилища и алиаса. WildFly должен быть перезапущен после внесения всех изменений.

Заключение

Следуя этим шагам, вы сможете правильно настроить SSL на вашем сервере WildFly и избежать проблем с неправильной отправкой сертификатов. Убедитесь, что вы всегда используете правильные алиасы и импортируете сертификаты в нужные места. Это гарантирует, что ваш сервер будет работать безопасно и корректно. Если возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...