A
A
Andrey Barbolin2017-09-29 14:59:18
Nginx
Andrey Barbolin, 2017-09-29 14:59:18

How to authorize a user by certificate in NGINX with CN verification?

Все добрый день.
Появилась задачка настроить доступ пользователей к ресурсам компании по сертификатам на базе NGINX.
Хочу дополнительно к проверке сертификата добавить проверку CN="test_user01" в сертификате, для возможности разграничения доступа к ресурсам на основании групп в AD.
В nginx есть переменная $ssl_client_s_dn, которая возвращает что-то такое "/DC=org/DC=testdomain/OU=Spec/OU=Admin/CN=test_user01".
Можно выгружать список пользователей из AD по cron, но как потом сравнить данные из этого списка с CN из сертификата? Куда допать?)

Answer the question

In order to leave comments, you need to log in

3 answer(s)
Михаил Григорьев, 2017-10-03
@dronmaxman

CN из $ssl_client_s_dn можно достать с помощью map, например в nginx.conf пишем:

map $ssl_client_s_dn $ssl_client_s_dn_cn {
  default "";
  ~/CN=(?<CN>[^/]+) $CN;
}

в vhost мы можем использовать переменную $ssl_client_s_dn_cn для своих нужд, например для выставления заголовка
server {
...
proxy_set_header X-CLIENT-SSL-CN $ssl_client_s_dn_cn;
...
}
далее заголовок X-CLIENT-SSL-CN легко проверяется в самом web-приложении с нужным списком CN
Возможен и другой вариант - это написание логики проверки CN на самом nginx например с использованием njscript.

D
Dimonchik, 2017-09-29
@dimonchik2013

скрипты
повершелл, если винда, баш/питон, если нет

Можно использовать сервер аутентификации, который будет при доступе к ресурсу проверять сертификат пользователя на валидность и на принадлежность к группам в LDAP, а при необходимости и другие параметры учесть, например, разрешенных IP-адресов или дату/время доступа. Достаточно стандартная задача.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question