다음을 통해 공유


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
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

추가 정보

CCertRequest

ICertRequest

ICertRequest2

ICertRequest3