Imponer restricciones a las extensiones de certificados al realizar proxy HTTP con nginx

Imponer restricciones a las extensiones de certificados al realizar proxy HTTP con nginx

Estoy usando nginx como proxy inverso para manejar HTTPS para una aplicación que habla HTTP. Esto está funcionando muy bien hasta ahora, pero ahora necesito poder restringir el tipo de certificados que acepto del servidor ascendente. Además de las comprobaciones de verificación habituales, también debo poder rechazar cualquier certificado con restricciones de nombre o con asignación de políticas, así como rechazar el certificado si ciertas extensiones están marcadas como críticas.

En openssl, creo que esto podría lograrse con la verify_callbackdeSSL_CTX_set_verificarobteniendo las extensiones x509 y verificando qué está presente/es crítico.

Es posible que:

a) ¿Establecer este tipo de restricciones en las extensiones de certificados en la configuración de nginx? Parece que elngx_http_ssl_moduletiene una ssl_conf_commanddirectiva que se utiliza para pasar algunas opciones de configuración a openssl, pero no estoy seguro de si esto es relevante para los servidores proxy inversos o si es capaz de realizar validaciones de certificados "personalizadas".

o

b) ¿Escribir un módulo personalizado que pueda realizar verificaciones adicionales en el certificado recibido desde arriba y cortar la conexión si fallan? No estoy muy familiarizado con cómo funcionan los módulos, por lo que agradecería cualquier consejo si esta es una posible solución.

o

c) ¿Modificar los archivos de configuración de openssl para lograr esto? Quizás sea posible establecer estas restricciones en el nivel de openssl y no requerir ningún cambio en nginx.

La parte relevante de mi archivo de configuración se ve así:

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;
      ...
    }
  }
}

¡Gracias!

información relacionada