Por que o formato do nginx $ ssl_client_i_dn mudou repentinamente?

12

Estamos usando certificados do lado do cliente para autenticar um de nossos clientes.

Nossa configuração é a seguinte: Temos o nginx na frente de um aplicativo Django. Em nossa configuração nginx, temos os parâmetros necessários para que a verificação do certificado do lado do cliente funcione ( ssl_client_certificate, ssl_verify_clientetc) e

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;

o que significa que obtemos os valores dessas variáveis ​​em nosso aplicativo Django. O aplicativo Django usa essas informações para identificar qual usuário está se conectando e autorizá-lo.

Nós o usamos com êxito há vários meses sem nenhum problema, quando de repente começamos a receber relatórios sobre pessoas que não conseguem fazer login usando os certificados. Aconteceu que o formato dos valores $ssl_client_s_dne $ssl_client_i_dnhavia mudado, de um formato separado por barra:

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

para um formato separado por vírgula:

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

Resolver isso foi fácil, mas não entendo o porquê. Então, minhas perguntas são realmente:

  1. De onde vem o valor $ssl_client_s_dn? É definido pelo nginx? O cliente?
  2. Existe alguma documentação / especificação do formato que esse valor pode ter e possui um nome?
Patrik Stenmark
fonte

Respostas:

18

Eles mudaram porque o nginx os alterou na liberação 1.11.6. Como mostrado no changelog:

    *) 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.

Se você deseja evitar esse tipo de coisa, deve manter versões estáveis, em vez de versões instáveis ​​da linha principal. De qualquer forma, você deve testar primeiro antes de atualizar cegamente a produção.

Michael Hampton
fonte