Установка ограничений на расширения сертификатов при проксировании HTTP с помощью nginx

Установка ограничений на расширения сертификатов при проксировании HTTP с помощью nginx

Я использую nginx в качестве обратного прокси-сервера для обработки HTTPS для приложения, которое говорит по HTTP. Пока все работает отлично, но теперь мне нужно иметь возможность ограничивать типы сертификатов, которые я принимаю с вышестоящего сервера. В дополнение к обычным проверкам мне нужно иметь возможность отклонять любые сертификаты с ограничениями имени или с сопоставлением политик, а также отклонять сертификат, если определенные расширения помечены как критические.

В openssl, я считаю, этого можно добиться с verify_callbackпомощьюSSL_CTX_set_verifyпутем получения расширений x509 и проверки того, что присутствует/критично.

Это возможно:

а) Установить такие ограничения на расширения сертификатов в конфигурации nginx? Похоже,ngx_http_ssl_moduleимеет ssl_conf_commandдирективу, используемую для передачи некоторых параметров конфигурации в openssl, но я не уверен, относится ли это к обратным прокси-серверам или позволяет выполнять «настраиваемые» проверки сертификатов.

или

б) Написать пользовательский модуль, который может выполнять дополнительные проверки сертификата, полученного от вышестоящего сервера, и разрывать соединение в случае сбоя? Я не очень хорошо знаю, как работают модули, поэтому любые советы будут приветствоваться, если это потенциальное решение.

или

c) Изменить файлы конфигурации openssl, чтобы добиться этого? Возможно, можно установить эти ограничения на уровне openssl и вообще не требовать никаких изменений в nginx.

Соответствующая часть моего конфигурационного файла выглядит так:

http {

  keepalive_timeout  65;
  access_log  nginx_access.log;

  server {

    listen 12312;

    location / {
      ...
      proxy_pass https://<ip_address_of_upstream_server>;
      proxy_redirect https://<<ip_address_of_upstream_server>> http://localhost:12312;
      proxy_ssl_certificate certs/client-cert.pem;
      proxy_ssl_certificate_key certs/client-key.pem;
      proxy_ssl_trusted_certificate  certs/root.pem;
      proxy_ssl_verify on;
      ...
    }
  }
}

Спасибо!

Связанный контент