CryptVerifyCertificateSignatureEx 함수(wincrypt.h)

CryptVerifyCertificateSignatureEx 함수는 발급자의 공개 키를 사용하여 주체 인증서, 인증서 해지 목록, 인증서 요청 또는 keygen 요청의 서명을 확인합니다. 함수는 프라이빗 키에 액세스할 필요가 없습니다.

구문

BOOL CryptVerifyCertificateSignatureEx(
  [in]                HCRYPTPROV_LEGACY hCryptProv,
  [in]                DWORD             dwCertEncodingType,
  [in]                DWORD             dwSubjectType,
  [in]                void              *pvSubject,
  [in]                DWORD             dwIssuerType,
  [in]                void              *pvIssuer,
  [in]                DWORD             dwFlags,
  [in, out, optional] void              *pvExtra
);

매개 변수

[in] hCryptProv

이 매개 변수는 사용되지 않으며 NULL로 설정해야 합니다.

Windows Server 2003 및 Windows XP: 서명을 확인하는 데 사용되는 암호화 서비스 공급자 에 대한 핸들입니다. 이 매개 변수의 데이터 형식은 HCRYPTPROV입니다.

특정 암호화 공급자를 전달하는 강력한 이유가 없는 한 NULL이 전달됩니다. NULL을 전달하면 기본 RSA 또는 DSS 공급자가 획득됩니다.

[in] dwCertEncodingType

주체를 암호화하는 데 사용된 인증서 인코딩 형식 입니다. 이 값의 높은 WORD에 포함된 메시지 인코딩 형식 식별자는 이 함수에서 무시됩니다.

이 매개 변수는 현재 정의된 다음 인증서 인코딩 유형일 수 있습니다.

의미
X509_ASN_ENCODING
1(0x1)
X.509 인증서 인코딩을 지정합니다.

[in] dwSubjectType

제목 형식입니다. 이 매개 변수는 다음 제목 형식 중 하나일 수 있습니다.

의미
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB
1(0x1)
pvSubjectCRYPT_DATA_BLOB 구조체에 대한 포인터입니다.
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT
2(0x2)
pvSubjectCCERT_CONTEXT 구조체에 대한 포인터입니다.
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL
3(0x3)
pvSubjectCCRL_CONTEXT 구조체에 대한 포인터입니다.
CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE
4(0x4)
pvSubjectOCSP_BASIC_SIGNED_RESPONSE_INFO 구조체에 대한 포인터입니다.

Windows Server 2003 및 Windows XP: 이 제목 유형은 지원되지 않습니다.

[in] pvSubject

확인할 서명이 포함된 dwSubjectType 으로 표시된 형식의 구조체에 대한 포인터입니다.

[in] dwIssuerType

발급자 유형입니다. 이 매개 변수는 다음 발급자 유형 중 하나일 수 있습니다.

의미
CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY
1(0x1)
pvIssuerCERT_PUBLIC_KEY_INFO 구조체에 대한 포인터입니다.
CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT
2(0x2)
pvIssuerCCERT_CONTEXT 구조체에 대한 포인터입니다.
CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN
3(0x3)
pvIssuerCCERT_CHAIN_CONTEXT 구조체에 대한 포인터입니다.
CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL
4(0x4)
pvIssuer는NULL이어야 합니다.
 
참고dwIssuerTypeCRYPT_VERIFY_CERT_SIGN_ISSUER_NULL 서명 알고리즘이 해시 알고리즘인 경우 서명은 암호화되지 않은 해시 옥텟만 포함해야 합니다. 이 암호화되지 않은 서명 사례에는 CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL 만 지정할 수 있습니다. 다른 dwIssuerType 을 지정하면 확인이 실패하고 GetLastError가 E_INVALIDARG 반환합니다.
 

[in] pvIssuer

dwIssuerType 값으로 표시된 형식의 구조체에 대한 포인터입니다. 구조체에는 서명을 확인하는 데 필요한 공개 키에 대한 액세스 권한이 포함됩니다.

