ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Как различить SSL сертификаты, выданные различными промежуточными ЦС собщим корневым ЦС?


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: Как различить SSL сертификаты, выданные различными промежуточными ЦС собщим корневым ЦС?
  • From: "Maximus43" <nginx-forum@xxxxxxxx>
  • Date: Mon, 27 Aug 2012 17:08:07 -0400 (EDT)
  • Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tigger.jlkhosting.com; s=x; h=From:References:In-Reply-To:Message-ID:Content-Transfer-Encoding:Content-Type:Subject:To:Date; bh=vM5DfVqWVnYA/hzI/ADIpViNjHYJ3tffV2n2ChaayEw=; b=gnaajQr58MsFIdfJqRnMqTnHgr74PO91SPIaeeJEG0u9bjPALcJb4ttarALLt/O+5TgsZtF82jtSS3mKsNwvCzzHeAnw8vcxbnGreHGhDtN2nv9xVan6zTm3gSUIZOE6;
  • In-reply-to: <20110913120601.GA15030@nginx.com>
  • References: <20110913120601.GA15030@nginx.com>

Я все-таки повторюсь со своей проблемой.
Пытался внимательно понять, как и что работает, пришел к следующим выводам:
1. Директива ssl_client_certificate определяет список доступных CA для
клиента, сертификаты этих CA сервер готов рассматривать для авторизации по
сертификату. Со стороны клиента выглядит как:
---
Acceptable client certificate CA names
/CN=SubCA1/O=Test JSC/L=Moscow/C=RU
---
Браузер, получая такой сертификат смотрит все клиентские пары ключей и
выбирает те, которые подписаны указанным сертификатом.

2. Директива ssl_certificate содержит ссылку на файл с серверным SSL
сертификатом. Причем если в сертификате верно прописаны AIA caIssuer и
Authority Key Identifier, то клиент может самостоятельно построить цепочку
до корневого сертификата. Возможно добавить промежуточные CA после
серверного сертификата, однако корневой сертификат добавлять туда не стоит,
в этом нет смысла. Корневые сертификаты должны присутствовать у клиента.

Вроде все должно работать предсказуемо, однако это не так.

Проблемы начинаются из-за того, что нет разделения механизма проверки
клиентских сертификатов и предоставления клиенту списка принимаемых
сертификатов. Это приводит к тому, что в директиве ssl_client_certificate
ссылка должна указывать на файл, который помимо серверного сертификата
должен ВСЕГДА содержать цепочку сертификатов, включая корневой, иначе
проверка клиентского сертификата завершится неудачно с кодом 20:unable to
get local issuer certificate для отсутствующих сертификатов и 27:certificate
not trusted для всех остальных в цепочке.
Проблема наличия корневого сертификата в списке доступных для клиента в том,
что браузер предлагает использовать все сертификаты всех подчиненных CA,
подписанных корневым сертификатом. Это является потенциальной проблемой
безопасности. И пользователь с сертификатом, подписанным SubCA2, сможет
получить доступ на сайт вместо пользователя с сертификатом, подписанным
SubCA1.

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

Это действительно важно для многоуровневых PKI.

Заранее спасибо!

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,215034,230155#msg-230155

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.