| ||||
| ||||
Подскажите пожалуйста ка грамотно добавлять certificate extension в запрос на сертификат не используя ICEnroll4::addAttributeToRequest (желательно на С++). P.S.:http://www.cryptopro.ru/CryptoPro/forum/myforum.asp?q=429 - не помогло. | ||||
Ответы: | ||||
| ||||
Например 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); | ||||
| ||||
А можно-ли добавить certificate extension в запрос на сертификат используя только xEnroll (интерфейс ICEnroll3)? | ||||
| ||||
Нет | ||||
| ||||
Как правильно надо оперировать полями pRequestInfo->cAttribute и pRequestInfo->rgAttribute для того, чтобы добавить, например certificate policies к запросу? | ||||