Рейтинг:0

Отклонение соединений на основе шаблона в nginx

флаг vn

в nginx.conf я добавил предложение if для фильтрации ssl-соединений на основе cn.

Например

карта $ssl_client_s_dn $ssl_client_s_dn_cn {
    По умолчанию "";
    ~/CN=(?<CN>[^/]+) $CN;
}

сервер {
    слушать 80 default_server;
    server_name nginx-сервер;
    вернуть 301 https://$server_name$request_uri;

    слушать 443 ssl;
    слушать [::]:443 ssl;
    
    server_name nginx-сервер;
    
    ssl_certificate /путь/к/серверу/cert.pem
    ssl_certificate_key /путь/к/nginx-серверу/privatekey.pem

    место расположения / {

        если ($ssl_client_s_dn_cn !~ "клиент") {
            вернуть 403;
        }
        корень /usr/share/nginx/html;
        индекс index.html index.htm;
    }
}

Теперь из командной строки я пытаюсь свернуть, предоставив сертификат с DN, похожим на C=GB,ST=Лондон,L=Город,O=MyOrg,OU=myOU,CN=client Я получаю ошибку 403.

Я пробовал и с другими сертификатами, независимо от DN/CN сертификата, я заметил, что Nginx возвращает 403. В журналах доступа я попытался зарегистрировать $ssl_client_s_dn значение в логах, но приходит пустое.

Я взял ссылку из http://nginx.org/en/docs/http/ngx_http_ssl_module.html

Что мне здесь не хватает?

Обновить:

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

карта $ssl_client_s_dn $ssl_client_s_dn_cn {
по умолчанию "клиент";

}

Я заметил, что значение ssl_client_s_dn может быть пустым согласно журналам nginx. Это как-то связано с включением модуля ngx_http_ssl_module?

Я проверил $ нгинкс V Я думаю, что модуль указан.

Результат прикреплен в изображении введите описание изображения здесь

Не уверен, что мне не хватает! Любая помощь, пожалуйста?

Спасибо, JE

Ivan Shatsky avatar
флаг gr
Используйте `,` char вместо `/`, как показано в [этом] (https://stackoverflow.com/a/64899673/7121513) ответе.
java_enthu avatar
флаг vn
Спасибо за комментарий @IvanShatsky. Я понял, что проблема была в отсутствующей директиве. Я бы опубликовал это как ответ, чтобы он мог быть полезен другим. Ценю, что кто-то просмотрел вопрос и оставил комментарий. Спасибо.
Рейтинг:0
флаг vn

Мне удалось это исправить. Публикация решения здесь на всякий случай, если оно может помочь кому-то в той же лодке.

В моих конфигурациях отсутствовал бит ssl_verify_client необязательно; пока мы не укажем, я узнал, что если мы не упомянем ssl_verify_client или необязательно, переменная $ ssl_client_s_dn не будет установлена. Он будет продолжать печатать пустым.

Оглядываясь назад, понятно, что без включения проверки клиента сервер будет делать с DN субъекта клиента. Однако я был бы счастлив, если бы в журналах nginx упоминалась отсутствующая директива. Пришлось разбираться методом проб и ошибок. Но рад, что наконец это сработало.

Ответить или комментировать

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