Re: И снова по TLS и аутентификации
Maxim Dounin
mdounin на mdounin.ru
Вт Июн 27 12:18:14 UTC 2017
Hello!
On Tue, Jun 27, 2017 at 07:18:57AM -0400, 2D77rus wrote:
> Здравствуйте, коллеги.
>
> Никак не могу побороть авторизацию по сертификатам, получаю ошибку "client
> SSL certificate verify error: (3:unable to get certificate CRL)". Этот и
> другие форумы пересмотрел, всё не то.
>
> Конфиг:
> ==================
> ssl on;
> ssl_certificate /etc/pki/tls/certs/mail2.local.cer;
> ssl_certificate_key /etc/pki/tls/private/private.key;
> ssl_session_timeout 5m;
> ssl_protocols SSLv2 SSLv3 TLSv1;
> ssl_ciphers HIGH:!aNULL:!MD5;
> ssl_prefer_server_ciphers on;
>
> ssl_trusted_certificate /etc/pki/tls/certs/chain.cer; # сертификаты
> CA1 и CA0
> ssl_client_certificate /etc/pki/tls/certs/ca1.cer; # только
> сертификат CA1
> ssl_crl /etc/pki/tls/certs/ca1.crl; # только CRL от CA1
> ssl_verify_client on;
> ssl_verify_depth 1;
> ==================
> Сертификаты, CRL - всё живое:
>
> openssl crl -CAfile CA1.cer -in CA1.crl
> verify OK
>
> openssl verify -CAfile CA0.cer CA1.cer
> verify OK
>
> openssl verify -CAfile chain.cer client1.cer
> verify OK
>
> - и всё равно неизменно ошибка.
>
> Если убрать параметр ssl_crl, получаю "client SSL certificate verify error:
> (27:certificate not trusted)"
>
> CA0 - корневой ЦС, CA1 - промежуточный ЦС, который выдал сертификат клиенту
> (виндовый, AD 2012).
> Сертификаты CA0 и CA1 добавлены в доверенные на сервере.
> CentOS 6.8, nginx/1.8.1, OpenSSL 1.0.1e-fips
> SMTP и IMAP на этом же сервере с тем же набором сертификатов - клиенты по
> сертификатам прекрасно авторизуются.
>
> Куда ещё копнуть, подскажите? Спасибо.
Во-первых, "ssl_verify_depth 1" при использовании промежуточного
CA не годится, т.к. ssl_verify_depth ограничивает глубину проверки
до корневого CA. Соответственно значение 1 означает, что
предъявленный клиентом сертификат должен быть подписан
непосредственно корневым CA. В случае использования промежуточных
CA - нужно выставить ssl_verify_depth 2 и более.
Во-вторых, для работы ssl_crl необходимо, чтобы списки отзыва были
для всех используемых CA. Если для какого-то из сертификатов
списков отзыва в указанном CRL-файле не будет, то ошибка "unable
to get certificate CRL" - ожидаема. В openssl verify
соответствующий ключ называется -crl_check_all".
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru