다음을 통해 공유


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