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 |