04.04.2002 9:48:48Так как же мой вопросик то? Ответов: 1
Сергей
Программно реализую простейшую PKI:
есть самоподписанный сертификат центра сертификации. Из него извлекаю открытый ключ и на нем проверяю сертификаты других клиентов.

На клиентской машине я проверяю самоподписанный сертификат
центра сертификации Microsoft (настроенного под работу с CSP КриптоПро). Проверяю функцией CryptVerifyCertificateSignature. Первый параметр этой функции - handle криптопровайдера. В случае когда я устанавливаю его в 0, функция возвращает положительный рез-т проверки сертификата.
В случае установки handle CSP КриптоПро (полученного AcquireContext) возвращается ошибка подписи сертификата (некий неописанный код 0х57). Корректна ли установка в 0 данного параметра (ведь в этом случае согласно документации используется стандартный CSP по умолчанию)? И ваще странно почему при 0 все проверяется корректно, ведь сертификат точно сгенерен под КриптоПро (видно в его св-вах, что используется ГОСТ 3411 и тп). Не могли бы Вы пояснить данную ситуацию.
 
Ответы:
05.04.2002 14:22:16kure
По моему все работает в обоих случаях. Возьмите наш тест. Там в функции reqcert.c добавьте и попробуйте.

ret = CryptAcquireContext (&hProv, 0, TEXT("Crypto-Pro Cryptographic Service Provider"),
2, CRYPT_VERIFYCONTEXT);
if (! ret) {
HandleErrorFL ("Cannot verify signature.");
} else {
printf ("OK\n");
}

ret = CryptVerifyCertificateSignature (hProv,
TYPE_DER,
(BYTE*) cert,
cert_len,
key_info);
if (! ret) {
HandleErrorFL ("Cannot verify signature.");
} else {
printf ("Signature was VERIFIED.\n");
}