28.01.2004 13:48:59Добавление параметров в запрос на сертификат Ответов: 4
Александр
Подскажите пожалуйста ка грамотно добавлять certificate extension в запрос на сертификат не используя ICEnroll4::addAttributeToRequest (желательно на С++).
P.S.:http://www.cryptopro.ru/CryptoPro/forum/myforum.asp?q=429 - не помогло.
 
Ответы:
28.01.2004 16:58:33Kirill Sobolev
Например Basic Constraints

PCERT_REQUEST_INFO pRequestInfo
PCERT_EXTENSION pExt;
CERT_EXTENSION Exts[1];
CERT_EXTENSIONS ReqExts;
DWORD dwSize;

memset(Exts, 0, sizeof(CERT_EXTENSION));
ReqExts.cExtension = 0;
ReqExts.rgExtension = Exts;
//Basic Constraints
CERT_BASIC_CONSTRAINTS2_INFO BC;
PCERT_BASIC_CONSTRAINTS2_INFO pBC2 = NULL;

Exts[0].pszObjId = szOID_BASIC_CONSTRAINTS2;
Exts[0].fCritical = bCriticalBC;

if(pExt = CertFindExtension(szOID_BASIC_CONSTRAINTS2, pCert->pCertInfo->cExtension, pCert->pCertInfo->rgExtension))
CryptDecodeObjectEx(TYPE_DER, szOID_BASIC_CONSTRAINTS2, pExt->Value.pbData, pExt->Value.cbData, CRYPT_DECODE_ALLOC_FLAG, NULL, &pBC2, &dwSize);

BC.fCA = TRUE;
BC.dwPathLenConstraint = lPathLen;
BC.fPathLenConstraint = TRUE;

CryptEncodeObjectEx(TYPE_DER, szOID_BASIC_CONSTRAINTS2, &BC, CRYPT_ENCODE_ALLOC_FLAG, NULL, &Exts[0].Value.pbData, &Exts[0].Value.cbData);
ReqExts.cExtension++;


pRequestInfo->cAttribute = 1;
pRequestInfo->rgAttribute = (PCRYPT_ATTRIBUTE)malloc(sizeof(CRYPT_ATTRIBUTE));
pRequestInfo->rgAttribute[0].pszObjId = szOID_CERT_EXTENSIONS;
pRequestInfo->rgAttribute[0].cValue = 1;
pRequestInfo->rgAttribute[0].rgValue = (PCRYPT_ATTR_BLOB)malloc(sizeof(CRYPT_ATTR_BLOB));
CryptEncodeObjectEx(TYPE_DER, szOID_CERT_EXTENSIONS, &ReqExts, CRYPT_ENCODE_ALLOC_FLAG, NULL, &pRequestInfo->rgAttribute[0].rgValue[0].pbData, &pRequestInfo->rgAttribute[0].rgValue[0].cbData);
28.01.2004 17:19:07Александр
А можно-ли добавить certificate extension в запрос на сертификат используя только xEnroll (интерфейс ICEnroll3)?
29.01.2004 10:22:24Kirill Sobolev
Нет
30.01.2004 10:46:29Александр
Как правильно надо оперировать полями pRequestInfo->cAttribute и pRequestInfo->rgAttribute для того, чтобы добавить, например certificate policies к запросу?