17.12.2004 9:18:14Инфа из сертификата Ответов: 6
Александр
Подскажите пожалуйста, как мне из сертификата вытащит информацию об издателе, субъекте и т.д
Т.е. имеем поле сертификата Subject и его размер. В регламенте УЦ Крипто-Про указано, что в этом поле содержится следующее:
CN = Общее имя = Фамилия, Имя, Отчество
OU = Подразделение
О = Организация
L = Город
C = Страна/Регион = RU
E = Электронная почта
Как мне из всего массива байт Subject вытащит отдельные значения CN, OU,... ???
 
Ответы:
17.12.2004 9:26:57SeregaEvg
Ну если на дельфях, то у меня получилось вот что:

Функция:

function DecodeSubjStr(pDat: Pointer; StrType: Cardinal): String;
var
pch: PChar;
l, ll: Cardinal;
begin
Result := ’’;
if pDat <> nil
then
begin
l := CertNameToStr(65537, pDat, StrType, nil, 0);
if l > 1
then
begin
try
GetMem(pch, l);
except
Result := &rsquo;Error memory allocation&rsquo;;
end;
if Result = &rsquo;&rsquo;
then
try
ll := CertNameToStr(65537, pDat, StrType, pch, l);
if l = ll
then Result := string(pch)
else Result := &rsquo;l != ll&rsquo;;
finally
FreeMem(pch, l);
end;
end
else Result := &rsquo;&rsquo;;
end;
end;


Использование:
DecodeSubjStr(@cc.pCertInfo.Issuer, CERT_OID_NAME_STR or CERT_NAME_STR_NO_PLUS_FLAG)

сс - структура PCCERT_CONTEXT.
17.12.2004 9:33:28Uri
Это строка, содержащая последовательность вида:
КороткоеИмя1=Значение1,КороткоеИмяN=ЗначениеN]
Например: E=ivanov@mydomain.ru,C=RU,S=Московская область,L=Переделкино,O=Администрация,CN=Иванов Иван Иванович

Вот и разбирите эту строку и выделите значение атрибутов имени
17.12.2004 10:22:35xela
Используйте функцию CertGetNameString().
17.12.2004 10:24:27SeregaEvg
Sorry, я совсем на другой вопрос ответил. Мне показалось, что проблема в вытаскивании этой строки из поля. Пора мне просыпаться.
17.12.2004 13:08:33Александр
Большое спасибо всем.
С CertGetNameString всё получилось...
17.12.2004 13:10:07Александр
Извиняюсь. Я имел ввиду CertNameToStr )))