в 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