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。 取代時,會在pVerifyUsageStatusdwFlags成員中設定CERT_VERIFY_UPDATED_CTL_FLAG。 如果設定此旗標,即使已針對存放區中的 CTL 收到有效且不再有效時間的 CTL,也不會進行更新。

如果已設定CERT_VERIFY_TRUSTED_SIGNERS_FLAG,則只會搜尋 rghSignerStoreCTL_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 。 否則會傳回 FALSEGetLastError 可以傳回下列其中一個錯誤碼。

描述
CRYPT_E_NO_VERIFY_USAGE_DLL
找不到 DLL 或匯出的函式來驗證主體使用方式。
CRYPT_E_NO_VERIFY_USAGE_CHECK
呼叫的函式無法對主體執行使用方式檢查。
CRYPT_E_VERIFY_USAGE_OFFLINE
伺服器已離線;因此,呼叫的函式無法完成使用方式檢查。
CRYPT_E_NOT_IN_CTL
在 CTL 中找不到主體。
CRYPT_E_NO_TRUSTED_SIGNER
找不到信任的簽署者,可驗證訊息或信任清單的簽章。
 

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,則只會搜尋pVerifyUsagePararghSignerStore所指定的簽署者存放區,以尋找對應至簽署者簽發者和序號的憑證。 否則,CTL 訊息的存放區、 rghSignerStorepVerifyUsagePara中指定的簽署者存放區、信任系統存放區、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

另請參閱

CTL_VERIFY_USAGE_PARA

CTL_VERIFY_USAGE_STATUS

CertFindCTLInStore

CertFindSubjectInCTL

使用 CTL 的驗證函式