Статус: Участник
Группы: Участники
Зарегистрирован: 09.06.2017(UTC) Сообщений: 19
|
Доброго ремени суток. Не понимаю как загрузить в хранилище сертификат PFX, добавляются только сертификаты CER. PFX нужны по требованию заказчика и будут использоваться для подписи документов. Код, который использую для загрузки сертификата в хранилище:
- (BOOL)loadCertificateWithName:(NSString *)name type:(NSString *)type { BOOL success = false; HCERTSTORE hSystemStore = NULL; PCCERT_CONTEXT pCertContext = NULL; hSystemStore = [self openStoreWithName:"root"]; pCertContext = [self getCertContextForSourceWithName:name ofType:type]; success = [self addCertificateToStore:hSystemStore pCertContext:pCertContext]; // Clear all [self freeCertContext:pCertContext]; [self closeCertStore:hSystemStore]; return success; }
Функция, которая возвращает контекст (на данный момент сертификат ложится в папку с приложением и берется от туда):
- (PCCERT_CONTEXT)getCertContextForSourceWithName:(NSString *)name ofType:(NSString *)type { NSString *str=[self getPathForFileNamed:name withExtension:type]; NSData *data = [NSData dataWithContentsOfFile:str]; BYTE *cert = (BYTE *)[data bytes]; DWORD lSize = (unsigned int)[data length]; if (!CertCreateCertificateContext(MY_ENCODING_TYPE, cert, lSize)) { NSLog(@"Certificate context creation failed. Error: %u", CSP_GetLastError()); } return CertCreateCertificateContext(MY_ENCODING_TYPE, cert, lSize); }
В случае с сертификатами CER, функция CertCreateCertificateContext возвращает TRUE. При попытке добавить сертификат PFX ошибка: 2148085760 - OSS Certificate encode/decode error code base. Как я понял, это связано с тем, что PFX это PKCS12 и является контейнером, содержащим в себе приватный ключ и сертификат (он же публичный ключ), а поддерживаются только PKCS7 и X509. Нашел функцию PFXImportCertStore, которая, казалось бы, для этого и предназначена, но не нашел ни одного примера, в том числе в MSDN. К тому же смущает тот факт, что во входных параметрах нет хранилища. Подскажите, пожалуйста, способ добавления сертификата PFX для дальнейшей подписи им документов, желательно с конкретными функциями.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 16.04.2008(UTC) Сообщений: 1,271
Сказал(а) «Спасибо»: 22 раз Поблагодарили: 446 раз в 325 постах
|
С pfx / pkcs#12 можно работать только через PFXImportCertStore / PFXExportCertStore (см. https://msdn.microsoft.c...aa387314(v=vs.85).aspx). Мы недавно добавили поддержку этого интерфейса в наш API на *nix. Замечу, что на данный момент поддерживается только наш собственный формат pfx. В будущих релизах также будет поддержан формат ТК26. После импорта надо переложить сертификаты из полученного хранилища в системное, контейнеры с закрытыми ключами будут созданы самой функцией импорта pfx. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.06.2017(UTC) Сообщений: 19
|
Как тогда сейчас происходит процедура подписи документа, если можно добавлять только сертификаты *.cer? Они же содержат в себе только открытый ключ. Как-то отдельно привязать файл закрытого ключа? Пробую подписывать функцией CryptSignMessage, возвращает, соответственно, ошибку, что у сертификата отсутствует приватный ключ.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 16.04.2008(UTC) Сообщений: 1,271
Сказал(а) «Спасибо»: 22 раз Поблагодарили: 446 раз в 325 постах
|
Закрытые ключи в большинстве случаев создаются прямо на устройстве. Наша контрольная панель там позволяет сформировать и отправить запрос на сертификат (на MS CA, КриптоПро УЦ 1.5, КриптоПро УЦ 2.0), получить ответ и установить сертификат. Нужно только, чтобы УЦ был доступен по сети с устройства. В соседней теме я рассказывал про варианты импорта закрытых ключей на iOS: http://www.cryptopro.ru/...;m=80581&find=unread |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.06.2017(UTC) Сообщений: 19
|
Я смотрел этот пример, но на функции CryptGetUserKey все падает, т.к. кейсет пустой. Пробовал работать с функцией CryptAcquireCertificatePrivateKey, но контекст получается взять только для сертификатов .cer. Т.о. получается, что либо я пытаюсь функцией CryptAcquireCertificatePrivateKey вытащить приватный ключ у сертификата .cer, у которого его нет, либо я беру сертификат с приватным ключем (p12 или pfx) и не могу взять у них контекст, т.к. КриптоПро с ними не работает. Как же мне взять приватный ключ, если я не могу импортировать сертификат с приватным ключом?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.06.2017(UTC) Сообщений: 19
|
У нас ситуация такая, что пользователю предоставляется уже сгенерированные администратором отдельно ключ и сертификат, а ему, в свою очередь, нужно их использовать в приложении, то есть ничего генерировать на устройстве не нужно. Допустим, что эти файлы будут закидываться в приложение через iTunes files sharing, но как ключ добавить в хранилище приложения программно?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.03.2016(UTC) Сообщений: 37 Сказал(а) «Спасибо»: 2 раз Поблагодарили: 3 раз в 3 постах
|
Автор: olin После импорта надо переложить сертификаты из полученного хранилища в системное, контейнеры с закрытыми ключами будут созданы самой функцией импорта pfx. Можете подробнее рассказать как это сделать?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 03.06.2011(UTC) Сообщений: 26
Сказал(а) «Спасибо»: 1 раз
|
можно пример переноса сертификатов из олученного хранилища в системное? какие функции для этого используются?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 03.06.2011(UTC) Сообщений: 26
Сказал(а) «Спасибо»: 1 раз
|
при вызове функции PFXImportCertStore возникает ошибка... cpcsp: 0x16dcaf000: :524 CPCAcquireContext (pszContainer=\\.\HDIMAGE\arvt07c8l5vrqtj9yb1qrstzayvw4wqv2u6vx19r, dwFlags=0x48). Result=1, Err=0x0. hProv=1459748875. capi20: 0x16dcaf000: :166 CryptGetDefaultProviderA () Default provider for type 1 is not specified! cpcsp: 0x16dcaf000: :723 CPCReleaseContext (hProv=1459748875, dwFlags=0x0). Result=1, Err=0x80090020 в config.ini нет провайдера 1 pfx файл экспортирован из консоли Крипто ПРО... 4.0.0.0.9842 Отредактировано пользователем 28 марта 2018 г. 17:06:28(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 03.06.2011(UTC) Сообщений: 26
Сказал(а) «Спасибо»: 1 раз
|
На форуме нет смысла публиковать запросы? Только официально почтой?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close