Я ищу настройку, в которой я хотел бы иметь клиентские сертификаты SSL для всех, кроме одного исходного IP-адреса.
Моя идея состоит в том, чтобы установить
ssl_verify_client необязательно;
и добавить сложный оператор if к местоположениям.
Однако я не знаю, как написать такой оператор if.
# для этого требуются клиентские сертификаты ssl для всех местоположений
место расположения / {
если ($ ssl_client_verify! = "УСПЕХ") {
вернуть 403;
...
}
# теперь, что написать, чтобы требовать ssl-сертификаты, за исключением случаев, когда исходный IP-адрес, например, 1.2.3.4
местоположение / два {
если (?????) {
вернуть 403;
...
}
Изменить: дополнительная информация
Переключатель ssl_verify_client со значением по желанию
сообщает клиентам, что они могут, но не обязаны отправлять клиентские сертификаты.
Итак, проверив переменную $var_ssl_client_verify Я могу видеть, был ли сертификат клиента представлен и действителен (УСПЕХ
) или не.
Это правило должно применяться ко всем клиентам, у которых нет данного исходного IP. Для одного конкретного исходного IP я не хочу проверять клиентские сертификаты.
Мне нужно что-то вроде
если ($ ssl_client_verify! = "УСПЕХ" и source_ip! = 1.2.3.4) {
вернуть 403;
}
Редактировать 2: Я изменил название с
настроить nginx так, чтобы клиентские сертификаты требовались для всех, кроме заданного IP-адреса источника
к
настроить nginx, чтобы он требовал определенных условий местоположения для всех, кроме данного исходного IP-адреса
поскольку то, с чем я действительно борюсь, не имеет ничего общего с клиентскими сертификатами, а с объединением операторов if и условной фильтрацией исходного IP-адреса.