¿Por qué cambió repentinamente el formato de nginx $ ssl_client_i_dn?

13

Estamos utilizando certificados del lado del cliente para autenticar a uno de nuestros clientes.

Nuestra configuración es la siguiente: tenemos nginx frente a una aplicación Django. En nuestra configuración nginx, tenemos los parámetros necesarios para que funcione la verificación real del certificado del lado del cliente ( ssl_client_certificate, ssl_verify_clientetc.) y

uwsgi_param X-Client-Verify $ssl_client_verify;
uwsgi_param X-Client-DN $ssl_client_s_dn;
uwsgi_param X-SSL-Issuer $ssl_client_i_dn;

lo que significa que obtenemos los valores de esas variables en nuestra aplicación Django. La aplicación Django luego usa esta información para identificar qué usuario se está conectando y autorizarlos.

Hemos estado usando esto con éxito durante varios meses sin ningún problema cuando de repente comenzamos a recibir informes sobre personas que no podían iniciar sesión con los certificados. Resultó que el formato de los valores $ssl_client_s_dny $ssl_client_i_dnhabía cambiado, desde un formato separado por barras:

 /C=SE/O=Some organziation/CN=Some CA

a un formato separado por comas:

CN=Some CA,O=Some organization,C=SE

Resolver esto fue fácil, pero no entiendo por qué. Entonces mis preguntas son realmente:

  1. ¿De dónde $ssl_client_s_dnviene el valor de ? ¿Lo establece nginx? ¿El cliente?
  2. ¿Existe alguna documentación / especificación del formato que este valor puede tener y tiene un nombre?
Patrik Stenmark
fuente

Respuestas:

18

Cambiaron porque nginx los cambió en la versión 1.11.6. Como se muestra en el registro de cambios:

    *) Change: format of the $ssl_client_s_dn and $ssl_client_i_dn variables
       has been changed to follow RFC 2253 (RFC 4514); values in the old
       format are available in the $ssl_client_s_dn_legacy and
       $ssl_client_i_dn_legacy variables.

Si desea evitar este tipo de cosas, debe apegarse a versiones estables, en lugar de versiones inestables de la línea principal. De cualquier manera, debe probar primero antes de actualizar a ciegas la producción.

Michael Hampton
fuente