CertVerifyCTLUsage 函式 (wincrypt.h)
CertVerifyCTLUsage函式會尋找已簽署且有效的憑證信任清單, (CTL) 包含主體的使用識別碼,來驗證主體是否信任指定的使用方式。 憑證主體可由憑證 內容 或任何唯一識別碼來識別,例如主體憑證的 SHA1 雜湊 。
語法
BOOL CertVerifyCTLUsage(
[in] DWORD dwEncodingType,
[in] DWORD dwSubjectType,
[in] void *pvSubject,
[in] PCTL_USAGE pSubjectUsage,
[in] DWORD dwFlags,
[in, optional] PCTL_VERIFY_USAGE_PARA pVerifyUsagePara,
[in, out] PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus
);
參數
[in] dwEncodingType
指定所使用的編碼類型。 目前只會使用X509_ASN_ENCODING和PKCS_7_ASN_ENCODING;不過,未來可以新增其他編碼類型。 針對目前的編碼類型,請使用
X509_ASN_ENCODING |PKCS_7_ASN_ENCODING。
[in] dwSubjectType
如果 dwSubjectType 參數設定為 CTL_CERT_SUBJECT_TYPE, pvSubject 會指向 CERT_CONTEXT 結構。 系統會檢查結構的 SubjectAlgorithm 成員,以判斷主體身分識別的標記法。 一開始,僅支援 SHA1 和 MD5 雜湊作為 SubjectAlgorithm的值。 適當的雜湊屬性是從 CERT_CONTEXT 結構取得。
如果 dwSubjectType 參數設定為 CTL_ANY_SUBJECT_TYPE, pvSubject 會指向 CTL_ANY_SUBJECT_INFO 結構。 這個結構的 SubjectAlgorithm 成員必須符合 CTL 的演算法類型, 而 SubjectIdentifier 成員必須符合其中一個 CTL 專案。
如果 dwSubjectType 設定為上述任一值,則不會使用 dwEncodingType 。
[in] pvSubject
與 dwSubjectType 參數搭配使用的值。
[in] pSubjectUsage
用來指定主旨預定使用方式 之CTL_USAGE 結構的指標。
[in] dwFlags
如果未設定CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG,則可以取代CTL_VERIFY_USAGE_PARA中rghCtlStore所指定的其中一個存放區中不再有效的 CTL。 取代時,會在pVerifyUsageStatus的dwFlags成員中設定CERT_VERIFY_UPDATED_CTL_FLAG。 如果設定此旗標,即使已針對存放區中的 CTL 收到有效且不再有效時間的 CTL,也不會進行更新。
如果已設定CERT_VERIFY_TRUSTED_SIGNERS_FLAG,則只會搜尋 rghSignerStore 在 CTL_VERIFY_USAGE_PARA 中指定的簽署者存放區來尋找簽署者。 否則,簽署者存放區會提供其他來源來尋找簽署者的憑證。 如需詳細資訊,請參閱<備註>。
如果已設定CERT_VERIFY_NO_TIME_CHECK_FLAG,則不會檢查 CTL 的時間有效性。 否則,它們是 。
如果已設定CERT_VERIFY_ALLOW_MORE_USAGE_FLAG,除了 pSubjectUsage所指定的識別碼之外,CTL 還可以包含使用識別碼。 否則,找到的 CTL 將不會包含其他使用識別碼。
[in, optional] pVerifyUsagePara
CTL_VERIFY_USAGE_PARA結構的指標,指定要搜尋的存放區,以尋找 CTL 和包含可接受 CTL 簽署者的存放區。 設定 ListIdentifier 成員會進一步限制搜尋。
[in, out] pVerifyUsageStatus
CTL_VERIFY_USAGE_STATUS結構的指標。 結構的 cbSize 成員必須設定為結構的大小,以位元組為單位,而且所有其他欄位都必須設定為零, 才能呼叫 CertVerifyCTLUsage 。 如需詳細資訊,請參閱 CTL_VERIFY_USAGE_STATUS。
傳回值
如果主體信任指定的使用方式,則會傳回 TRUE 。 否則會傳回 FALSE 。 GetLastError 可以傳回下列其中一個錯誤碼。
值 | 描述 |
---|---|
|
找不到 DLL 或匯出的函式來驗證主體使用方式。 |
|
呼叫的函式無法對主體執行使用方式檢查。 |
|
伺服器已離線;因此,呼叫的函式無法完成使用方式檢查。 |
|
在 CTL 中找不到主體。 |
|
找不到信任的簽署者,可驗證訊息或信任清單的簽章。 |
pVerifyUsageStatus所指向之CTL_VERIFY_USAGE_PARAdwError成員會設定為相同的錯誤碼。
備註
CertVerifyCTLUsage 是函式的發送器,可使用 物件識別碼 (OID) 來安裝。 首先,它會嘗試尋找符合pSubjectUsage所指向CLT_USAGE結構中第一個使用物件識別碼的 OID 函式。 如果失敗,它會使用預設 的 CertDllVerifyCTLUsage 函式。
Cryptnet.dll 中的 CertDllVerifyCTLUsage函式可以使用 OID 來安裝;它具有下列屬性:
- 如果 cTL 存放區是由pVerifyUsagePara中的rghCtlStore指定,則只會搜尋這些存放區來尋找 CTL。 否則,系統會搜尋信任系統存放區來尋找 CTL。
- 如果已設定CERT_VERIFY_TRUSTED_SIGNERS_FLAG,則只會搜尋pVerifyUsagePara中rghSignerStore所指定的簽署者存放區,以尋找對應至簽署者簽發者和序號的憑證。 否則,CTL 訊息的存放區、 rghSignerStore 在 pVerifyUsagePara中指定的簽署者存放區、信任系統存放區、CA 系統存放區、ROOT 和 軟體發行者憑證 (SPC) 系統存放區會搜尋以尋找簽署者的憑證。 不論是哪一種情況,找到的憑證中的公開金鑰都用來驗證 CTL的簽章。
- 如果 CTL 具有 Set NextUpdate 成員,但未設定CERT_VERIFY_NO_TIME_CHECK,則會驗證其時間有效性。
- 如果從存放區取得的 CTL 有不正確時間,就會嘗試取得有效時間的版本。 CertDllVerifyCTLUsage函式會使用CTL 的 NextUpdateLocation屬性或NextUpdateLocation延伸模組,或搜尋簽署者的資訊以取得NextUpdateLocation屬性。
規格需求
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | wincrypt.h |
程式庫 | Crypt32.lib |
Dll | Crypt32.dll |