| ||||
| ||||
Добрый день! Помогите, пожалуйста, прочитать расширения сертификата. Возникла проблема с правильны чтением расширений сертификата. Я получил контекст сертификата в переменную pCert : PCCERT_CONTEXT. Проанализировал структуру pCert^.pCertInfo. Определил количество рсширений (pCert^.pCertInfo^.cExtension). Читаю и определяю типы всех расширений (pCert^.pCertInfo^.rgExtension^.pszObjId). Все параметры читаются правильно - у меня есть реальный сертификат, выданный УЦ, с которым я сравниваю параметры. Но дальнейшая интерпритация значений не получается. Мне не удается правильно интерпретировать pCert^.pCertInfo^.rgExtension^.Value. Я приведу ниже распечатку "в лоб" pCert^.pCertInfo^.rgExtension^.Value в 16-м виде и то, что выдано УЦ: У меня: 1. Расширение : 2.5.29.15 (критическое) Название : KEY USAGE Значение : 03 02 04 F0 УЦ: 1. Расширение 2.5.29.15 (критическое) Название: Key Usage Значение: Digital Signature , Non- Repudiation , Key Encipherment , Data Encipherment(F0) У меня: 3. Расширение : 2.5.29.14 Название : SUBJECT KEY IDENTIFIER Значение : 04 14 95 C4 F1 3B 60 70 82 6F BD 66 90 E6 DF EC 1C 99 9E 79 82 60 УЦ: 3. Расширение 2.5.29.14 Название: Subject Key Identifier Значение: 95C4 F13B 6070 826F BD66 90E6 DFEC 1C99 9E79 8260 У меня: 4. Расширение : 2.5.29.35 Название : AUTHORITY KEY IDENTIFIER2 Значение : 30 81 90 80 14 2E 82 C4 D9 AE B6 05 FC 8F EF 3B 0C D4 61 59 3B B0 FE 25 A3 A1 66 A4 64 30 62 31 1B 30 19 06 09 2A 86 48 86 F7 0D 01 09 01 16 0C 69 6E 66 6F 40 70 61 72 63 2E 72 75 31 0B 30 09 06 03 55 04 06 13 02 52 55 31 10 30 0E 06 03 55 04 07 13 07 53 61 72 61 74 6F 76 31 14 30 12 06 03 55 04 0A 13 0B 52 50 43 20 50 61 72 74 6E 65 72 31 0E 30 0C 06 03 55 04 03 13 05 52 50 43 43 41 82 10 70 93 24 74 36 CF DD B9 40 56 B4 DE E9 07 22 33 УЦ: 4. Расширение 2.5.29.35 Название: Authority Key Identifier Значение: KeyID=2E82 C4D9 AEB6 05FC 8FEF 3B0C D461 593B B0FE 25A3 Certificate Issuer: Directory Address: CN=RPCCA O=RPC Partner L=Saratov C=RU E=info@parc.ru Certificate SerialNumber=7093 2474 36CF DDB9 4056 B4DE E907 2233 Из приведенного выше видно, что информация есть, совпадает, но извлечь ее у меня не получается. Пишу на DELPHI 7.0. | ||||
Ответы: | ||||
| ||||
See X.509 Certificate Extension Structures for specifics on extension OIDs and their related structures. X.509 Certificate Extension Structures The following structures are associated with X.509 CERT_EXTENSION structures... Найдешь это в MSDN и должно быть тебе счастье. Пробую как раз джелать то же самое, надеюсь, что тоже получится | ||||
| ||||
Не знаю про Deplhi 7.0, но в CrypoAPI есть полезная функция CryptFormatObject | ||||
| ||||
Да, я уточнил, именно в этом все дело. Например, кусок кода: pExtension := hCertContext.pCertInfo^.rgExtension^; if (pExtension.fCritical) AND (AnsiSameText(pExtension.pszObjId, szOID_BASIC_CONSTRAINTS2)) then Begin hBCInfo := (PCERT_BASIC_CONSTRAINTS2_INFO((pExtension.Value).pbData))^; Result := hBCInfo.fCA; End; | ||||
| ||||
Не, так не получится. Там же ASN, надо декодировать | ||||
| ||||
Естественно, что для текстовых полей. Но ведь это понятно и так я думал по умолчанию. Сей кусок был выдернут для булевого поля) | ||||
| ||||
Все равно для каких полей. Этот код неверный, преобразование из ASN.1 к структурами CryptoAPI делается функцией CryptDecodeObject, а не приведением типа указателя на бинарный буфер. | ||||