Pourquoi le format de nginx $ ssl_client_i_dn a-t-il soudainement changé?

13

Nous utilisons des certificats côté client pour authentifier l'un de nos clients.

Notre configuration est la suivante: nous avons nginx devant une application Django. Dans notre configuration nginx, nous avons les paramètres requis pour que la vérification du certificat côté client fonctionne ( ssl_client_certificate, ssl_verify_clientetc.) et

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;

ce qui signifie que nous obtenons les valeurs de ces variables dans notre application Django. L'application Django utilise ensuite ces informations pour identifier quel utilisateur se connecte et les autoriser.

Nous l'utilisons avec succès depuis plusieurs mois sans aucun problème lorsque nous avons soudainement commencé à obtenir des rapports sur des personnes ne pouvant pas se connecter à l'aide des certificats. Il s'est avéré que le format des valeurs $ssl_client_s_dnet $ssl_client_i_dnavait changé, d'un format séparé par une barre oblique:

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

dans un format séparé par des virgules:

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

Résoudre cela a été facile, mais je ne comprends pas pourquoi. Donc mes questions sont vraiment:

  1. D'où vient la valeur de $ssl_client_s_dn? Est-il défini par nginx? Le client?
  2. Existe-t-il une documentation / spécification du format de cette valeur et a-t-elle un nom?
Patrik Stenmark
la source

Réponses:

18

Ils ont changé car nginx les a modifiés dans la version 1.11.6. Comme indiqué dans le 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.

Si vous voulez éviter ce genre de chose, vous devriez vous en tenir aux versions stables plutôt qu'aux versions principales instables. Quoi qu'il en soit, vous devez d'abord tester avant de mettre à niveau la production à l'aveuglette.

Michael Hampton
la source