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