Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline miser  
#1 Оставлено : 21 июля 2015 г. 1:12:37(UTC)
miser

Статус: Активный участник

Группы: Участники
Зарегистрирован: 14.03.2011(UTC)
Сообщений: 152
Мужчина
Откуда: Санкт-Петербург

Сказал «Спасибо»: 1 раз
Поблагодарили: 7 раз в 5 постах
Есть клиентский сертификат, выданный неким УЦ.
У данного УЦ есть два кросс сертификата, выданных корневым УЦ.
Первый кросс получен на корневом сертификате "Главный УЦ 1".
Второй кросс получен на корневом сертификате "Главный УЦ 2".

Клиентский сертификат:
Subject: CN=Вася
Issuer: CN=Любимый УЦ
Signature: xxxxxx

Первый кросс сертификат:
Subject: CN=Любимый УЦ
Issuer: CN=Главный УЦ 1
Signature: yyyyyy

Второй кросс сертификат:
Subject: CN=Любимый УЦ
Issuer: CN=Главный УЦ 2
Signature: zzzzzz

Первый корневой сертификат:
Subject: CN=Главный УЦ 1
Issuer: CN=Главный УЦ 1
Signature: aaaaaa

Второй корневой сертификат:
Subject: CN=Главный УЦ 2
Issuer: CN=Главный УЦ 2
Signature: bbbbbb


И тут возникает главный вопрос. Система строит цепочку сертификатов в любой последовательности:

Вариант 1:
1) Клиентский сертификат
2) Первый кросс сертификат
3) Первый корневой сертификат

Вариант 2:
1) Клиентский сертификат
2) Второй кросс сертификат
3) Второй корневой сертификат

На самом деле вариантов гораздо больше, так как в системе оказывается 3 действующих корневых сертификата "Главный УЦ 1".

Все представленные цепочки будут построены системой. Но только одна может является гарантированно правильной. Это когда подпись сертификата клиента проходит проверку на открытом ключе кросс сертификата и подпись кросс сертификата проходит проверку на открытом ключе корневого сертификата.

Вопрос. Как задать параметры CERT_CHAIN_PARA для функции CertGetCertificateChain, чтобы получить реальную цепочку?

Как с этой задачей справляется JCP?

Отредактировано пользователем 21 июля 2015 г. 1:24:40(UTC)  | Причина: Не указана

Offline miser  
#2 Оставлено : 21 июля 2015 г. 10:23:10(UTC)
miser

Статус: Активный участник

Группы: Участники
Зарегистрирован: 14.03.2011(UTC)
Сообщений: 152
Мужчина
Откуда: Санкт-Петербург

Сказал «Спасибо»: 1 раз
Поблагодарили: 7 раз в 5 постах
Внесу ясность с примерами на уровне окошек в Windows.

Устанавливаем в систему два корневых сертификата, "Главный УЦ 1" и "Главный УЦ 2".
В проводнике открываем сертификат пользователя. Как мы и ожидаем, цепочки нет.

Устанавливаем сертификат доверенного УЦ "Любимый УЦ" от издателя "Главный УЦ 1".
В проводнике открываем сертификат пользователя. Цепочка построена.

Удаляем сертификат доверенного УЦ "Любимый УЦ" от издателя "Главный УЦ 1".
Устанавливаем сертификат доверенного УЦ "Любимый УЦ" от издателя "Главный УЦ 2".
В проводнике открываем сертификат пользователя. Цепочка построена.
Offline cross  
#3 Оставлено : 21 июля 2015 г. 10:38:22(UTC)
Анатолий Беляев

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
А почему только одна гарантировано правильная? Из вашего описания все три правильные, если считать что кросы сделаны правильно. При условии что все сертификаты стоят в хранилище то предсказать какая из цепочек вернется нельзя. Какая первая построится до самоподписаного корневого который есть в хранилище корневых и по ней проверятся все подписи + проверки на отзыв та и вернется. Что в JCP что в CSP.

PS: При этом если в сертификатах есть AuthorityKeyIdentifier с серийниками то построение цепочек может быть чуть сложнее )). Для Java еще будет зависит от типа и версии JDK.
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline miser  
#4 Оставлено : 21 июля 2015 г. 11:06:33(UTC)
miser

Статус: Активный участник

Группы: Участники
Зарегистрирован: 14.03.2011(UTC)
Сообщений: 152
Мужчина
Откуда: Санкт-Петербург

Сказал «Спасибо»: 1 раз
Поблагодарили: 7 раз в 5 постах
По моему, только одна является гарантированно правильной.
Можно, конечно, предположить, что ключевая пара в доверенных сертификатах одинаковая.
В этом случае надо проверять обе цепочки.

Списки отзывов издаются УЦ для каждого доверенного сертификата.
"Любимый УЦ" от издателя "Главный УЦ 1" имеет свою точку распространения и свой набор CRL файлов.
"Любимый УЦ" от издателя "Главный УЦ 2" имеет свою точку распространения и свой набор CRL файлов.

Надо поднять оба набора CRL (основной и инкрементный).

В CRL файлах присутствует атрибут AuthorityKeyIdentifier. Это облегчает сопоставление списка отзыва (CRL) сертификату издателя (subject: CN=Любимый УЦ).

Тогда возникает резонный вопрос, как получить все возможные "правильные"" цепочки?

