我必须从证书中找到CRL分发点URL。我设法获得证书的上下文(CERT_CONTEXT)。
由此,我如何找到CRL URL?为了获得publickeylength,有一个函数CertGetPublicKeyLength。无论如何,有相似的地方可以找到CRL分配点吗?
答案 0 :(得分:0)
是的,我找到了答案!您可以使用 CryptGetObjectUrl()来获取它。我想发布代码段,因为它肯定会对某人有所帮助。
DWORD pcbUrlArray,pcbUrlInfo;
if(CryptGetObjectUrl(URL_OID_CERTIFICATE_CRL_DIST_POINT,pCert,CRYPT_GET_URL_FROM_PROPERTY | CRYPT_GET_URL_FROM_EXTENSION,NULL,&pcbUrlArray,NULL,&pcbUrlInfo,0))
{
PCRYPT_URL_ARRAY urlArray = (PCRYPT_URL_ARRAY)malloc(pcbUrlArray * sizeof(CRYPT_URL_ARRAY));
PCRYPT_URL_INFO urlInfo = (PCRYPT_URL_INFO)malloc(pcbUrlInfo * sizeof(CRYPT_URL_INFO));
if(CryptGetObjectUrl(URL_OID_CERTIFICATE_CRL_DIST_POINT,pCert,CRYPT_GET_URL_FROM_PROPERTY | CRYPT_GET_URL_FROM_EXTENSION,urlArray,&pcbUrlArray,urlInfo,&pcbUrlInfo,0))
{
for(int i=0;i<urlArray->cUrl;i++)
wcout<<urlArray->rgwszUrl[i]<<endl;
}
}
基本上,您通过以下方式获得了pCert(CERT_CONTEXT):
WinHttpQueryOption( hRequest,WINHTTP_OPTION_SERVER_CERT_CONTEXT,&pCert,&dwLen);