使用Visual C ++从证书中查找CRL分发点URL

时间:2019-01-02 10:57:14

标签: visual-c++ wincrypt

我必须从证书中找到CRL分发点URL。我设法获得证书的上下文(CERT_CONTEXT)。

由此,我如何找到CRL URL?为了获得publickeylength,有一个函数CertGetPublicKeyLength。无论如何,有相似的地方可以找到CRL分配点吗?

1 个答案:

答案 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);