Używamy certyfikatów po stronie klienta do uwierzytelnienia jednego z naszych klientów.
Nasza konfiguracja jest następująca: mamy nginx przed aplikacją Django. W naszej nginx config mamy wymagane parametry, aby uzyskać rzeczywistą weryfikację klient-side-certyfikat do pracy ( ssl_client_certificate
, ssl_verify_client
etc) i
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;
co oznacza, że otrzymujemy wartości tych zmiennych do naszej aplikacji Django. Następnie aplikacja Django używa tych informacji do zidentyfikowania, który użytkownik się łączy i autoryzacji.
Z powodzeniem korzystamy z tego od kilku miesięcy, kiedy nagle zaczęliśmy otrzymywać raporty o tym, że ludzie nie mogą się zalogować za pomocą certyfikatów. Okazało się, że zmienił się format $ssl_client_s_dn
i $ssl_client_i_dn
wartości z formatu oddzielonego ukośnikiem:
/C=SE/O=Some organziation/CN=Some CA
do formatu rozdzielanego przecinkami:
CN=Some CA,O=Some organization,C=SE
Rozwiązanie tego było łatwe, ale nie rozumiem dlaczego. Więc moje pytania są naprawdę:
- Skąd pochodzi wartość
$ssl_client_s_dn
? Czy jest ustawiony przez nginx? Klient? - Czy istnieje dokumentacja / specyfikacja formatu, który może mieć ta wartość i czy ma ona nazwę?
źródło