11.06.2004 15:59:34CryptSignAndEncodeCertificate под win2000 Ответов: 2
Ivan Ravin
Не работает CryptSignAndEncodeCertificate под win2000. Ошибка 80090008h (NTE_BAD_ALGID).
Параметры провайдера следующие:
CSP=Crypto-Pro Cryptographic Service Provider
Type=2
ExchAlg=43550
HashAlg=32798
SymmAlg=26142
ExchLen=1024
Секретный ключ:
dwKeySpec=AT_KEYEXCHANGE

win2000 - "голая" (установлен только SP3 и 2 рекомендованных в документации патча). С другим криптопровайдером (MS), либо с крипто-про, но на других ОС (98, ME, XP) серитфикаты создаются нормально.
Указанные алгоритмы с помощью CryptGetProvParam(hProv, PP_ENUMALGS_EX, ...) программа находит. CertAlgIdToOID определяет CertInfo.SignatureAlgorithm.pszObjId=’1.2.643.2.2.9’
В чем может быть дело?
 
Ответы:
11.06.2004 18:11:42Ivan Ravin
Если кому интересно решение:
в документации на CryptSignAndEncodeCertificate говорится, что параметр pSignatureAlgorithm может принимать одно из 3 значений:
szOID_RSA_MD5RSA
szOID_RSA_SHA1RSA
szOID_X957_SHA1DSA
Я же, как написано выше, использовал ГОСТовский: CertAlgIdToOID(FHashAlg), где FHashAlg=32798. И под XP это работало! (создавались сертификаты с алгоритмом подписи ГОСТ Р 34.11-94). ОС Win2000 server отказалась это делать. Я стал перебирать алгоритмы указанные в документации и оказалось, что провайдер Крипто про не знает szOID_RSA_MD5RSA, но создает сертификаты с алгоритмом подписи szOID_RSA_SHA1RSA, и это также заработало под win2000.
На этом часть проблемы решена.
А теперь новая проблема.
Указанное поведение криптопровайдера (а может, операционной системы) заставляет при генерации сертификатов использовать несертифицированный алгоритм (подписывается хеш SHA1).
Будет ли такой сертификат соответствовать закону об ЭЦП и не будет ли при "разборках" владелец такого сертификата послан куда подальше? Как быть?
12.06.2004 3:52:22xyz
SHA 1 поддерживается в качества алгоритма хэша по нескольким причинам, но при это подпись (это же не ГОСТ) Вы проверить не сможете.
PS. Вроде как SP4 вышел уже.