| ||||
| ||||
Как узнать тип провайдера (PROV_RSA_FULL, PROV_GOST_94_DH и т.д) из сертификата? Сертификат гружу из файла и использую для проверки подписи. Можно ли определить это по OID алгоритма открытого ключа сертификата? | ||||
Ответы: | ||||
| ||||
Задача не имеет однозначного решения. Можно рекомендовать следующее: 1. получить ALGID по этому OID (CertOIDToAlgId). 2. перенумеровать все CSP и для каждого из них перенумеровать алгоритмы подписи - см. пример в MSDN Example C Program: Enumerating CSP Providers and Provider Types | ||||
| ||||
Большое спасибо! Натолкнули на путь истинный :) В процессе возник еще один вопрос: Если алгоритм поддерживается несколькими провайдерами, в частности AlgID=00002E1Eh (GOST R 34.10-94) поддерживается провайдером с типом 2 и 71, есть ли разница каким типом пользоваться в CryptAcquireContext? Практика показывает, что для проверки подписи например разницы нет. | ||||
| ||||
В данном примере разницы нет. Дело в том, что тип 2 был сохранён в Крипто-Про CSP 2.0 в целях совместимости с кодом, ориентированным на CSP 1.1 (т.к. в 1.1 тип 2 - единственный). В CSP 3.0 тип 2 поддерживаться не будет. Так что рекомендация - использовать тип 71, а ещё лучше - переходить на тип 75 (в свете того, что есть сведения о прекращении действия самого ГОСТ Р 34.10-94 в ~2006-07 г.) | ||||