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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Артамонов Даниил  
#1 Оставлено : 20 августа 2021 г. 15:55:44(UTC)
Артамонов Даниил

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

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

Здравствуйте, использую в IOS приложении Крипто Про для авторизации по сертификату.

Импортирую сертификат следующим образом:

Цитата:

- (NSString *)importCertFromPFXStore:(NSString *)filePath withCertPassword:(NSString *)certPassword withPassword:(NSString *)password {
return [self performActionWithExceptionsHandling:^id {
CleanUp();

if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
return @(NO);
}

NSData *data = [NSData dataWithContentsOfFile:filePath];

CRYPT_DATA_BLOB blob;
blob.cbData = [data length];
blob.pbData = (BYTE *)malloc([data length]);
memcpy(blob.pbData, [data bytes], [data length]);

if (!(hSystemStore = CertOpenStore(CERT_STORE_PROV_SYSTEM,0, NULL, CERT_SYSTEM_STORE_LOCAL_MACHINE, L"MY"))) {
CleanUp();
[self handleException:WLI_CRYPTO_CERT_OPEN_STORE_EXCEPTION_REASON];
return nil;
} else {
NSLog(@"[%@] MY cert store opened.", NSStringFromSelector(_cmd));
}



if (!(hCertStore = PFXImportCertStore(&blob, [self wcharFromString:certPassword], CRYPT_EXPORTABLE|CRYPT_SILENT))) {
CleanUp();
[self handleException:WLI_CRYPTO_CERT_OPEN_STORE_EXCEPTION_REASON];
return nil;
} else {
NSLog(@"[%@] PFX store was opened.", NSStringFromSelector(_cmd));
}



fprintf (stderr, "Acquire error 0x%08x \n", CSP_GetLastError());


pCertContext = NULL;

int i=0;
bool imported = false;
while (0 != (pCertContext = CertEnumCertificatesInStore(hCertStore, pCertContext))) {

if (!CertAddCertificateContextToStore(hSystemStore, pCertContext, CERT_STORE_ADD_REPLACE_EXISTING, NULL)) {
CleanUp();
[self handleException:WLI_CRYPTO_CERT_ADD_TO_STORE_EXCEPTION_REASON];
return nil;

} else {
i++;
NSLog(@"[%@] Adding cert to store OK", NSStringFromSelector(_cmd));
NSString *thumbprint = [self thumbprintForCertContext:pCertContext];
if (!thumbprint) {
CleanUp();
[self handleException:WLI_CRYPTO_CERT_GET_THUMBPRINT_EXCEPTION_REASON];
return nil;
} else {
DWORD keytype = 0;
HCRYPTPROV hCryptProv =0;
NSLog(@"[%@] Cert thumbprint:%@", NSStringFromSelector(_cmd), thumbprint);
if(!CryptAcquireCertificatePrivateKey(pCertContext, 0, NULL, &hCryptProv, &keytype, NULL)) {
continue;
}else {
NSLog(@"[%@] Found private key. %lu", NSStringFromSelector(_cmd),hCryptProv);
imported = true;
}
CRYPT_PIN_PARAM pinParam;
pinParam.type = CRYPT_PIN_PASSWD;
pinParam.dest.passwd = (char *)[password cStringUsingEncoding:NSUTF8StringEncoding];

if(!CryptSetProvParam(hCryptProv,PP_CHANGE_PIN,(BYTE *)&pinParam, NULL)) {

fprintf (stderr, " ############ Last error after pin 0x%08x \n",CSP_GetLastError());
CleanUp();
[self handleException:WLI_CRYPTO_CERT_ADD_TO_STORE_EXCEPTION_REASON];
return nil;
}else{
fprintf (stderr, " ############ Last error after pin 0x%08x \n",CSP_GetLastError());
}
}
}

}
if(!imported){
CleanUp();
[self handleException:WLI_CRYPTO_FAILED_TO_FIND_CERT];
return nil;

}
if(i==0){
CleanUp();
[self handleException:WLI_CRYPTO_CERT_ADD_TO_STORE_EXCEPTION_REASON];
return nil;
}

CleanUp();
return @"";
}];

}


На устройстве iPhone 11 при вызове PFXImportCertStore появляется ошибка:-2146881280, на других устройствах(и даже на аналогичных iPhone 11) такой проблемы нет

Подскажите, пожалуйста, из-за чего это может может происходить и в какую сторону копать?
Offline Андрей Русев  
#2 Оставлено : 23 августа 2021 г. 12:05:48(UTC)
Андрей Русев

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

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 797

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 194 раз в 151 постах
Здравствуйте.
Ошибка означает CRYPT_E_ASN1_ERROR, от мобильного устройства она не зависит. Запустите приложение "под Xcode" и в его консоли будет более подробный журнал. Тогда можно будет детальней сказать, какая у вас ошибка во входных данных.

Отредактировано пользователем 23 августа 2021 г. 12:07:07(UTC)  | Причина: Не указана

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