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
标头 certcli.h (包括 Certsrv.h)
Library Certidl.lib
DLL Certcli.dll

另请参阅

CCertRequest

ICertRequest

ICertRequest2

ICertRequest3