Метод 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 |
Header | certcli.h (включая Certsrv.h) |
Библиотека | Certidl.lib |
DLL | Certcli.dll |