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
在 PKCS #7 中包含證書 吊銷清單 (CRL) 。
 

例如,若要在 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::SubmitICertRequest3::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
標頭 certcli.h (包括 Certsrv.h)
程式庫 Certidl.lib
Dll Certcli.dll

另請參閱

CCertRequest

ICertRequest

ICertRequest2

ICertRequest3