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 格式的要求憑證。 |
|
在 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::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) |
程式庫 | Certidl.lib |
Dll | Certcli.dll |