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

Как проверить несколько списков CRL с аутентификацией клиента nginx?

У меня есть настраиваемая настройка easyrsa с корневым и тремя центрами сертификации, подписанными корнем. (Три разных суб-ка в зависимости от типа пользователя), например:

RootCA
  +----- AdminUserCA
  +----- EmployeeCA
  +----- ClientCA

У меня аутентификация работает со следующей конфигурацией:

server {
  listen               127.0.0.1:443;
  server_name          www.acme.corp;
  ssl                  on;
  ssl_certificate      /data/src/easy-rsa/bundles/www.acme.corp_bundle.crt;
  ssl_certificate_key  /data/src/easy-rsa/whfWebCA/pki/private/www.acme.corp.key;
  add_header           Strict-Transport-Security "max-age=315360000; includeSubdomains";
  ssl_protocols        SSLv3 TLSv1;
  ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-RC4-SHA:ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RC4-SHA;
  ssl_prefer_server_ciphers on;
  ssl_verify_client optional;
  ssl_client_certificate /data/src/easy-rsa/bundles/client_auth_ca_chain.crt;
  ssl_verify_depth 2;
  ssl_crl /data/src/easy-rsa/bundles/crls/all.pem;

  ...
}

Проблема в проверке CRL. CRL подписываются выдающим ЦС, поэтому их нельзя добавлять вместе, как промежуточный сертификат + корневые сертификаты.

Таким образом, сертификат пользователя будет выдан данным промежуточным центром сертификации в зависимости от типа пользователя. Проблема в том, что мне действительно нужно проверить четыре списка CRL, чтобы они были эффективными. Nginx ssl_crl поддерживает только один файл.

Итак, мой вопрос: возможно ли, чтобы nginx правильно проверял аннулирование сертификата клиента в этой настройке без необходимости выполнять проверку в моем приложении?

Да, это возможно. Просто объедините несколько списков отзыва сертификатов в кодировке PEM в один файл, указанный в ssl_crl директива.

(Вопрос в списке рассылки nginx ссылался на этот вопрос. ответ и здесь.)

Вам необходимо объединить все списки отзыва сертификатов в цепочку: корневой центр сертификации и промежуточный центр сертификации.

С помощью openssl crl -in crl_list.crl -noout -text читать только первые crl, но nginx читает их правильно и проверяет сертификат пользователя.

Вдохновленный: https://www.ruby-forum.com/topic/6874370