Нахождение URL-адреса точки распространения CRL из сертификата с использованием Visual C ++ - PullRequest
0 голосов
/ 02 января 2019

Я должен найти URL-адрес точки распространения CRL из сертификата. Мне удалось получить контекст получения (CERT_CONTEXT) сертификата.

Из этого, как мне найти CRL URL? Чтобы получить publickeylength, была функция CertGetPublicKeyLength. Similary есть ли в любом случае найти точку распространения CRL?

1 Ответ

0 голосов
/ 04 января 2019

Да, я нашел ответ!Вы можете использовать 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);
...