다음을 통해 공유


CertCreateSelfSignCertificate 함수(wincrypt.h)

CertCreateSelfSignCertificate 함수는 자체 서명된 인증서를 빌드하고 인증서를 나타내는 CERT_CONTEXT 구조체에 대한 포인터를 반환합니다.

구문

PCCERT_CONTEXT CertCreateSelfSignCertificate(
  [in, optional] HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
  [in]           PCERT_NAME_BLOB                 pSubjectIssuerBlob,
  [in]           DWORD                           dwFlags,
  [in, optional] PCRYPT_KEY_PROV_INFO            pKeyProvInfo,
  [in, optional] PCRYPT_ALGORITHM_IDENTIFIER     pSignatureAlgorithm,
  [in, optional] PSYSTEMTIME                     pStartTime,
  [in, optional] PSYSTEMTIME                     pEndTime,
  [optional]     PCERT_EXTENSIONS                pExtensions
);

매개 변수

[in, optional] hCryptProvOrNCryptKey

만든 인증서에 서명하는 데 사용되는 암호화 공급자 의 핸들입니다. NULL인 경우 pKeyProvInfo 매개 변수의 정보를 사용하여 필요한 핸들을 가져옵니다. pKeyProvInfoNULL인 경우 기본 공급자 유형, PROV_RSA_FULL 공급자 유형, 기본 키 사양, AT_SIGNATURE 및 고유한 컨테이너 이름을 가진 새로 만든 키 컨테이너가 사용됩니다.

이 핸들은 CryptAcquireContext 함수 또는 NCryptOpenKey 함수를 사용하여 만든 NCRYPT_KEY_HANDLE 핸들을 사용하여 만든 HCRYPTPROV 핸들이어야 합니다. 새 애플리케이션은 항상 CNG CSP(암호화 서비스 공급자)의 NCRYPT_KEY_HANDLE 핸들을 전달해야 합니다.

[in] pSubjectIssuerBlob

인증서 주체에 대한 DN(고유 이름)이 포함된 BLOB 에 대한 포인터입니다. 이 매개 변수는 NULL일 수 없습니다. 최소한 빈 DN에 대한 포인터를 제공해야 합니다. 이 BLOB은 일반적으로 CertStrToName 함수를 사용하여 만들어집니다. CryptEncodeObject 함수를 사용하고 X509_NAME 또는 X509_UNICODE_NAME StructType을 지정하여 만들 수도 있습니다.

[in] dwFlags

이 함수의 기본 동작을 재정의하는 플래그 집합입니다. 이 값은 0이거나 다음 값 중 하나 이상의 조합일 수 있습니다.

의미
CERT_CREATE_SELFSIGN_NO_KEY_INFO
2
기본적으로 반환된 PCCERT_CONTEXT CERT_KEY_PROV_INFO_PROP_ID 설정하여 프라이빗 키를 참조합니다. 반환된 PCCERT_CONTEXT CERT_KEY_PROV_INFO_PROP_ID 설정하여 프라이빗 키를 참조하지 않으려면 CERT_CREATE_SELFSIGN_NO_KEY_INFO 지정합니다.
CERT_CREATE_SELFSIGN_NO_SIGN
1
기본적으로 생성되는 인증서는 서명됩니다. 만들어지는 인증서가 더미 자리 표시자일 경우 인증서에 서명할 필요가 없을 수 있습니다. CERT_CREATE_SELFSIGN_NO_SIGN 지정되면 인증서 서명을 건너뜁습니다.

[in, optional] pKeyProvInfo

CRYPT_KEY_PROV_INFO 구조체에 대한 포인터입니다. 인증서를 만들기 전에 CSP는 키 공급자, 키 공급자 유형 및 키 컨테이너 이름에 대해 쿼리됩니다. 쿼리된 CSP가 이러한 쿼리를 지원하지 않으면 함수가 실패합니다. 기본 공급자가 이러한 쿼리를 지원하지 않는 경우 pKeyProvInfo 값을 지정해야 합니다. RSA BASE는 이러한 쿼리를 지원합니다.

pKeyProvInfo 매개 변수가 NULL이 아니면 생성된 인증서의 CERT_KEY_PROV_INFO_PROP_ID 값에 해당 값이 설정됩니다. 제공된 구조체의 모든 매개 변수가 올바르게 지정되었는지 확인해야 합니다.

[in, optional] pSignatureAlgorithm

CRYPT_ALGORITHM_IDENTIFIER 구조체에 대한 포인터입니다. NULL인 경우 기본 알고리즘인 SHA1RSA 가 사용됩니다.

[in, optional] pStartTime

SYSTEMTIME 구조체에 대한 포인터입니다. NULL인 경우 시스템 현재 시간은 기본적으로 사용됩니다.

[in, optional] pEndTime

SYSTEMTIME 구조체에 대한 포인터입니다. NULL인 경우 pStartTime 값과 1년은 기본적으로 사용됩니다.

[optional] pExtensions

CERT_EXTENSION 구조체CERT_EXTENSIONS 배열에 대한 포인터입니다. 기본적으로 배열은 비어 있습니다. 원하는 경우 대체 주체 이름을 이러한 확장 중 하나로 지정할 수 있습니다.

반환 값

함수가 성공하면 생성된 인증서를 가리키는 PCCERT_CONTEXT 변수가 반환됩니다. 이 함수가 실패하면 NULL을 반환합니다. 확장된 오류 정보는 GetLastError를 호출합니다.

설명

pEndTime은 유효한 날짜여야 하며 사용자가 제공하지 않으면 자동으로 생성되므로 이 API가 윤일에 호출될 때 보상할 앱 논리 없이 예기치 않은 오류가 쉽게 발생할 수 있습니다. 자세한 내용은 윤년 준비를 참조하세요.

요구 사항

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

추가 정보

CERT_EXTENSION

CERT_EXTENSIONS

CRYPT_ALGORITHM_IDENTIFIER

CertStrToName

CryptEncodeObject

GetLastError

PCCERT_CONTEXT

Systemtime