| ||||
| ||||
Нужно с помощью CryptoAPI "раскрыть" запрос на сертификат. Имею: файл 1.txt -----BEGIN NEW CERTIFICATE REQUEST----- Строчки, похожие на base64 -----END NEW CERTIFICATE REQUEST----- Как правильно "развернуть" информацию, содержащуюся в запросе? Опишите, пожалуйста, последовательность действий. | ||||
Ответы: | ||||
| ||||
http://www.cryptopro.ru/CryptoPro/forum/myforum.asp?q=1085 | ||||
| ||||
Ссылка хорошая. Действую подобным образом, все вроде бы легко и просто. Только когда я получаю структуру 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; | ||||
| ||||
А почему Вы получаете структуру PCERT_INFO? Должны получить PCERT_REQUEST_INFO | ||||
| ||||
Ну... Так было в примере (файл reqcert.c из здешнего примера)... В общем, вроде все нормально, только строка Subject какая-то странная. Там примерно "..Москв4...." - это если преобразовать ее из unicode в win1251 с помощью FAR. Как "по-хорошему" привести ее к w1251? | ||||
| ||||
Если Вы имеет ввиду наш csptest, то там тоже CERT_REQUEST_INFO, специально сейчас посмотрел. Subject можно преобразовать функцией CertNameToStr. | ||||