Utilizziamo certificati lato client per autenticare uno dei nostri clienti.
La nostra configurazione è questa: abbiamo nginx davanti a un'applicazione Django. Nella nostra configurazione nginx, abbiamo i parametri richiesti per far funzionare l'effettiva verifica del certificato lato client ( ssl_client_certificate
, ssl_verify_client
ecc.) 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;
il che significa che otteniamo i valori di tali variabili nella nostra app Django. L'app Django utilizza quindi queste informazioni per identificare l'utente che si sta connettendo e autorizzarle.
Lo usiamo con successo da diversi mesi senza alcun problema quando all'improvviso abbiamo iniziato a ricevere rapporti su persone che non erano in grado di accedere utilizzando i certificati. Si è scoperto che il formato dei valori $ssl_client_s_dn
e $ssl_client_i_dn
era cambiato, da un formato separato da barra:
/C=SE/O=Some organziation/CN=Some CA
in un formato separato da virgole:
CN=Some CA,O=Some organization,C=SE
Risolvere questo è stato facile, ma non capisco perché. Quindi le mie domande sono davvero:
- Da dove viene il valore di
$ssl_client_s_dn
? È impostato da nginx? Il cliente? - Esiste una documentazione / specifica del formato che può avere questo valore e ha un nome?