ICertRequest::GetCertificate 方法 (certcli.h)
GetCertificate 方法返回为请求颁发的证书作为 X.509 证书,或者可以选择打包在公钥加密标准 (PKCS) #7 消息中,其中包含证书服务服务器的完整证书链。
语法
HRESULT GetCertificate(
[in] LONG Flags,
[out] BSTR *pstrCertificate
);
参数
[in] Flags
格式以及是否包含完整证书链的标志。
返回的证书的格式可以是以下标志之一。
值 | 含义 |
---|---|
|
BASE64 格式(包含开始/结束) |
|
不带开始/结束的 BASE64 格式 |
|
二进制格式 |
以下标志可以与格式标志组合使用。
值 | 含义 |
---|---|
|
在 PKCS #7 中包含完整的证书链。
如果未指定此标志,则仅返回以 X.509 格式请求的证书。 |
|
将 证书吊销列表 (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 |