05.11.2004 9:18:55Как получить информацию из файла запроса Ответов: 5
SeregaEvg
Нужно с помощью CryptoAPI "раскрыть" запрос на сертификат.

Имею: файл 1.txt
-----BEGIN NEW CERTIFICATE REQUEST-----
Строчки, похожие на base64
-----END NEW CERTIFICATE REQUEST-----

Как правильно "развернуть" информацию, содержащуюся в запросе?

Опишите, пожалуйста, последовательность действий.
 
Ответы:
05.11.2004 10:17:39Kirill Sobolev
http://www.cryptopro.ru/CryptoPro/forum/myforum.asp?q=1085
09.11.2004 11:38:29SeregaEvg
Ссылка хорошая. Действую подобным образом, все вроде бы легко и просто. Только когда я получаю структуру PCERT_INFO, функция CryptDecodeObject возвращает указатель на какую-то юникодную кашу (в которой, впрочем, присутствуют осмысленные обрывки полей запроса). Что это такое?

Упрощенные действия:
var
sc: PCERT_SIGNED_CONTENT_INFO;
sc_len: Cardinal;

ci: PCERT_INFO;
ci_len: Cardinal;
begin
CryptDecodeObject(
X509_ASN_ENCODING or PKCS_7_ASN_ENCODING,
X509_CERT,
PByte(PChar(ts)),
Cardinal(Length(ts)),
CRYPT_DECODE_NOCOPY_FLAG,
sc,
@sc_len
)


CryptDecodeObject(
X509_ASN_ENCODING or PKCS_7_ASN_ENCODING,
X509_CERT_REQUEST_TO_BE_SIGNED,
sc^.ToBeSigned.pbData,
sc^.ToBeSigned.cbData,
CRYPT_DECODE_NOCOPY_FLAG,
ci,
@ci_len
)

// ci.SerialNumber.pbData теперь указывает на строку из "каши" с обрывками полей.
end;


10.11.2004 14:04:49Kirill Sobolev
А почему Вы получаете структуру PCERT_INFO? Должны получить PCERT_REQUEST_INFO
11.11.2004 11:49:58SeregaEvg
Ну... Так было в примере (файл reqcert.c из здешнего примера)... В общем, вроде все нормально, только строка Subject какая-то странная. Там примерно "..Москв4...." - это если преобразовать ее из unicode в win1251 с помощью FAR. Как "по-хорошему" привести ее к w1251?
11.11.2004 11:55:49Kirill Sobolev
Если Вы имеет ввиду наш csptest, то там тоже CERT_REQUEST_INFO, специально сейчас посмотрел.
Subject можно преобразовать функцией CertNameToStr.