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

Уведомление

Icon
Error

5 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline Ghostleg  
#1 Оставлено : 27 августа 2018 г. 12:46:29(UTC)
Ghostleg

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.08.2018(UTC)
Сообщений: 7

При попытке построить цепочку сертификата , получаем Heap corruption.

Изначально ошибка появилась на версии двухлетней давности , обновились до 4.0.9944 проблема осталась.
Есть два разных разных стектрейса.

Первый :
Код:
ntdll.dll!RtlReportCriticalFailur
ntdll.dll!RtlpHeapHandleError
ntdll.dll!RtlpLogHeapFailure
ntdll.dll!RtlFreeHeap
AcLayers.dll!NS_FaultTolerantHeap::APIHook_RtlFreeHeap()  
KERNELBASE.dll!LocalFree
crypt32.dll!CryptVerifyCertificateSignatureEx()
crypt32.dll!ChainGetSubjectStatus()
crypt32.dll!CCertIssuerList::CreateElement()
crypt32.dll!CCertIssuerList::AddIssuer()
crypt32.dll!CChainPathObject::FindAndAddIssuersByMatchType()  
crypt32.dll!CChainPathObject::FindAndAddIssuers(class CChainCallContext *,void *,void *)
crypt32.dll!CChainPathObject::CChainPathObject(class CChainCallContext *,unsigned long,void *,void *,int &,int &)  
crypt32.dll!ChainCreatePathObject()
crypt32.dll!CChainPathObject::FindAndAddIssuersFromStoreByMatchType()
crypt32.dll!CChainPathObject::FindAndAddIssuersByMatchType()  
crypt32.dll!CChainPathObject::FindAndAddIssuers(class CChainCallContext *,void *,void *)
crypt32.dll!CChainPathObject::CChainPathObject(class CChainCallContext *,unsigned long,void *,void *,int &,int &)  
crypt32.dll!ChainCreatePathObject()
crypt32.dll!CCertChainEngine::CreateChainContextFromPathGraph()  
crypt32.dll!CCertChainEngine::GetChainContext()
crypt32.dll!CertGetCertificateChain()


Второй во вложении. Также добавил во вложения сертификат на котором воспроизводится (воспроизводится не всегда с первого раза).
dump_stacktrace.txt (6kb) загружен 12 раз(а). BE856D7A3C983DDB9C18B03480D7FA9B81AE416F.rar (2kb) загружен 22 раз(а).

Отредактировано модератором 5 октября 2018 г. 15:03:45(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#2 Оставлено : 27 августа 2018 г. 13:26:05(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Судя по всему, проблема в сертификате: в Субъекте в поле T - оно длиннее положенных 64 символов.
И проблема в коде Windows.
Знания в базе знаний, поддержка в техподдержке
Offline Demonix  
#3 Оставлено : 27 августа 2018 г. 14:00:56(UTC)
Demonix

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 1 раз в 1 постах
В сертификате написано:

Sign tool: ПАКМ "КриптоПро HSM" (версия 1.0)
Sign tool certificate: Сертификат соответствия № СФ/121-3145 от 17.06.2017
CA tool: ПАК "Удостоверяющий центр "КриптоПро УЦ" (версия 2.0)
CA tool certificate: Сертификат соответствия № СФ/128-2881 от 30.12.2016

Как УЦ смог выдать сертифкат, если длина значений некоторых полей в нем превышает ограничения?
Offline Максим Коллегин  
#4 Оставлено : 27 августа 2018 г. 14:25:19(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
А какая ОС точно?
Знания в базе знаний, поддержка в техподдержке
Offline Максим Коллегин  
#5 Оставлено : 27 августа 2018 г. 14:26:48(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
certutil -verify .cer
проблема воспроизводится?
Знания в базе знаний, поддержка в техподдержке
Offline Ghostleg  
#6 Оставлено : 27 августа 2018 г. 14:27:56(UTC)
Ghostleg

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.08.2018(UTC)
Сообщений: 7

Автор: Максим Коллегин Перейти к цитате
А какая ОС точно?


Windows Server 2016 и 2012

Отредактировано пользователем 27 августа 2018 г. 14:30:26(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#7 Оставлено : 27 августа 2018 г. 14:50:23(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
С большой вероятностью проблема в вашем приложении, сможете предоставить законченный тест - мы постараемся помочь.
Знания в базе знаний, поддержка в техподдержке
Offline Demonix  
#8 Оставлено : 27 августа 2018 г. 15:38:34(UTC)
Demonix

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 1 раз в 1 постах
certutil тоже падает
Snimok ehkrana ot 2018-08-27 15-42-56.png (139kb) загружен 39 раз(а).
Offline simonovbs  
#9 Оставлено : 27 августа 2018 г. 15:57:35(UTC)
simonovbs

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.08.2017(UTC)
Сообщений: 2
Российская Федерация

Иногда не падает, но всё равно завершается ошибкой
CertUtil: -verify command FAILED: 0x80092004 (-2146885628 CRYPT_E_NOT_FOUND)
CertUtil: Cannot find object or property.
Offline two_oceans  
#10 Оставлено : 28 августа 2018 г. 5:40:08(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 394 раз в 366 постах
Автор: Demonix Перейти к цитате
Как УЦ смог выдать сертифкат, если длина значений некоторых полей в нем превышает ограничения?
Скорее всего это из-за кодировки - один кириллический символ может занимать 2 или 3 байта при кодировании в utf-8, а пробелы, латинские буквы и спецсимволы занимают 1 байт. Для получения точного размера в символах нужно вызывать отдельную функцию. В большинстве функций работы с буферами используется размер в байтах. Отдельные программы просто выделяют буфер на максимальный размер (от 64*3 до 64*6 байт - смотря на какую версию Юникода ориентировались) и сравнивают размер в байтах, не проверяя размер поля в символах. При этом возможно незначительное превышение длины поля за счет меньшей длины отдельных символов (пробелов). В данном случае, в должности 6 пробелов и всего 72 символа, то есть максимальный буфер для 64 символов превышает актуальный размер данных для 64 символов и в эту разницу вписали еще 8 символов. Другой вопрос, что обычно в формах ввода длина строки понимается в символах и там как правило стоит ограничение на 64 символа.


Гораздо больше удивляет отсутствие бита "неотрекаемости" в поле "Использование ключа" сертификата. Другие отличия в пределах допустимого: индекс в STREET (для индекса есть отдельный оид), цифра перед регионом (необязательна уже пару лет), втолкнута защита электронной почты без "Возможности S/MIME" (старые почтовые клиенты не смогут использовать), наличие явно указанных политик применения (первый раз вижу), наличие класса КС1 (для любых запросов СМЭВ как-то слабовато, но для запросов в Росреестр пойдет). Насчет OCSP не уверен, возможно тоже не в том разделе.
Цитата:
Иногда не падает, но всё равно завершается ошибкой
На Win7 32-разрядной запустил 5 раз certutil -verify с данным сертификатом и все 5 раз успешно.

Отредактировано пользователем 28 августа 2018 г. 6:14:56(UTC)  | Причина: Не указана

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