18.04.2006 16:07:11Расширения сертификата Ответов: 6
Юрий
Добрый день!

Помогите, пожалуйста, прочитать расширения сертификата.

Возникла проблема с правильны чтением расширений сертификата.
Я получил контекст сертификата в переменную 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.

 
Ответы:
02.11.2006 9:44:14Веревкин Сергей
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 и должно быть тебе счастье. Пробую как раз джелать то же самое, надеюсь, что тоже получится
02.11.2006 9:50:33Kirill Sobolev
Не знаю про Deplhi 7.0, но в CrypoAPI есть полезная функция CryptFormatObject
02.11.2006 9:59:49Веревкин Сергей
Да, я уточнил, именно в этом все дело. Например, кусок кода:

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;
02.11.2006 11:04:38Kirill Sobolev
Не, так не получится. Там же ASN, надо декодировать
02.11.2006 13:44:31Веревкин Сергей
Естественно, что для текстовых полей. Но ведь это понятно и так я думал по умолчанию. Сей кусок был выдернут для булевого поля)
02.11.2006 13:59:21Kirill Sobolev
Все равно для каких полей.
Этот код неверный, преобразование из ASN.1 к структурами CryptoAPI делается функцией CryptDecodeObject, а не приведением типа указателя на бинарный буфер.