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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Vijoniko  
#1 Оставлено : 1 сентября 2017 г. 18:49:01(UTC)
Vijoniko

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

Группы: Участники
Зарегистрирован: 22.06.2017(UTC)
Сообщений: 4

Здравствуйте!
Проблема с получением хэша алгоритма установленного сертификата.
При помощи функции CryptHashCertificate и преобразования ее в NSString получаем такую вещь:

Код:
-----BEGIN CERTIFICATE-----
WxdqeOZKNAzlf0fe8iXBaz5FMJI=
-----END CERTIFICATE-----


Выглядит здорово, но не совсем понятно что это. Для работы нам нужны данные такого вида (проверено, если захардкодить эту строку, то все работает):
Код:
5B176A78E64A340CE57F47DEF225C16B3E453092

Строка получена очень "извращенным" путем через регистры, хотелось бы узнать как это же получить по-нормальному через функцию, чтобы можно было получить из любого сертификата.
Как я понял, первое - это отпечаток сертификата, что тогда второе? Похоже на SHA1, но как его получить?

P.S. нужно это в URLRetriever для функции set_client_cert.

Спасибо!
Offline Максим Коллегин  
#2 Оставлено : 2 сентября 2017 г. 14:47:18(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,374
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 704 раз в 613 постах
CertGetCertificateContextProperty(CERT_HASH_PROP_ID)
Знания в базе знаний, поддержка в техподдержке
Offline Максим Коллегин  
#3 Оставлено : 2 сентября 2017 г. 14:50:40(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,374
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 704 раз в 613 постах
А потом вручную переформатируйте в строковое hex представление или CryptBinaryToString (CRYPT_STRING_HEX
) должен помочь. Хотя CryptHashCertificate делает то же самое.
Знания в базе знаний, поддержка в техподдержке
Offline Vijoniko  
#4 Оставлено : 4 сентября 2017 г. 11:53:29(UTC)
Vijoniko

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

Группы: Участники
Зарегистрирован: 22.06.2017(UTC)
Сообщений: 4

Спасибо!
CryptBinaryToString использовали, но без флага. с CRYPT_STRING_HEX все получилось.
Offline Vijoniko  
#5 Оставлено : 4 сентября 2017 г. 11:57:38(UTC)
Vijoniko

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

Группы: Участники
Зарегистрирован: 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]];
}
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.