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
 
注意 如果 dwIssuerType是CRYPT_VERIFY_CERT_SIGN_ISSUER_Null ,而簽章演算法是雜湊演算法,則簽章應該只包含未加密的雜湊八位集。 在此無簽章案例中,只能指定 CRYPT_VERIFY_CERT_SIGN_ISSUER_Null 。 如果指定任何其他 dwIssuerType ,驗證會失敗, 而且 GetLastError 會傳回E_INVALIDARG。
 

[in] pvIssuer

dwIssuerType值所表示之型別結構的指標。 結構包含驗證簽章所需的公開金鑰存取權。

[in] dwFlags

修改函式行為的旗標。 這可以是零或位 OR 的下列值。

意義
CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG
0x00000001
如果您設定此旗標並 CryptVerifyCertificateSignatureEx 偵測到 MD2 或 MD4 演算法,則函式會傳回 FALSE 並將 GetLastError 設定為 NTE_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 來釋放 結構。

傳回值

如果成功或零,則傳回非零。

如需擴充錯誤資訊,請呼叫 GetLastError

注意 來自所呼叫函式 CryptCreateHashCryptImportKeyCryptVerifySignatureCryptHashData 的錯誤可能會傳播至此函式。
 
失敗時,此函式會導致從 GetLastError傳回下列錯誤碼。
傳回碼 描述
ERROR_FILE_NOT_FOUND
不正確憑證編碼類型。 目前僅支援 X509_ASN_ENCODING
NTE_BAD_ALGID
簽章演算法的物件 識別碼 (OID) 不會對應至已知或支援的 雜湊 演算法。
NTE_BAD_SIGNATURE
簽章無效。
 

如果函式失敗, GetLastError 可能會傳回 抽象語法標記法一 (ASN.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