Welcome! Log In Create A New Profile

Advanced

Клиентские SSL-сертификаты + ngx_http_auth_basic_module

Vladislav Shabanov
January 01, 2021 12:48PM
Добрый день!

Хочу посоветоваться.
Есть сервер, где зона «для сотрудников» закрыта двумя слоями авторизации:
auth_basic
+ проверка на уровне приложения, с куками, сессиями и прочим.

Отказываться от auth_basic не хочется:
В коде приложения запросто могут быть ошибки. Забыли, например, завернуть какую-нибудь функцию приложения в декоратор и получили дырку в защите.
Сессионную куку могут угнать. XSS, «мутные» плагины для браузеров и т. д.
Есть «интимная» статика, которую проверять через auth_request не хочется, т.к. замедляет.
Проблема в том, что большинство браузеров неудобно работают с basic_auth: Сафари под iPhone спрашивает пароль каждые несколько часов и даже не заморачивается, чтобы его запомнить. FireFox после рестарта показывает модальный диалог со вводом пароля в одном из окон и блокирует все остальные окна с тем же сайтом. Неудобно, короче.

Настроил клиентские сертификаты. Есть сотни мануалов, ничего интересного. Но вот раздача сертификатов сотрудникам и установка их в браузеры – дело муторное. У каждого браузера свои тараканы, сложно объяснить сотруднику по телефону, как поставить сертификат в его браузер и т. д. А если сертификат устареет или придётся его отозвать, совсем беда.

Поэтому решил сделать вот какую логику:
Если браузер предъявил сертификат, то auth_basic не требуем.
Если не предъявил, то пусть вводит логин+пароль через auth_basic.
Проверка доступа на уровне приложения никуда не девается, работаем по старому.
Я не нашёл способа, как настроить конфиг nginx, чтобы эту логику реализовать. Конструкции с
if $ssl_client_verify == "SUCCESS" {}
несовместимы с auth_basic.

Пока придумал только одно: отпатчил ngx_http_auth_basic_module.c, сделал в нём директиву
auth_basic_skip_if_client_cert on/off
по которой проверка пароля выключается, если предъявлен валидный клиентский сертификат.

Вопросы:
Может быть, кто-то решал аналогичную задачу? Чтоб и два слоя защиты для страховки и удобство в повседневной работе?
Существует ли решение без патча ngx_http_auth_basic_module.c?
Интересен ли кому-нибудь этот патч? Может, на моём велосипеде ещё кто-нибудь хочет покататься? :)

С уважением,
Владислав



_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Клиентские SSL-сертификаты + ngx_http_auth_basic_module

Vladislav Shabanov January 01, 2021 12:48PM

Re: Клиентские SSL-сертификаты + ngx_http_auth_basic_module

Vladislav Zhivotnev January 02, 2021 12:18AM

Re: Клиентские SSL-сертификаты + ngx_http_auth_basic_module

Илья Шипицин January 02, 2021 03:50AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 50
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready