| ||||
| ||||
Программно реализую простейшую PKI: есть самоподписанный сертификат центра сертификации. Из него извлекаю открытый ключ и на нем проверяю сертификаты других клиентов. На клиентской машине я проверяю самоподписанный сертификат центра сертификации Microsoft (настроенного под работу с CSP КриптоПро). Проверяю функцией CryptVerifyCertificateSignature. Первый параметр этой функции - handle криптопровайдера. В случае когда я устанавливаю его в 0, функция возвращает положительный рез-т проверки сертификата. В случае установки handle CSP КриптоПро (полученного AcquireContext) возвращается ошибка подписи сертификата (некий неописанный код 0х57). Корректна ли установка в 0 данного параметра (ведь в этом случае согласно документации используется стандартный CSP по умолчанию)? И ваще странно почему при 0 все проверяется корректно, ведь сертификат точно сгенерен под КриптоПро (видно в его св-вах, что используется ГОСТ 3411 и тп). Не могли бы Вы пояснить данную ситуацию. | ||||
Ответы: | ||||
| ||||
По моему все работает в обоих случаях. Возьмите наш тест. Там в функции 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"); } | ||||