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中包含的訊息編碼類型識別碼。
此參數可以是下列目前定義的憑證編碼類型。
值 | 意義 |
---|---|
|
指定 X.509 憑證編碼。 |
[in] dwSubjectType
主旨類型。 此參數可以是下列其中一種主體類型。
值 | 意義 |
---|---|
|
pvSubject 是 CRYPT_DATA_BLOB 結構的指標。 |
|
pvSubject 是 CCERT_CONTEXT 結構的指標。 |
|
pvSubject 是 CCRL_CONTEXT 結構的指標。 |
|
pvSubject 是 OCSP_BASIC_SIGNED_RESPONSE_INFO 結構的指標。
Windows Server 2003 和 Windows XP: 不支援此主旨類型。 |
[in] pvSubject
dwSubjectType所指示之型別結構的指標,其中包含要驗證的簽章。
[in] dwIssuerType
簽發者類型。 此參數可以是下列其中一種簽發者類型。
值 | 意義 |
---|---|
|
pvIssuer 是 CERT_PUBLIC_KEY_INFO 結構的指標。 |
|
pvIssuer 是 CCERT_CONTEXT 結構的指標。 |
|
pvIssuer 是 CCERT_CHAIN_CONTEXT 結構的指標。 |
|
pvIssuer 必須是 Null。 |
[in] pvIssuer
dwIssuerType值所表示之型別結構的指標。 結構包含驗證簽章所需的公開金鑰存取權。
[in] dwFlags
修改函式行為的旗標。 這可以是零或位 OR 的下列值。
值 | 意義 |
---|---|
|
如果您設定此旗標並 CryptVerifyCertificateSignatureEx 偵測到 MD2 或 MD4 演算法,則函式會傳回 FALSE 並將 GetLastError 設定為 NTE_BAD_ALGID。 簽章仍然經過驗證,但這個錯誤組合可讓呼叫端知道已使用 MD2 或 MD4 演算法,以決定是否信任或拒絕簽章。
Windows 8 和 Windows Server 2012: 此旗標的支援隨即開始。 |
|
在成功驗證之後,在 pvSubject 參數所指向的主體上設定強式簽章屬性。
憑證內容上會設定下列屬性:
注意只有在dwSubjectType參數中指定CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL時,才適用此旗標。
|
|
傳回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時,這個旗標才適用。
|
[in, out, optional] pvExtra
如果dwFlags參數設定為CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG,則為CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO結構的指標。
您必須呼叫 CryptMemFree 來釋放 結構。
傳回值
如果成功或零,則傳回非零。
如需擴充錯誤資訊,請呼叫 GetLastError。
傳回碼 | 描述 |
---|---|
|
不正確憑證編碼類型。 目前僅支援 X509_ASN_ENCODING 。 |
|
簽章演算法的物件 識別碼 (OID) 不會對應至已知或支援的 雜湊 演算法。 |
|
簽章無效。 |
如果函式失敗, 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 |