| ||||
| ||||
Возможно ли добавить своё расширение сертификата? Мысли такие: PCCERT_CONTEXT pCert; получил и добавил новое расширение bp.Value.pbData = (BYTE*) id_bp;// value; bp.Value.cbData = sizeof(id_bp); CERT_EXTENSION MyExt; ZeroMemory(&MyExt,sizeof(MyExt)); if(CryptEncodeObject(dwCertEncodingType,X509_INTEGER,(LPVOID)&bp,NULL,&MyExt.Value.cbData)) { if(MyExt.Value.cbData>0) { MyExt.Value.pbData = (BYTE*) LocalAlloc(LMEM_FIXED,MyExt.Value.cbData); if(MyExt.Value.pbData) { if(CryptEncodeObject(dwCertEncodingType,X509_INTEGER,(LPVOID)&bp,MyExt.Value.pbData,&MyExt.Value.cbData)) { MyExt.pszObjId = "1.1.1.1"; MyExt.fCritical = FALSE; DWORD adressMyExt = (DWORD) &MyExt; CopyMemory(&pCert->pCertInfo->rgExtension[pCert->pCertInfo->cExtension-1],&adressMyExt,sizeof(adressMyExt)); pCert->pCertInfo->cExtension++; } else { char *msg; DWORD err = GetLastError(); FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,err,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPSTR)&msg,0,NULL); MessageBox(NULL,msg,"Error",0); LocalFree((HLOCAL)msg); } } } } else { char *msg; DWORD err = GetLastError(); FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,err,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPSTR)&msg,0,NULL); MessageBox(NULL,msg,"Error",0); LocalFree((HLOCAL)msg); } вопрос в том как из pCert, теперь получить правильный pCert->pbCertEncoded? | ||||
Ответы: | ||||
| ||||
Добавить расширение можно, но только перед тем как сертификат будет подписан. После этого уже ничего добавлять нельзя - проверка подписи не пройдет. | ||||