Вопрос или проблема
Я пытаюсь отправить запрос поиска с веб-сервера на другой сервер через прокси nginx. У меня есть файл server_hostname.pem как сертификат сервера и файл ca-chain.cert.pem как клиентский сертификат. Однако я не вижу никаких результатов поиска с целевого сервера. Когда я выполняю команду curl для этого server:port, я вижу ошибку 400 Bad Request для ошибки SSL сертификата. Я предположил, что это определенно проблема с сертификатом. Затем я попытался посмотреть журнал ошибок для nginx. И я нашел ошибку 26:Unsupported certificate purpose. Чтобы проверить сертификат для целевого сервера с веб-сервера, я попробовал эту команду: openssl s_client -connect target_server:port -CAfile web_server.pem
И я вижу код возврата 21 (Невозможно проверить первый сертификат). Кто-нибудь знает, как устранить эту проблему? Заранее большое спасибо. Мое понимание SSL/TLS очень базовое. Так что, пожалуйста, дайте мне знать, если кому-то нужны дополнительные детали этой проблемы.
В сертификате есть три основных составляющие: закрытый ключ, публичный сертификат и цепочка сертификатов удостоверяющего центра (CA). В данном случае сертификат сервера является закрытым, вы должны публиковать публичный ключ в качестве клиентского ключа, а цепочка также должна быть доступна как серверу, так и клиенту – обычно для этого есть место в конфигурации, оно обычно называется цепочкой сертификатов CA или удостоверяющего центра. Причина, по которой вы получаете эту ошибку, заключается в том, что вы передаете цепочку CA в место, где ожидается клиентский сертификат/публичный ключ, а цель цепочки CA – не идентифицировать конкретный хост, а подтвердить полномочия, которые идентифицируют хост.
Ответ или решение
Ошибка аутентификации SSL: 26 unsupported certificate purpose, возникающая при работе с NGINX, может вызывать серьезные проблемы, если не обратиться к ее причинам и способам решения. Давайте более подробно рассмотрим, как устранить эту ошибку и обеспечить корректную работу вашего приложения.
Понимание проблемы
Ваша ситуация имеет несколько ключевых компонентов, которые необходимо учитывать:
-
Протокол SSL/TLS: это набор криптографических протоколов, который обеспечивает безопасную передачу данных. Сертификаты SSL используются для проверки подлинности серверов и клиентов.
-
Сертификаты: В вашем случае вы имеете дело с тремя основными компонентами:
- Сертификат сервера (
server_hostname.pem
), который должен быть установлен на сервере для обеспечения его идентификации. - Цепочка CA (
ca-chain.cert.pem
), которая подтверждает доверие к сертификату. - Клиентский сертификат, который вы, судя по всему, принимаете от CA для аутентификации клиента.
- Сертификат сервера (
-
Ошибка: Ошибка "26 unsupported certificate purpose" указывает, что сертификат, который вы используете для аутентификации клиента, не поддерживает назначение, необходимое для конкретного приложения. Это может быть связано с тем, что сертификат был сформирован с целью, отличной от требуемой.
Шаги для решения проблемы
-
Проверка сертификата клиента: Убедитесь, что ваш клиентский сертификат имеет правильное назначение. Для этого используйте команду:
openssl x509 -in client_certificate.pem -text -noout
В выводе данной команды найдите секцию
X509v3 Extended Key Usage
. Убедитесь, что в ней указаны необходимые назначения (например,clientAuth
). -
Правильная настройка конфигурации NGINX:
-
Проверьте, что в конфигурации NGINX указаны правильные файлы сертификатов и ключей. Пример конфигурации может быть таким:
server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/server_certificate.pem; ssl_certificate_key /path/to/server_key.pem; ssl_client_certificate /path/to/ca_chain.cert.pem; # CA сертификат для проверки клиента ssl_verify_client on; # Включить проверку клиента }
-
-
Проверка сертификатов CA: Убедитесь, что CA сертификат, используемый для проверки клиентского сертификата, доступен и правильно указан в конфигурации NGINX. Если цепочка сертификатов некорректна, это может привести к ошибке
Unable to verify the first certificate
. -
Тестирование с помощью openssl: Используйте команду
openssl s_client
для диагностики:openssl s_client -connect target_server:port -CAfile /path/to/ca_chain.cert.pem
Здесь вы можете наблюдать детали соединения и выявлять проблемы с сертификатами.
Заключение
Устранение ошибки "26 unsupported certificate purpose" требует тщательной проверки всех элементов сертификатов и настройки конфигурации сервера. Убедитесь, что все файлы сертификатов правильно указаны и имеют необходимые назначение для успешной аутентификации клиента. Неправильные настройки могут мешать взаимодействию между вашим веб-сервером и целевым сервером, поэтому следуйте предложенным шагам для диагностики и решения проблемы.