Compartilhar via


Método ICertRequest::GetCertificate (certcli.h)

O método GetCertificate retorna o certificado emitido para a solicitação como um certificado X.509 ou, opcionalmente, empacotado em uma mensagem PKCS (Public Key Cryptography Standards ) nº 7 que contém a cadeia de certificados completa para o servidor de Serviços de Certificados .

Sintaxe

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

Parâmetros

[in] Flags

Um sinalizador para o formato e se a cadeia de certificados completa está incluída.

O formato do certificado retornado pode ser um dos sinalizadores a seguir.

Valor Significado
CR_OUT_BASE64HEADER
Formato BASE64 com início/término
CR_OUT_BASE64
Formato BASE64 sem início/término
CR_OUT_BINARY
Formato binário
 

Os sinalizadores a seguir podem ser combinados com o sinalizador de formato.

Valor Significado
CR_OUT_CHAIN
Inclua a cadeia de certificados completa no PKCS nº 7.

Se esse sinalizador não for especificado, somente o certificado solicitado, no formato X.509 , será retornado.

CR_OUT_CRLS
Inclua CRLs ( listas de revogação de certificados ) no PKCS nº 7.
 

Por exemplo, para recuperar um certificado binário com cadeia de certificados completa no C++, você escreveria o seguinte.

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

[out] pstrCertificate

Um ponteiro para o BSTR que contém o certificado, no formato especificado.

Ao usar esse método, crie uma variável do tipo BSTR , defina a variável igual a NULL e passe o endereço dessa variável como pstrCertificate. Quando terminar de usar o certificado apontado por pstrCertificate, libere-o chamando a função SysFreeString .

Retornar valor

Se o método definir *pstrCertificate como o BSTR que contém o certificado da solicitação, o método retornará S_OK.

Se o método falhar, ele retornará um valor HRESULT que indica o erro. Para obter uma lista de códigos de erro comuns, consulte Valores HRESULT comuns.

Comentários

Um aplicativo chamaria esse método para recuperar o certificado emitido por meio de uma chamada anterior para ICertRequest3::Submit ou ICertRequest3::RetrievePending.

Exemplos

O exemplo a seguir mostra a recuperação de um certificado.

#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;

}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho certcli.h (inclua Certsrv.h)
Biblioteca Certidl.lib
DLL Certcli.dll

Confira também

CCertRequest

ICertRequest

ICertRequest2

ICertRequest3