Compartir a través de


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

El método GetCertificate devuelve el certificado emitido para la solicitud como un certificado X.509 , o opcionalmente empaquetado en un mensaje estándar de criptografía de clave pública (PKCS) #7 que contiene la cadena de certificados completa para el servidor de Servicios de certificados.

Sintaxis

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

Parámetros

[in] Flags

Marca para el formato y si se incluye la cadena de certificados completa.

El formato del certificado devuelto puede ser una de las marcas siguientes.

Valor Significado
CR_OUT_BASE64HEADER
Formato BASE64 con begin/end
CR_OUT_BASE64
Formato BASE64 sin begin/end
CR_OUT_BINARY
Formato binario
 

Las marcas siguientes se pueden combinar con la marca de formato.

Valor Significado
CR_OUT_CHAIN
Incluya una cadena de certificados completa en PKCS #7.

Si no se especifica esta marca, solo se devuelve el certificado solicitado, en formato X.509 .

CR_OUT_CRLS
Incluya listas de revocación de certificados (CRL) en el PKCS #7.
 

Por ejemplo, para recuperar un certificado binario con una cadena de certificados completa en C++, escribiría lo siguiente.

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

[out] pstrCertificate

Puntero al BSTR que contiene el certificado, en el formato especificado.

Al usar este método, cree una variable de tipo BSTR , establezca la variable igual a NULL y, a continuación, pase la dirección de esta variable como pstrCertificate. Cuando haya terminado de usar el certificado al que apunta pstrCertificate, ábrelo llamando a la función SysFreeString .

Valor devuelto

Si el método establece *pstrCertificate en el BSTR que contiene el certificado de la solicitud, el método devuelve S_OK.

Si se produce un error en el método, devuelve un valor HRESULT que indica el error. Para obtener una lista de códigos de error comunes, consulte Valores HRESULT comunes.

Comentarios

Una aplicación llamaría a este método para recuperar el certificado emitido por medio de una llamada anterior a ICertRequest3::Submit o ICertRequest3::RetrievePending.

Ejemplos

En el ejemplo siguiente se muestra cómo recuperar un 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 Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado certcli.h (incluya Certsrv.h)
Library Certidl.lib
Archivo DLL Certcli.dll

Consulte también

CCertRequest

ICertRequest

ICertRequest2

ICertRequest3