[in] dwFlags

함수 동작을 수정하는 플래그입니다. 이 값은 다음 값의 0 또는 비트 OR 일 수 있습니다.

의미
CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG
0x00000001
이 플래그를 설정하고 CryptVerifyCertificateSignatureEx 가 MD2 또는 MD4 알고리즘을 검색하면 함수는 FALSE 를 반환하고 GetLastErrorNTE_BAD_ALGID 설정합니다. 서명은 여전히 확인되지만 이 오류 조합을 사용하면 이제 MD2 또는 MD4 알고리즘이 사용되었음을 알고 있는 호출자가 서명을 신뢰할지 거부할지 여부를 결정할 수 있습니다.

Windows 8 및 Windows Server 2012: 이 플래그에 대한 지원이 시작됩니다.

CRYPT_VERIFY_CERT_SIGN_SET_STRONG_PROPERTIES_FLAG
0x00000002
pvSubject 매개 변수가 가리키는 제목에 대해 확인에 성공한 후 강력한 서명 속성을 설정합니다.

다음 속성은 인증서 컨텍스트에서 설정됩니다.

  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
CRL 컨텍스트에서 설정되는 속성은 다음과 같습니다.
  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
  • CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID
참고 이 플래그는 dwSubjectType 매개 변수에 CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL 지정된 경우에만 적용됩니다.
 
Windows 8 및 Windows Server 2012: 이 플래그에 대한 지원이 시작됩니다.
CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG
0x00000004
pvExtra 매개 변수의 CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO 구조체에 대한 포인터를 반환합니다. 구조체에는 퍼블릭 키의 길이(비트)와 사용된 서명 및 해시 알고리즘의 이름이 포함됩니다.

구조를 해제하려면 CryptMemFree 를 호출해야 합니다. CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO 구조에 메모리를 할당할 수 없는 경우 이 함수는 성공적으로 반환되지만 pvExtra 매개 변수를 NULL로 설정합니다.

참고 이 플래그는 dwSubjectType 매개 변수에 CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE 지정된 경우에만 적용됩니다.
 
Windows 8 및 Windows Server 2012: 이 플래그에 대한 지원이 시작됩니다.

[in, out, optional] pvExtra

dwFlags 매개 변수가 CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG 설정된 경우 CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO 구조체에 대한 포인터입니다.

구조를 해제하려면 CryptMemFree 를 호출해야 합니다.

반환 값

성공하면 0이 아닌 값을 반환하고 그렇지 않으면 0을 반환합니다.

확장된 오류 정보는 GetLastError를 호출합니다.

참고 호출된 함수 CryptCreateHash, CryptImportKey, CryptVerifySignatureCryptHashData 의 오류가 이 함수로 전파될 수 있습니다.
 
오류가 발생하면 이 함수로 인해 GetLastError에서 다음 오류 코드가 반환됩니다.
반환 코드 설명
ERROR_FILE_NOT_FOUND
인증서 인코딩 유형이 잘못되었습니다. 현재 는 X509_ASN_ENCODING 만 지원됩니다.
NTE_BAD_ALGID
서명 알고리즘의 OID( 개체 식별자 )는 알려진 해시 알고리즘이나 지원되는 해시 알고리즘에 매핑되지 않습니다.
NTE_BAD_SIGNATURE
서명이 잘못되었습니다.
 

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

설명

주체 버퍼에는 인코딩된 BLOB 또는 인증서 또는 CRL에 대한 컨텍스트가 포함될 수 있습니다. 인증서 컨텍스트의 경우 인증서의 공개 키 매개 변수가 누락되고 이러한 매개 변수를 DSS 공개 키 매개 변수와 같이 인증서 발급자에서 상속할 수 있는 경우 컨텍스트의 CERT_PUBKEY_ALG_PARA_PROP_ID 속성은 유효한 서명에 대한 발급자의 공개 키 알고리즘 매개 변수로 업데이트됩니다.

요구 사항

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

추가 정보

CryptVerifyCertificateSignature