В сертификате клиента ведь нет атрибута AuthorityKeyIdentifier издателя. Или всё таки есть?
Offline Андрей Писарев  
#5 Оставлено : 21 июля 2015 г. 11:30:42(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,719
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2054 раз в 1594 постах
Автор: miser Перейти к цитате
По моему, только одна является гарантированно правильной.
Можно, конечно, предположить, что ключевая пара в доверенных сертификатах одинаковая.
В этом случае надо проверять обе цепочки.

Списки отзывов издаются УЦ для каждого доверенного сертификата.
"Любимый УЦ" от издателя "Главный УЦ 1" имеет свою точку распространения и свой набор CRL файлов.
"Любимый УЦ" от издателя "Главный УЦ 2" имеет свою точку распространения и свой набор CRL файлов.

Надо поднять оба набора CRL (основной и инкрементный).

В CRL файлах присутствует атрибут AuthorityKeyIdentifier. Это облегчает сопоставление списка отзыва (CRL) сертификату издателя (subject: CN=Любимый УЦ).

Тогда возникает резонный вопрос, как получить все возможные "правильные"" цепочки?

В сертификате клиента ведь нет атрибута AuthorityKeyIdentifier издателя. Или всё таки есть?

Конечно, одинаковая должна быть.

Есть в издаваемых сертификатах, идентификатор ключа ЦС.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#6 Оставлено : 21 июля 2015 г. 11:34:01(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,719
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2054 раз в 1594 постах
identifikator kljucha.png (40kb) загружен 62 раз(а).

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#7 Оставлено : 21 июля 2015 г. 11:38:21(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,719
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2054 раз в 1594 постах
Автор: miser Перейти к цитате

Тогда возникает резонный вопрос, как получить все возможные "правильные"" цепочки?


1. Из проверяемого сертификата (пользователь\промежуточный) - получить идентификатор ключа ЦС (idkey)
2. В нужном хранилище (промежуточные\корневые) найти все сертификаты с idkey
3. Повторить для каждого сертификата из п.2 действия из п1. и п2. до нахождения корневого (idkey ключа ЦС = idkey ключа субъекта)
Техническую поддержку оказываем тут
Наша база знаний
Offline miser  
#8 Оставлено : 21 июля 2015 г. 12:52:58(UTC)
miser

Статус: Активный участник

Группы: Участники
Зарегистрирован: 14.03.2011(UTC)
Сообщений: 152
Мужчина
Откуда: Санкт-Петербург

Сказал «Спасибо»: 1 раз
Поблагодарили: 7 раз в 5 постах
Идентификатор ключа субъекта (idkey), это значение хеш функции SHA1 над открытым ключом в сертификате.
Но мы говорим, что "ключевая пара в доверенных сертификатах одинаковая". Значит, "Идентификатор ключа субъекта" будет одинаковый.

Что же их отличает, эти ключи ?
1) "Любимый УЦ" от издателя "Главный УЦ 1"
2) "Любимый УЦ" от издателя "Главный УЦ 2"

Да, у них серийные номера разные. И в разделе "идентификатор ключа центра сертификации" надо брать серийный номер ключа издателя. Далее, проверять совпадение номеров выявленного доверенного/корневого сертификата. Для пущей гарантии, можно перепроверить и строку издателя.

Вот и получается, что у нас реально будет только одна "правильная" цепочка сертификатов.

Отредактировано пользователем 21 июля 2015 г. 14:29:16(UTC)  | Причина: добавли пример сертификатов УЦ

Offline Андрей Писарев  
#9 Оставлено : 21 июля 2015 г. 14:47:25(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,719
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2054 раз в 1594 постах
Автор: miser Перейти к цитате
Идентификатор ключа субъекта (idkey), это значение хеш функции SHA1 над открытым ключом в сертификате.
Но мы говорим, что "ключевая пара в доверенных сертификатах одинаковая". Значит, "Идентификатор ключа субъекта" будет одинаковый.

Что же их отличает, эти ключи ?
1) "Любимый УЦ" от издателя "Главный УЦ 1"
2) "Любимый УЦ" от издателя "Главный УЦ 2"

Да, у них серийные номера разные. И в разделе "идентификатор ключа центра сертификации" надо брать серийный номер ключа издателя. Далее, проверять совпадение номеров выявленного доверенного/корневого сертификата. Для пущей гарантии, можно перепроверить и строку издателя.

Вот и получается, что у нас реально будет только одна "правильная" цепочка сертификатов.



Почему?
Техническую поддержку оказываем тут
Наша база знаний
Offline miser  
#10 Оставлено : 21 июля 2015 г. 21:23:58(UTC)
miser

Статус: Активный участник

Группы: Участники
Зарегистрирован: 14.03.2011(UTC)
Сообщений: 152
Мужчина
Откуда: Санкт-Петербург

Сказал «Спасибо»: 1 раз
Поблагодарили: 7 раз в 5 постах
В сертификате есть раздел "Итентификатор ключа центра сертификации" (AuthorityKeyIdentifier).
Этот раздел состоит из нескольких полей.
Код:

The AuthorityKeyIdentifier object.

 id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 35 }

   AuthorityKeyIdentifier ::= SEQUENCE {
      keyIdentifier             [0] IMPLICIT KeyIdentifier           OPTIONAL,
      authorityCertIssuer       [1] IMPLICIT GeneralNames            OPTIONAL,
      authorityCertSerialNumber [2] IMPLICIT CertificateSerialNumber OPTIONAL  }

   KeyIdentifier ::= OCTET STRING

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

В сертификатах "CN=Любимый УЦ" идентификатор ключа одинаковый, а серийные номера разные.

Отредактировано пользователем 22 июля 2015 г. 1:51:34(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.