CertCreateCertificateContext 함수(wincrypt.h)

CertCreateCertificateContext 함수는 인코딩된 인증서에서 인증서 컨텍스트를 만듭니다. 만든 컨텍스트는 인증서 저장소에 유지되지 않습니다. 함수는 생성된 컨텍스트 내에서 인코딩된 인증서의 복사본을 만듭니다.

구문

PCCERT_CONTEXT CertCreateCertificateContext(
  [in] DWORD      dwCertEncodingType,
  [in] const BYTE *pbCertEncoded,
  [in] DWORD      cbCertEncoded
);

매개 변수

[in] dwCertEncodingType

사용되는 인코딩 유형을 지정합니다. 다음 예제와 같이 비트 OR 작업과 결합하여 인증서 및 메시지 인코딩 형식을 모두 지정할 수 있습니다.

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING 현재 정의된 인코딩 형식은 다음과 같습니다.

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pbCertEncoded

컨텍스트를 만들 인코딩된 인증서를 포함하는 버퍼에 대한 포인터입니다.

[in] cbCertEncoded

pbCertEncoded 버퍼의 크기(바이트)입니다.

반환 값

함수가 성공하면 함수는 읽기 전용 CERT_CONTEXT 대한 포인터를 반환합니다. 인증서 컨텍스트 사용을 마치면 CertFreeCertificateContext 함수를 호출하여 인증서 컨텍스트를 해제합니다.

함수가 인증서 컨텍스트를 디코딩하고 만들 수 없는 경우 NULL을 반환합니다. 확장된 오류 정보는 GetLastError를 호출합니다. 몇 가지 가능한 오류 코드는 다음과 같습니다.

반환 코드 설명
E_INVALIDARG
유효하지 않은 인증서 인코딩 형식이 지정되었습니다. 현재는 X509_ASN_ENCODING 형식만 지원됩니다.
 

함수가 실패하면 GetLastError 는 ASN.1( 추상 구문 표기법 1) 인코딩/디코딩 오류를 반환할 수 있습니다. 이러한 오류에 대한 자세한 내용은 ASN.1 반환 값 인코딩/디코딩을 참조하세요.

설명

CERT_CONTEXT CertFreeCertificateContext를 호출하여 해제해야 합니다. CertDuplicateCertificateContext 를 호출하여 중복을 만들 수 있습니다. CertSetCertificateContextPropertyCertGetCertificateContextProperty 를 호출하여 인증서의 속성을 저장하고 읽을 수 있습니다.

예제

다음 예제에서는 인코딩된 인증서에서 인증서 컨텍스트를 만드는 방법을 보여줍니다. 만든 컨텍스트가 인증서 저장소에 배치되지 않습니다. 이 함수를 사용하는 또 다른 예제는 예제 C 프로그램: 인증서 저장소 작업을 참조하세요.

#include <windows.h>
#include <stdio.h>
#include <Wincrypt.h>

#define MY_ENCODING_TYPE  (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)

void main()
{
	PCCERT_CONTEXT  pCertContext = NULL; 

	//------------------------------------------------------------------ 
	//  Create a new certificate from the encoded part of
	//  an available certificate. pDesiredCert is a previously
	//  assigned PCCERT_CONTEXT variable.
	if(pCertContext = CertCreateCertificateContext(
		MY_ENCODING_TYPE,              // The encoding type
		pDesiredCert->pbCertEncoded,   // The encoded data from
									   // the certificate retrieved
		pDesiredCert->cbCertEncoded))  // The length of the encoded data
	{
		printf("A new certificate has been created.\n");
	 
		// Use the certificate context as needed.
		// ...

		// When finished, free the certificate context.
		CertFreeCertificateContext(pCertContext);
	}
	else
	{
		printf("A new certificate could not be created.\n");
		exit(1);
	}
}

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 wincrypt.h
라이브러리 Crypt32.lib
DLL Crypt32.dll

추가 정보

CERT_CONTEXT

CertCreateCRLContext

CertCreateCTLContext

CertDuplicateCertificateContext

CertFreeCertificateContext

CertGetCertificateContextProperty

CertSetCertificateContextProperty

인증서 함수