Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
Оптимальный вариант получения списка сертификатов субъектов, принадлежащих одному корню
Статус: Участник
Группы: Участники
Зарегистрирован: 11.04.2017(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Всем доброго дня!
Интересует способ построения в .NET Framework/Core (C#) списка сертификатов субъектов, выданных на одном и том же корне. Имеется двухуровневая схема УЦ (корневой и подчиненный) и конечные субъекты. Как оптимально построить список сертификатов субъектов, чьи цепочки доверия имеют один и тот же корень? Пока вижу только один способ - построение цепочек по каждому сертификату субъекта до корня, и если корень удовлетворяет условиям поиска, то добавление серта субъекта в список. Интересут, например, вариант сделать это с использованием класса Enumerable из namespace'а System.Linq. Но как связать два серта субъекта и УЦ, по какому свойству? Насколько я понимаю, прямой связи между сертами нет, а есть только связь посредством ЭП серта субъекта выданного на ключе УЦ. Т.е. необходима проверка ЭП серта субъекта при помощи серта УЦ. И если я прав, то класс X509Chain строит цепочку доверия как раз используя эти проверки ЭП. В общем хотелось бы услышать мнения мастеров.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Здравствуйте.
Строить по Идентификатору ключа ЦС. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.04.2017(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Автор: Андрей * Здравствуйте.
Строить по Идентификатору ключа ЦС. var caKeyId = x509.Extensions.Cast<X509Extension>() .Where(n => n.Oid.Value.Equals("2.5.29.35")) .Select(n => new AsnEncodedData(n.Oid, n.RawData)) .Select(n => n.Format(true)) .FirstOrDefault(); При помощи такого кода я выбираю содержимое, но там кроме идентификатора ключа ЦС присутствует и другая информация типа серийного номера серта и названия ЦС. Есть ли варианты сразу получить только ИД ключа ЦС или надо самому парсить содержимое?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Можно декодировать или просто взять 20 байтов, это sha1 от структуры с открытым ключом Уц, в hex 40 длина, её показывает ОС. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.04.2017(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Автор: Андрей * Можно декодировать или просто взять 20 байтов, это sha1 от структуры с открытым ключом Уц, в hex 40 длина, её показывает ОС. А как декодировать? Вроде как в .NET нет такого класса, который бы соответствовал расширению AKI. Или можно каким-то образом использовать CX509ExtensionAuthorityKeyIdentifier из CERTENROLLLib? Я попытался, но не понял как использовать метод InitializeDecode. Просто не хочется колхозить самому и разбирать байтовый массив AKI, чтобы вытащить оттуда поле keyIdentifier. Понимаю, что это абсолютно несложно сделать, но хотелось бы воспользоваться какими-то стандартными инструментами. P.S. Кстати, насколько я понял из описания Microsoft для расширения AKI, цеопчка доверия как раз и строится на его основе и расширения SKI из серта вышестоящего УЦ. Т.е. в поле keyIdentifier из AKI записывается sha1 от PublicKey УЦ. Но sha1 вроде как признан уязвимым еще несколько лет назад. Тогда собственно доверие к цепочке, построенной таким образом, тоже пропадает.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.04.2017(UTC) Сообщений: 25
Сказал(а) «Спасибо»: 1 раз
|
Да, кстати, получать keyIdentifier через подсчет sha1 от открытого ключа вышестоящего УЦ тоже не хочется. А вдруг завтра это уже не будет sha1.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Автор: Андрей Врагов Но sha1 вроде как признан уязвимым еще несколько лет назад. Тогда собственно доверие к цепочке, построенной таким образом, тоже пропадает. не имеет отношения ... хеш - для быстрого поиска - есть ли в хранилище такой сертификат, далее - выполняется же .. проверка самой подписи в выданном сертификате с учётом найденного сертификата УЦ. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Автор: Андрей Врагов Да, кстати, получать keyIdentifier через подсчет sha1 от открытого ключа вышестоящего УЦ тоже не хочется. А вдруг завтра это уже не будет sha1. RFC будут менять для начала... софт переписывать все... Код:
foreach (X509Extension extension in Certificate.Extensions)
if (extension.Oid.Value.ToString() == "2.5.29.35")
использовать extension.RawData.Length
и extension.RawData
типа:
StringBuilder sb2 = new StringBuilder();
if (extension.RawData.Length > 30)
{
for (int i = 6; i < 26; i++)
{
sb2.Append(extension.RawData[i].ToString("X2"));
}
}
else
{
for (int i = 4; i < extension.RawData.Length; i++)
{
sb2.Append(extension.RawData[i].ToString("X2"));
}
}
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Два варианта: 1. Snimok ehkrana ot 2020-08-27 20-12-59.png (77kb) загружен 8 раз(а). 2. Snimok ehkrana ot 2020-08-27 20-14-18.png (69kb) загружен 8 раз(а). |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 12.10.2009(UTC) Сообщений: 42
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Прошу прощения, что встреваю, но истина дороже :)
RFC 5280 не имеет требований, что идентификатор ключа должен быть 20 байтов или что это должен быть SHA-1 Оговорка про 20 октетов есть у серйиного номера, но это несколько другое.
На практике видел сертификаты, у которых это поле было большей размерности. И это удовлетворяло формулировкам упомянутого RFC.
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
Оптимальный вариант получения списка сертификатов субъектов, принадлежащих одному корню
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close