Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.10.2008(UTC) Сообщений: 70
|
День добрый, разбираясь с ЭЦП, решил программно создать сертификат (CryptoAPI C++) и столкнулся с трудностями:
1) Не смог найти место куда необходимо записывать атрибуты сертификата (такие как период действия, открытый ключ и т.п.) 2) Как результат 1ого вопроса, создал сертификат только с данными о пользователе. Сохранил в файл, все функции CryptoAPI отработали нормально, однако, при попытке открыть такой сертификат, появляется окно с предупреждением ("Этот файл не может использоваться как: Сертификат безопасности") и открытие не происходит. Может это следствие отсутствия каких то обязательных полей, а может я просто что то упустил.
Буду благодарен за любую помощь. Спасибо.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
|
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.10.2008(UTC) Сообщений: 70
|
Ух ты. Благодарствую. А можно нескромный вопрос? Можно ли использовать это в коммерческой разработке?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,457  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 39 раз Поблагодарили: 750 раз в 645 постах
|
Боюсь, что в коммерческой разработке это мало поможет ;) Примеры для того и сделаны были - помочь научиться использовать CryptoAPI. |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.10.2008(UTC) Сообщений: 70
|
Спасибо большое. Буду разбираться.
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.10.2008(UTC) Сообщений: 70
|
Еще раз день добрый. Увы, но результат я получил точно такой же: "Этот файл не может использоваться как: Сертификат безопасности". Может что то необходимо настроить в самой системе?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
вряд ли. выложите этот сертификат сюда в base64 |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.10.2008(UTC) Сообщений: 70
|
Кое-что у меня получилось, но хотелось бы уточнить почему так. В функции создания сертификата (в примере, который Вы мне показали) есть блок экспорта сертификата в файл Код:
if (bExport)
{
DWORD dwWritten;
/* Create Certificate file*/
...
/* Write encoded Certificate to file*/
...
/* Destroy previous hash*/
...
/* Create hash*/
...
/* Hash password*/
...
/* Derive Session Key from hash*/
...
/* Get size of exported key blob*/
...
/* Allocate memory for exported key blob*/
...
/* Get exported key blob*/
...
/* Create Exported Key File*/
...
...
Так вот все это я заменил на Код:
LPTSTR szSignedEncodedCertBlob = new char[dwSize];
ByteToStr(dwSize, bpEncodedCert, szSignedEncodedCertBlob);
WriteToFile("C:\\БезШифра.cer", szSignedEncodedCertBlob, iBlobLen);
WriteToFile("C:\\Зашифрованный.cer", bpEncodedCert, num);
И тогда сертификат создаётся и открывается. Собственно вопрос в том, что делает блок программы из примера. Для чего хэш и почему создаётся 2 файла? Ну если не трудно конечно.
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.10.2008(UTC) Сообщений: 70
|
И еще не совсем понимаю. Ведь сертификат создаётся для того, чтобы подтвердить открытый ключ. Открытый ключ создаётся в паре с закрытым. В функции есть строчки Код:
/* Generate Private/Public key pair*/
bResult = CryptGenKey(hCryptProv, dwKeyType, CRYPT_EXPORTABLE, &hPubKey);
Если после этого нужно создать контейнер, то где тут закрытый ключ? Если это вообче создание пары =)) Я то раньше думал, что цепочка примерно такая: 1. Создаем пару 2. Создаем контейнер 3. Создаем сертификат, передав в функцию открытый ключ из пары Разве не так?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:Собственно вопрос в том, что делает блок программы из примера. Для чего хэш и почему создаётся 2 файла? это экспорт секретного ключа в файл - КриптоПро CSP не поддерживается. Цитата:1. Создаем пару 2. Создаем контейнер 3. Создаем сертификат, передав в функцию открытый ключ из пары Сначала создается контейнер Код:bResult = CryptAcquireContext(&hProv,
szContainer,
szProvider,
dwProviderType,
CRYPT_NEWKEYSET | dwAcquireFlags);
потом ключевая пара. |
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close