Wir verwenden clientseitige Zertifikate zur Authentifizierung eines unserer Kunden.
Unser Setup lautet wie folgt: Wir haben Nginx vor einer Django-Anwendung. In unserer nginx Konfiguration haben wir die erforderlichen Parameter die aktuelle Client-side-Zertifikatsüberprüfung zur Arbeit zu kommen ( ssl_client_certificate
, ssl_verify_client
usw.) und
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;
Dies bedeutet, dass wir die Werte dieser Variablen in unsere Django-App übernehmen. Die Django-App verwendet diese Informationen dann, um zu identifizieren, welcher Benutzer eine Verbindung herstellt, und um sie zu autorisieren.
Wir verwenden dies seit mehreren Monaten ohne Probleme, als wir plötzlich Berichte über Personen erhielten, die sich nicht mit den Zertifikaten anmelden konnten. Es stellte sich heraus, dass sich das Format der $ssl_client_s_dn
und $ssl_client_i_dn
-Werte von einem durch Schrägstriche getrennten Format geändert hatte:
/C=SE/O=Some organziation/CN=Some CA
in ein durch Kommas getrenntes Format:
CN=Some CA,O=Some organization,C=SE
Das zu lösen war einfach, aber ich verstehe nicht warum. Meine Fragen sind also wirklich:
- Woher kommt der Wert von
$ssl_client_s_dn
? Wird es von Nginx festgelegt? Der Kunde? - Gibt es eine Dokumentation / Spezifikation des Formats, das dieser Wert haben kann, und hat er einen Namen?