Назад | Перейти на главную страницу

Почему внезапно изменился формат nginx $ ssl_client_i_dn?

Мы используем сертификаты на стороне клиента для аутентификации одного из наших клиентов.

Наша установка такова: у нас есть nginx перед приложением Django. В нашей конфигурации 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

Решить это было легко, но я не понимаю почему. Итак, мои вопросы действительно таковы:

  1. Откуда взялось значение $ssl_client_s_dn приходить? Это установлено nginx? Клиент?
  2. Есть ли какая-либо документация / спецификация формата, который может иметь это значение, и есть ли у него имя?

Они изменились, потому что nginx изменил их в версии 1.11.6. Как показано в журнале изменений:

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

Если вы хотите избежать подобных вещей, вам следует придерживаться стабильных выпусков, а не нестабильных основных выпусков. В любом случае, вы должны сначала протестировать, прежде чем слепо обновлять производственную среду.