Статус: Новичок
Группы: Участники
Зарегистрирован: 22.06.2017(UTC) Сообщений: 4
|
Здравствуйте! Проблема с получением хэша алгоритма установленного сертификата. При помощи функции CryptHashCertificate и преобразования ее в NSString получаем такую вещь: Код:-----BEGIN CERTIFICATE-----
WxdqeOZKNAzlf0fe8iXBaz5FMJI=
-----END CERTIFICATE-----
Выглядит здорово, но не совсем понятно что это. Для работы нам нужны данные такого вида (проверено, если захардкодить эту строку, то все работает): Код:5B176A78E64A340CE57F47DEF225C16B3E453092
Строка получена очень "извращенным" путем через регистры, хотелось бы узнать как это же получить по-нормальному через функцию, чтобы можно было получить из любого сертификата. Как я понял, первое - это отпечаток сертификата, что тогда второе? Похоже на SHA1, но как его получить? P.S. нужно это в URLRetriever для функции set_client_cert. Спасибо!
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,374 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 32 раз Поблагодарили: 704 раз в 613 постах
|
CertGetCertificateContextProperty(CERT_HASH_PROP_ID) |
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,374 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 32 раз Поблагодарили: 704 раз в 613 постах
|
А потом вручную переформатируйте в строковое hex представление или CryptBinaryToString (CRYPT_STRING_HEX ) должен помочь. Хотя CryptHashCertificate делает то же самое. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 22.06.2017(UTC) Сообщений: 4
|
Спасибо! CryptBinaryToString использовали, но без флага. с CRYPT_STRING_HEX все получилось.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 22.06.2017(UTC) Сообщений: 4
|
Если кому-то поможет, вот весь код: Код:- (NSString *)getCertificateHashFromCert:(PCCERT_CONTEXT)certContext {
BYTE *pvData = NULL;
DWORD cbSize = 0;
DWORD cbHash = 0;
if(!CertGetCertificateContextProperty(certContext, CERT_SHA1_HASH_PROP_ID, NULL, &cbSize))
NSLog(@"CertGetCertificateContextProperty error %u", CSP_GetLastError());
if (pvData) {
free(pvData);
}
pvData = malloc(cbSize);
cbHash = cbSize;
if(!CertGetCertificateContextProperty(certContext, CERT_SHA1_HASH_PROP_ID, pvData, &cbSize))
NSLog(@"CertGetCertificateContextProperty error %u", CSP_GetLastError());
DWORD dest;
if (!CryptBinaryToString(pvData, cbHash, 0, NULL, &dest))
NSLog(@"CryptBinaryToString error: %u", CSP_GetLastError());
LPWSTR buf = malloc(dest * sizeof(TCHAR));
if (!CryptBinaryToString(pvData, cbHash, CRYPT_STRING_HEX, buf, &dest))
NSLog(@"CryptBinaryToString error: %u", CSP_GetLastError());
return [[NSString alloc] initWithData:[NSData dataWithBytes:buf length:dest] encoding:[NSString defaultCStringEncoding]];
}
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close