우리는 고객 중 하나를 인증하기 위해 클라이언트 측 인증서를 사용하고 있습니다.
설정은 다음과 같습니다. Django 응용 프로그램 앞에 nginx가 있습니다. 우리의 nginx의 설정에서, 우리는 작업 (의 실제 클라이언트 측 인증서 검증을 얻기 위해 필요한 매개 변수를 가지고 ssl_client_certificate
, ssl_verify_client
등) 및
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;
즉, 변수 값을 Django 앱으로 가져옵니다. 그런 다음 Django 앱은이 정보를 사용하여 연결중인 사용자를 식별하고 권한을 부여합니다.
우리는 인증서를 사용하여 로그인 할 수없는 사람들에 대한 보고서를 갑자기 받기 시작했을 때 아무런 문제없이 몇 달 동안 이것을 성공적으로 사용했습니다. 슬래시로 구분 된 형식에서 $ssl_client_s_dn
및 $ssl_client_i_dn
값 의 형식 이 변경된 것으로 나타났습니다 .
/C=SE/O=Some organziation/CN=Some CA
쉼표로 구분 된 형식으로 :
CN=Some CA,O=Some organization,C=SE
이 문제를 해결하는 것은 쉽지만 그 이유를 모르겠습니다. 그래서 내 질문은 실제로 :
- 가치는
$ssl_client_s_dn
어디 에서 오는가? 그것은 nginx에 의해 설정됩니까? 클라이언트? - 이 값이 가질 수있는 형식에 대한 문서 / 사양이 있습니까? 이름이 있습니까?
답변
릴리스 1.11.6에서 nginx가 변경했기 때문에 변경되었습니다. 변경 로그에 표시된대로 :
*) 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.
이런 종류의 일을 피하려면 불안정한 메인 라인 릴리스보다는 안정적인 릴리스를 고수해야합니다. 어느 쪽이든, 맹목적으로 제품을 업그레이드하기 전에 먼저 테스트해야합니다.