16.07.2007 10:54:55Расширение сертификата Ответов: 1
Сергей
Возможно ли добавить своё расширение сертификата?
Мысли такие:
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?
 
Ответы:
16.07.2007 11:13:30Kirill Sobolev
Добавить расширение можно, но только перед тем как сертификат будет подписан. После этого уже ничего добавлять нельзя - проверка подписи не пройдет.