Warum hat sich das Format von nginx $ ssl_client_i_dn plötzlich geändert?

12

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_clientusw.) 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_dnund $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:

  1. Woher kommt der Wert von $ssl_client_s_dn? Wird es von Nginx festgelegt? Der Kunde?
  2. Gibt es eine Dokumentation / Spezifikation des Formats, das dieser Wert haben kann, und hat er einen Namen?
Patrik Stenmark
quelle

Antworten:

18

Sie wurden geändert, weil Nginx sie in Version 1.11.6 geändert hat. Wie im Changelog gezeigt:

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

Wenn Sie solche Dinge vermeiden möchten, sollten Sie sich an stabile Releases halten und nicht an instabile Mainline-Releases. In jedem Fall sollten Sie zuerst testen, bevor Sie die Produktion blind aktualisieren.

Michael Hampton
quelle