Nginx ssl_client_certificate и ssl_verify_client: укажите клиентский сертификат или сертификат CA клиента?

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

Это для включения взаимной SSL в nginx.

У меня есть 3 файла для сертификата клиента: client.pem, client.ca.pem и client.bundle.pem. (bundle имеет клиента первым, ca вторым)

Какой из этих файлов я использую для настройки ssl_client_certificate? Я думал, что это будет bundle, но из документации неясно, какой файл следует использовать.

# https://mysite.example.com
ssl_verify_client on;
ssl_client_certificate /etc/ssl/client/client.bundle.pem;
ssl_protocols TLSv1.3;
ssl_verify_depth 2;
# проверьте результат проверки сертификата ssl клиента
add_header X-ssl_client_verify $ssl_client_verify always;
if ($ssl_client_verify != "SUCCESS") {
  return 403;
}

Потому что, когда я тестирую соединение, я всегда получаю 403. Заголовок проверки также X-ssl_client_verify:"NONE".

curl --cert client.pem --key client.key https://mysite.example.com

Я проверил с помощью оболочки bash, и сертификаты клиента правильно находятся в директории /etc/ssl/client на развернутом сайте.

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

Вопрос, связанный с настройкой взаимной аутентификации SSL (mutual SSL) в Nginx, требует четкого понимания использования клиентских сертификатов и корневых сертификатов (CA). В данном контексте вы указали, что у вас есть три файла: client.pem, client.ca.pem и client.bundle.pem (где bundle включает в себя оба сертификата, клиентский и корневой). Важно уточнить, какой из этих файлов использовать для настройки параметра ssl_client_certificate.

Основные параметры

  1. ssl_client_certificate: Этот параметр указывает Nginx, какой сертификат CA будет использоваться для проверки сертификатов клиентов. То есть, это должен быть файл, содержащий один или несколько корневых сертификатов, которым вы доверяете для аутентификации клиентов.

  2. ssl_verify_client: Этот параметр включает или отключает проверку сертификатов клиентов. Значение on активирует эту проверку.

Какой файл выбрать?

Из трех предоставленных вами файлов правильным выбором для параметра ssl_client_certificate будет файл client.ca.pem, потому что он должен содержать CA сертификаты, которым вы доверяете для проверки клиентских сертификатов. Файл bundle.pem может содержать как клиентский, так и CA сертификаты, но он часто используется для предоставления полного цепочки, и его не следует использовать в данном контексте.

Пример конфигурации Nginx

Ваш код с учетом вышеуказанных пояснений должен выглядеть следующим образом:

# https://mysite.example.com
ssl_verify_client on;
ssl_client_certificate /etc/ssl/client/client.ca.pem;
ssl_protocols TLSv1.3;
ssl_verify_depth 2;

# check the result of ssl client cert verify
add_header X-ssl_client_verify $ssl_client_verify always;
if ($ssl_client_verify != "SUCCESS") {
  return 403;
}

Причины получения 403

Если вы все еще получаете 403 ошибку и заголовок X-ssl_client_verify показывает "NONE", это, возможно, указывает на недостаток или неправильную настройку сертификатов. Убедитесь, что:

  • Сертификат клиента (client.pem) корректно подписан вашим CA с client.ca.pem.
  • Клиентский сертификат и ключ корректно указываются в команде curl:
    curl --cert /path/to/client.pem --key /path/to/client.key https://mysite.example.com
  • Все файлы находятся в правильных директориях и имеют корректные разрешения для чтения Nginx.
  • Директива ssl_verify_depth настроена правильно для вашего сценария (значение 2 позволяет один уровень сертификации между клиентским и корневым сертификатом).

Заключение

Правильное использование клиентских и CA сертификатов в Nginx критически важно для успешного развертывания SSL-соединений с взаимной аутентификацией. Убедитесь, что вы используете client.ca.pem в ssl_client_certificate, а также проверьте конфигурацию и целостность всех необходимых файлов. Будьте внимательны к деталям, так как любые расхождения в сертификатах могут привести к ошибкам в аутентификации.

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

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