Re: Вопрос по TLS и аутентификации

Maxim Dounin mdounin на mdounin.ru
Пн Апр 3 12:28:11 UTC 2017


Hello!

On Sun, Apr 02, 2017 at 11:25:47PM -0400, DemDA wrote:

> Здравствуйте, уважаемые профи!
> Возник вопрос (точнее наверное два ).
> Подняли NGinx  для доступа к одному из защищаемых ресурсов. Сделал
> двустороннюю аутентификацию. Прикрутил ГОСТ. Все взлетело. НО... появилась
> проблема. Когда использую сертификаты, выданные собственным УЦ, где root CA
> самоподписаный - все нормально летает авторизуется... все гуд.  Беда в том,
> что для авторизации надо использовать сертификаты ЭП, выданные УЦ нашей
> вышестоящей организации, а там root CA подписан промежуточным сертификатом
> УЦ минкозвязи, который в подписан сертификатом головного УЦ минкомсвязи (он
> самоподписанный). В таком случае у клиента происходит запрос сертификата,
> причем список сертификатов правильный. НО после выбора сертификата ошибка
> 400 - и все. Пробовал catом слеплять сертификаты в разной

Ошибка 400 всегда сопровождается информацией в error-логе о 
причинах ошибки, обычно - на уровне info.  Стоит заглянуть в лог и 
посмотреть, что именно там написано (а если ничего не написано - 
поправить уровень логгирования).

> последовательности, пробовал в ssl_trusted_certificate накидывать ....
> ничего. У клиента все сертфикаты установлены. 
> Вот конфиг
> server {
> listen     443 ssl;
> server_name  tls.oepak22.ru;
> ssl_certificate      /etc/nginx/serts/server.crt;
> ssl_certificate_key  /etc/nginx/serts/server.key;
> large_client_header_buffers 4 16k;
> ssl_ciphers GOST2001-GOST89-GOST89:HIGH:MEDIUM;
> #ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
> ssl_protocols TLSv1;
> ssl_prefer_server_ciphers  on;
> ssl_client_certificate /etc/nginx/serts/ca1.crt;
> #ssl_client_certificate /etc/nginx/serts/xcc.crt;
> ssl_crl /etc/nginx/serts/crl.pem;
> ssl_verify_client on;
> keepalive_timeout 70;
> location / {
> root   /www/;
> index index.html;
>         }
> 
> location /deloweb {
>  proxy_pass http://10.33.1.7/deloweb;
>         }

Судя по конфигу, вы не пытались задавать ssl_verify_depth, меж тем 
для случая, когда используются промежуточные сертификаты, это 
необходимо.  Подробнее тут:

http://nginx.org/ru/docs/http/ngx_http_ssl_module.html#ssl_verify_depth

> PS. Оговорюсь сразу, что server.crt выдан как раз таки УЦ, который тестовый
> и самоподписанный root CA. Нет ли ничего в этом криминального, что
> сертификат сервера и сертификат клиентов выданы разными УЦ.

Нет, сертификат самого не влият на проверку сертификатов клиентов.

> И еще вопрос: возможно ли использовать одновременно несколько
> ssl_client_certificate? Актуально потому, что у нас в регионе несколько УЦ.

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

-- 
Maxim Dounin
http://nginx.org/


Подробная информация о списке рассылки nginx-ru