Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,323 Сказал «Спасибо»: 549 раз Поблагодарили: 2208 раз в 1723 постах
|
В сертификате и json еще есть город, но скорее всего будут расхождения в тексте, + можно скачать к себе через текущий web-api и потом периодически обновлять.
Самый простой вариант пока проверять так: 1. Сертификат выдан АУЦ (по цепочке или по AKI) 2. В должности есть слово нотариус
|
|
1 пользователь поблагодарил Андрей * за этот пост.
|
GTAlex оставлено 04.07.2024(UTC)
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 171 Откуда: Нск Сказал(а) «Спасибо»: 66 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Андрей * В сертификате и json еще есть город, но скорее всего будут расхождения в тексте, + можно скачать к себе через текущий web-api и потом периодически обновлять.
Самый простой вариант пока проверять так: 1. Сертификат выдан АУЦ (по цепочке или по AKI) 2. В должности есть слово нотариус
Да, я на этом варианте и остановлюсь! Андрей, спасибо большое. P.S. в плане автоматизации вопрос, этот файл trustca.txt где то в официально доступном месте? (его же надо в актуальном состоянии держать) и ещё - разве метод VerifyCades() не проверяет сертификат на АУЦ? Отредактировано пользователем 4 июля 2024 г. 12:54:10(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,323 Сказал «Спасибо»: 549 раз Поблагодарили: 2208 раз в 1723 постах
|
VerifyCades ничего не знает про АУЦ. Цепочка строится до корневого, если в mRoot будет сертификат Минцифры - успешно. В промежуточных (mCA) сертификаты АУЦ. Аналогично, если поместить тестовый корневой сертификат и попытаться проверить статус - тоже будет успешно. trustca.txt = можно ограничить конкретным перечнем АУЦ. Например, по УЦ ФНС: с 15.11.2022: E91F07442C45B2CF599EE949E5D83E8382B94A50 с 21.07.2023: D156FB382C4C55AD7EB3AE0AC66749577F87E116 Сам реестр сертификатов АУЦ есть в xml, а также можно через web-api портала проверять (по серийному номеру), но это зависимость от внешней ИС. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,323 Сказал «Спасибо»: 549 раз Поблагодарили: 2208 раз в 1723 постах
|
вот выборка (поле ID) выданные с 2023 по сегодня: trustca.txt (3kb) загружен 1 раз(а). trustca 2023-20240701.xlsx (21kb) загружен 0 раз(а). |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 171 Откуда: Нск Сказал(а) «Спасибо»: 66 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Андрей * VerifyCades ничего не знает про АУЦ. Цепочка строится до корневого, если в mRoot будет сертификат Минцифры - успешно. В промежуточных (mCA) сертификаты АУЦ. Аналогично, если поместить тестовый корневой сертификат и попытаться проверить статус - тоже будет успешно. trustca.txt = можно ограничить конкретным перечнем АУЦ. Например, по УЦ ФНС: с 15.11.2022: E91F07442C45B2CF599EE949E5D83E8382B94A50 с 21.07.2023: D156FB382C4C55AD7EB3AE0AC66749577F87E116 Сам реестр сертификатов АУЦ есть в xml, а также можно через web-api портала проверять (по серийному номеру), но это зависимость от внешней ИС. 1. про VerifyCades спасибо, значит нужно везде проверку на АУЦ добавить (про пример с тестовым корневым особенно, а то я проверил самоподписанным, VerifyCades ошибку выдало и я успокоился - а про корневой тестовый я и не подумал) 2. я так понимаю сейчас во всех сертификатах выданных в РФ mRoot будет Минцифры? (по сути достаточно это и проверить? или я не прав?) 3. вот я и хочу trustca.txt чтобы был всегда актуален - нужно его автоматически обновлять, а то будет какая то с ДД.ММ.20ГГ где ID изменится и "привет" ... 4. про web-api портала где можно подробней узнать? юзать API вообще супер - всегда актуальная информация в онлайн режиме Отредактировано пользователем 4 июля 2024 г. 13:13:11(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 171 Откуда: Нск Сказал(а) «Спасибо»: 66 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Андрей * Как пример-черновик: Код:$certBase64 = $cert->Export(0);
echo ', "Certificate": '. json_encode($certBase64);
$certPEM = "-----BEGIN CERTIFICATE-----\n" . $certBase64 . "\n" . "-----END CERTIFICATE-----\n";
$res = openssl_x509_read($certPEM);
if ($res)
{
$CertData = openssl_x509_parse($res);
$AKI= substr(str_replace(":", "", str_replace("keyid:", "", $CertData['extensions']['authorityKeyIdentifier'])) , 0, 40) ;
например - простой текстовый справочник (кому будем доверять или таблица + поле, что этот УЦ для нотариусов или свой вариант... )
function isQualifiedCA($AKI) -- по ИдКлюча УЦ из сертификата подписанта - проверяем, а АУЦ ли это? Либо до корневого - если строится цепочка(не забыть проверять, что в root хранилище пишут... )
{
try
{
$file_content = file_get_contents('/var/www/html/trustca.txt');
$content_before_string = strstr($file_content, $AKI, true);
if (false !== $content_before_string) {
$line = count(explode(PHP_EOL, $content_before_string));
if ($line>0) return true;
}
}
catch(Exception $e) {
}
return false;
}
хм ... какой то сложный способ получения корневого АУЦ я думал можно как то попроще
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,323 Сказал «Спасибо»: 549 раз Поблагодарили: 2208 раз в 1723 постах
|
про портал - https://e-trust.gosuslug...try/ufo-certificate-listтам есть post\json по серийному номеру УЦ (тут вопрос - еще его получить.. как) - не вариант, мы же поставим в mRoot корневой и будем получать цепочку... а если нет - то перехватить в catch по тексту с кодом ошибки Код:catch(Exception $e) {
$ExceptionStr = $e->getMessage();
if (strpos($ExceptionStr, "0x800B010A")) { /*0x800B010A: Не удается построить цепочку сертификатов для доверенного корневого центра => установить через certmgr сертификат УЦ */
и вот тут (без доверия к корню) - либо web, либо локальный trustca - по ид ключа УЦ искать. |
|
1 пользователь поблагодарил Андрей * за этот пост.
|
GTAlex оставлено 04.07.2024(UTC)
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,323 Сказал «Спасибо»: 549 раз Поблагодарили: 2208 раз в 1723 постах
|
Автор: GTAlex Автор: Андрей * Как пример-черновик: Код:$certBase64 = $cert->Export(0);
echo ', "Certificate": '. json_encode($certBase64);
$certPEM = "-----BEGIN CERTIFICATE-----\n" . $certBase64 . "\n" . "-----END CERTIFICATE-----\n";
$res = openssl_x509_read($certPEM);
if ($res)
{
$CertData = openssl_x509_parse($res);
$AKI= substr(str_replace(":", "", str_replace("keyid:", "", $CertData['extensions']['authorityKeyIdentifier'])) , 0, 40) ;
например - простой текстовый справочник (кому будем доверять или таблица + поле, что этот УЦ для нотариусов или свой вариант... )
function isQualifiedCA($AKI) -- по ИдКлюча УЦ из сертификата подписанта - проверяем, а АУЦ ли это? Либо до корневого - если строится цепочка(не забыть проверять, что в root хранилище пишут... )
{
try
{
$file_content = file_get_contents('/var/www/html/trustca.txt');
$content_before_string = strstr($file_content, $AKI, true);
if (false !== $content_before_string) {
$line = count(explode(PHP_EOL, $content_before_string));
if ($line>0) return true;
}
}
catch(Exception $e) {
}
return false;
}
хм ... какой то сложный способ получения корневого АУЦ я думал можно как то попроще это не получение корневого АУЦ. Корневого АУЦ вообще не существует) Корневой сертификат ГУЦ, МКС, а теперь МЦ - не аккредитуются же, они самоподписанные ... Это пример как распарсить сертификат подписанта и вытащить из него AKI - идентификатор ключа УЦ (далее мы по списку проверяем - а АУЦ ли он?) Кто напишет более понятно\проще на php - флаг в руки, а опубликует здесь - получить лайки, но это не точно. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 171 Откуда: Нск Сказал(а) «Спасибо»: 66 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Андрей * про портал - https://e-trust.gosuslug...try/ufo-certificate-listтам есть post\json по серийному номеру УЦ (тут вопрос - еще его получить.. как) - не вариант, мы же поставим в mRoot корневой и будем получать цепочку... а если нет - то перехватить в catch по тексту с кодом ошибки Код:catch(Exception $e) {
$ExceptionStr = $e->getMessage();
if (strpos($ExceptionStr, "0x800B010A")) { /*0x800B010A: Не удается построить цепочку сертификатов для доверенного корневого центра => установить через certmgr сертификат УЦ */
и вот тут (без доверия к корню) - либо web, либо локальный trustca - по ид ключа УЦ искать. да я как раз 0x800B010A и обрабатываю в исключении, поэтому и думал что всё норм, но момент с корневым тестовым УЦ я не учел ... надо получать корневой и сверять его с реестром (файлом) АУЦ
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,323 Сказал «Спасибо»: 549 раз Поблагодарили: 2208 раз в 1723 постах
|
Автор: GTAlex
да я как раз 0x800B010A и обрабатываю в исключении, поэтому и думал что всё норм, но момент с корневым тестовым УЦ я не учел ... надо получать корневой и сверять его с реестром (файлом) АУЦ и опять неправильно. АУЦ у нас, это, к примеру, УЦ ФНС, этот УЦ выдал сертификат нотариусу. В сертификате нотариуса есть Ид ключа УЦ ФНС и именно по этой строке проверяем в trustca.txt ! Причем тут получить корневой и сверять его с реестром? Ничего не нужно проверять. Информация об УЦ есть в сертификате подписанта! |
|
1 пользователь поблагодарил Андрей * за этот пост.
|
GTAlex оставлено 04.07.2024(UTC)
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close