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_client
etc.) 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_dn
et $ssl_client_i_dn
avait 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:
- D'où vient la valeur de
$ssl_client_s_dn
? Est-il défini par nginx? Le client? - Existe-t-il une documentation / spécification du format de cette valeur et a-t-elle un nom?
la source