Condividi tramite


Metodo ICertRequest::GetCertificate (certcli.h)

Il metodo GetCertificate restituisce il certificato rilasciato per la richiesta come certificato X.509 o facoltativamente pacchetto in un messaggio PKCS ( Public Key Cryptography Standards ) #7 che contiene la catena di certificati completa per il server Servizi certificati .

Sintassi

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

Parametri

[in] Flags

Flag per il formato e se è inclusa la catena di certificati completa.

Il formato del certificato restituito può essere uno dei flag seguenti.

Valore Significato
CR_OUT_BASE64HEADER
Formato BASE64 con inizio/fine
CR_OUT_BASE64
Formato BASE64 senza inizio/fine
CR_OUT_BINARY
Formato binario
 

I flag seguenti possono essere combinati con il flag di formato.

Valore Significato
CR_OUT_CHAIN
Includere la catena di certificati completa nell'elemento PKCS #7.

Se questo flag non è specificato, viene restituito solo il certificato richiesto, in formato X.509 .

CR_OUT_CRLS
Includere elenchi di revoche di certificati (CRLs) in PKCS #7.
 

Ad esempio, per recuperare un certificato binario con catena di certificati completa in C++ si scriverà quanto segue.

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

[out] pstrCertificate

Puntatore a BSTR contenente il certificato, nel formato specificato.

Quando si usa questo metodo, creare una variabile di tipo BSTR , impostare la variabile uguale a NULL e quindi passare l'indirizzo di questa variabile come pstrCertificate. Al termine dell'uso del certificato a cui fa riferimento pstrCertificate, liberarlo chiamando la funzione SysFreeString .

Valore restituito

Se il metodo imposta *pstrCertificate sul BSTR contenente il certificato per la richiesta, il metodo restituisce S_OK.

Se il metodo ha esito negativo, restituisce un valore HRESULT che indica l'errore. Per un elenco di codici di errore comuni, vedere Valori HRESULT comuni.

Commenti

Un'applicazione chiama questo metodo per recuperare il certificato rilasciato tramite una chiamata precedente a ICertRequest3::Submit o ICertRequest3::RetrievePending.

Esempio

Nell'esempio seguente viene illustrato il recupero di un certificato.

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

}

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione certcli.h (include Certsrv.h)
Libreria Certidl.lib
DLL Certcli.dll

Vedi anche

CCertRequest

ICertRequest

ICertRequest2

ICertRequest3