Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
1. Непонятно как сертификат видно в панели - в панели показываются в первую очередь контейнеры, не сертификаты. А уже потом можно посмотреть сертификаты в выбранном контейнере. Если в контейнер не ставили сертификат, то ошибка просмотра сертификатов в контейнере удивления не вызывает. Интереснее видимость ссылки в хранилище - без вызова CryptSetKeyParam в хранилище "Личные" у сертификата есть ссылка на закрытый ключ (шага 4 достаточно?) или в хранилище добавляется только сертификат без ссылки? Если со ссылкой, то возможно ли получив pCertContext из хранилища и получив hProv через AcquireCertificatePrivateKey что-то подписать для проверки правильности установки ссылки? 2. Похоже на то, что данные блоба не проходят какую-то проверку. Из справки Майкрософт: Цитата:KP_CERTIFICATE pbData is the address of a buffer that contains the X.509 certificate that has been encoded by using Distinguished Encoding Rules (DER). The public key in the certificate must match the corresponding signature or exchange key. Выходит, что pCertContext->pbCertEncoded как раз подходит. Вопросы: получение параметра KP_CERTIFICATE случайно не выполнится успешно вместо шага 7? А то может быть сертификат для ключа уже есть в этот момент и ошибка из-за невозможности его перезаписать? Или на удивление ключ на самом деле не AT_KEYEXCHANGE, а AT_SIGNATURE (хотя тогда странно что шаг 6 отработал без ошибок)?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,331 Сказал «Спасибо»: 550 раз Поблагодарили: 2210 раз в 1725 постах
|
two_oceans, по 1. - Сервис\Протестировать\По сертификату - диалог с установленными сертификатами |
|
1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,331 Сказал «Спасибо»: 550 раз Поблагодарили: 2210 раз в 1725 постах
|
Автор: NKNikolai UPD: пока состояние такое:
1.) Похоже, что с загруженным в pCertContext сертификатом все в порядке - если добавлять pCertContext или pExtCertCtx через CertAddCertificateContextToStore без вызова CryptSetKeyParam, то он виден в панели CryptoPro CSP (но найти его через контейнер с приватным ключом нельзя - ошибка 'в контейнере закрытого ключа отсутствуют сертификаты'). Через openssl свойства также просматриваются. Что мешает после автопоиска установить и записать сертификат в контейнер,а запомнив имя контейнера - найти его при тестировании, аналогично - обработное - протестировать по сертификату - находит этот контейнер и без ошибок тест? |
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
Почти уверен, что сертификат не соответсвует ключу. Сравните CertComparePublicKeyInfo из контекста сертификата и из контейнера CryptExportPublicKeyInfo. |
|
1 пользователь поблагодарил Максим Коллегин за этот пост.
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Автор: Максим Коллегин Почти уверен, что сертификат не соответсвует ключу. Сравните CertComparePublicKeyInfo из контекста сертификата и из контейнера CryptExportPublicKeyInfo. То есть при установке ссылки на контейнер в контекст сертификата ссылка никак не проверяется на соответствие сертификату?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
Да, ссылка никак не проверяется и не интерпретируется и может быть любой. Это просто строка. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.11.2012(UTC) Сообщений: 65 Откуда: Ростовская область
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
CryptSetKeyParam( KP_CERTIFICATE ) устанавливает сертификат в контейнер, а как его оттуда удалить?
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Уже спрашивали подобный вопрос, правда давненько - удаление сертификата из контейнера формата криптопро принципиально не предусмотрено. Замена на другой сертификат тоже невозможна.
Вручную можно экспортировать сертификат и закрытый ключ из хранилища в формат p12/pfx, потом импортировать обратно. При импорте запускается мастер создания нового контейнера криптопро (запрашивается пин-код и место хранения, имя контейнера автоматически генерируется = GUID), причем сертификат в новый контейнер не ставится, то есть экспортом-импортом создается копия исходного контейнера, но без сертификата, что приближенно к удалению сертификата, но дает случайное имя нового контейнера.
Как эти операции реализуются программно - в подробностях я не разбирался, в любом случае вывод мастера импорта убивает саму задумку об автоматизации операций. Еще могу сказать, что утилита p12utility (p12tocp) не может сконвертировать такой экспортированный из криптопро файл в контейнер криптопро напрямую, то есть идея указать для нового контейнера имя контейнера, место хранения и пин-код в параметрах командной строки утилиты тоже обламывается.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
Скоро в certmgr появится возможность указать контейнер назначения, а удаление сертификата - да, в API невозможно, ровно как и удаление секретного ключа из контейнера. |
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Цитата:Скоро в certmgr появится возможность указать контейнер назначения Очень интересная информация, спасибо. Цитата:, а удаление сертификата - да, в API невозможно, ровно как и удаление секретного ключа из контейнера Удаление секретного ключа из контейнера наверно и не нужно, нет необходимости по смыслу для одного сертификата держать разные ключи. А вот для одного секретного ключа могут быть выпущены несколько сертификатов, хорошо бы иметь потенциальную возможность их удалить. Впрочем, копирование без сертификата плюс возможность указать имя создаваемого контейнера программно наверно даже лучше подойдет. А почему так подчеркнуто про удаление сертификата - "в API невозможно", то есть возможно удалить сертификат каким-то иным способом кроме создания копии контейнера?
На контейнере тестового сертификата несколько месяцев назад неудачно пробовал "неавторизованный" способ: сохранил контейнер без сертификата, установил сертификат, скопировал и попробовал удалить сертификат пакетами для работы с ASN.1. Сравнил результат удаления с исходным контейнером без сертификата, все совпадает кроме 32-битного поля, похоже контрольной суммы. Итого: удалить сертификат из контейнера пакетами для работы с ASN.1 операция элементарная, но неизвестно что нужно записать в поле контрольной суммы. Перебирать 4 миллиарда комбинаций не очень интересная задача, на сумму CRC32 не похоже, а без изменения суммы измененный контейнер не проходит проверку целостности и не пригоден для использования.
Отредактировано пользователем 22 октября 2018 г. 6:51:20(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close