Поделиться через


Метод ICertRequest::GetCertificate (certcli.h)

Метод GetCertificate возвращает сертификат, выданный для запроса как сертификат X.509 или при необходимости упакованный в сообщение PKCS 7, содержащее полную цепочку сертификатов для сервера служб сертификатов .

Синтаксис

HRESULT GetCertificate(
  [in]  LONG Flags,
  [out] BSTR *pstrCertificate
);

Параметры

[in] Flags

Флаг для формата и того, включена ли полная цепочка сертификатов.

Формат возвращаемого сертификата может быть одним из следующих флагов.

Значение Значение
CR_OUT_BASE64HEADER
Формат BASE64 с начальной и конечной
CR_OUT_BASE64
Формат BASE64 без начала и конца
CR_OUT_BINARY
Двоичный формат
 

Следующие флаги можно объединить с флагом формата.

Значение Значение
CR_OUT_CHAIN
Включите полную цепочку сертификатов в PKCS 7.

Если этот флаг не указан, возвращается только запрошенный сертификат в формате X.509 .

CR_OUT_CRLS
Включите списки отзыва сертификатов (CRL) в PKCS 7.
 

Например, чтобы получить двоичный сертификат с полной цепочкой сертификатов на C++, необходимо написать следующее.

hResult = pCertReq->GetCACertificate(FALSE, bstrConfig,
     CR_OUT_BINARY | CR_OUT_CHAIN, &bstrCert);

[out] pstrCertificate

Указатель на BSTR , содержащий сертификат, в указанном формате.

При использовании этого метода создайте переменную типа BSTR , задайте для переменной значение NULL, а затем передайте адрес этой переменной как pstrCertificate. Завершив использование сертификата, на который указывает pstrCertificate, освободите его, вызвав функцию SysFreeString .

Возвращаемое значение

Если метод задает для *pstrCertificateзначение BSTR , содержащее сертификат для запроса, метод возвращает S_OK.

Если метод завершается сбоем, он возвращает значение HRESULT , указывающее на ошибку. Список распространенных кодов ошибок см. в разделе Общие значения HRESULT.

Комментарии

Приложение вызовет этот метод для получения сертификата, выданного с помощью предыдущего вызова метода ICertRequest3::Submit или ICertRequest3::RetrievePending.

Примеры

В следующем примере показано получение сертификата.

#include <windows.h>
#include <stdio.h>
#include <Certcli.h>

HRESULT main()
{
    //  Pointer to interface object.
    ICertRequest * pCertRequest = NULL;

    //  Variable for COMPUTER\CANAME.
    BSTR         bstrCA = NULL;

    //  Variable for CA Certificate.
    BSTR         bstrCACert = NULL;

    HRESULT     hr;

    //  Initialize COM.
    hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

    //  Check status.
    if (FAILED(hr))
    {
        printf("Failed CoInitializeEx [%x]\n", hr);
        goto error;
    }

    //  Instantiate the CertConfig object.
    hr = CoCreateInstance(CLSID_CCertRequest,
                          NULL,
                          CLSCTX_INPROC_SERVER,
                          IID_ICertRequest,
                          (void **)&pCertRequest);
    if (FAILED(hr))
    {
        printf("Failed CoCreateInstance pCertRequest [%x]\n", hr);
        goto error;
    }

    //  Note use of two backslashes (\\) in C++ 
    //  to produce one backslash (\).
    bstrCA = SysAllocString(L"server01\\myCAName");
    
    //  Retrieve the CA certificate.
    hr = pCertRequest->GetCACertificate(FALSE,
                                        bstrCA,
                                        CR_OUT_BASE64,
                                        &bstrCACert);
    if (FAILED(hr))
    {
        printf("Failed GetCACertificate [%x]\n", hr);
        goto error;
    }
    else
    {
        //  Use CA Certificate as needed.
    }

    //  Done processing.

error:

    //  Free BSTR values.
    if (NULL != bstrCA)
        SysFreeString(bstrCA);

    if (NULL != bstrCACert)
        SysFreeString(bstrCACert);

    //  Clean up object resources.
    if (NULL != pCertRequest)
        pCertRequest->Release();

    //  Free COM resources.
    CoUninitialize();

    return hr;

}

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header certcli.h (включая Certsrv.h)
Библиотека Certidl.lib
DLL Certcli.dll

См. также раздел

CCertRequest

ICertRequest

ICertRequest2

ICertRequest3