Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153 Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Хотя бы потому, что сам провайдер, инициализированный на контейнере, не подсказывает тип ключа.
Метод CryptAcquireCertificatePrivateKey возвращает тип ключа. Но, для этого надо открыть хранилище, найти сертификат. Лазить по хранилищу гораздо дороже, чем выполнить один if.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:Хотя бы потому, что сам провайдер, инициализированный на контейнере, не подсказывает тип ключа. В контейнере может быть 0 ключей, а может быть 2 ключа - какой тип в этих случаях должен подсказать провайдер? Цитата:Метод CryptAcquireCertificatePrivateKey возвращает тип ключа. Потому что у сертификата есть ссылка на ключ. Если ее нет - CryptAcquireCertificatePrivateKey вернет ошибку. Цитата:Лазить по хранилищу гораздо дороже, чем выполнить один if. Если Вам все равно, каким ключем из контейнера подписывать и нет планов разворачивать PKI, то дороже. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153 Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Цитата: В контейнере может быть 0 ключей, а может быть 2 ключа - какой тип в этих случаях должен подсказать провайдер?
С каждым разом все интереснее и интереснее. Честное слово. Каким способом можно перебрать ключи в контейнере? Нет функции CryptEnumKey. Есть только CryptGetUserKey. И последней надо указывать, либо AT_SIGNATURE, либо AT_KEYEXCHANGE. Цитата: Если Вам все равно, каким ключом из контейнера подписывать и нет планов разворачивать PKI, то дороже.
Интересно. При чем здесь PKI? Это проблема принимающей стороны - проверять мою подпись. Я же могу оказаться и тем злостным нарушителем, что перехватывает пакеты, меняет и подставляет некую подпись. Я, наверное, что-то упустил в PKI. Там только идет построение цепочки сертификатов к моему сертификату. Наличие моего сертификата в хранилище не обязательно. Теперь, по поводу ключей. В сертификате указано, что ключ используется для подписи и для обмена (верификации пользователя). Программа csptest говорит, что ключа подписи в контейнере нет. Программа csptestf подписывает файл. Сертификат можно получить из контейнера закрытого ключа. Это показывает программа certmgr. Где вы обнаружили у меня ошибку?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:Есть только CryptGetUserKey. И последней надо указывать, либо AT_SIGNATURE, либо AT_KEYEXCHANGE.
Совершенно верно, и этой функции достаточно - в контейнере не может быть больше одного ключа каждого типа. Перебирать не нужно. Цитата:Интересно. При чем здесь PKI? Это проблема принимающей стороны - проверять мою подпись. Я же могу оказаться и тем злостным нарушителем, что перехватывает пакеты, меняет и подставляет некую подпись. Я, наверное, что-то упустил в PKI. Там только идет построение цепочки сертификатов к моему сертификату. Наличие моего сертификата в хранилище не обязательно.
PKI - это несколько более широкое понятие, чем проверка подписи и сертификата на отзыв. Как пишет википедия Цитата:Инфраструктура открытых ключей (англ. PKI - Public Key Infrastructure) — набор средств (технических, материальных, людских и т. д.), распределенных служб и компонентов, в совокупности используемых для поддержки криптозадач на основе закрытого и открытого ключей. Т.е. если у Вас единственный ключевой контейнер и Вы не планируете создавать подпись PKCS#7, то можно работать только с ключами, без сертификатов. Цитата:Теперь, по поводу ключей. В сертификате указано, что ключ используется для подписи и для обмена (верификации пользователя). Программа csptest говорит, что ключа подписи в контейнере нет. Программа csptestf подписывает файл. Сертификат можно получить из контейнера закрытого ключа. Это показывает программа certmgr. Где вы обнаружили у меня ошибку? Ошибки нет - ключем обмена можно подписывать, но не наоборот. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 03.02.2012(UTC) Сообщений: 9 Откуда: Москва
|
Извиняюсь что влез в тему. Возник вопрос сродни обсуждавшемуся. Автор: ahtoh На Windows в CAPI есть метод CryptFindCertificateKeyProvInfo, на Linux я его не нашел, подскажите пожалуйста как мне его реализовать. Автор: maxdm Перечислить криптопровайдеры, в каждом криптопровайдере перечислить контейнеры и сравнить открытые ключи. Стоит такая же проблема. Собственно и решил ее так же как и предлагалось но теперь повились шифрованные контейнеры и все стало интересней. CryptExportPublicKeyInfo похоже желает получить пин от контейнера чтобы достать публичный ключ. Как в таком случае правильно поступать? Можно конечно в лоб. Пробежаться по всем нешифрованным контейнерам и если публичный ключ не найден то запросить пин и еще раз по всем шифрованным с полученным пином. Работать то будет но боюсь не самый лучший вариант пытаться ломиться во все подряд контейнеры с паролем от одного из них. Каждый раз будет попытка расшифровки затратная?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close