CertGetCertificateContextProperty 函式 (wincrypt.h)

CertGetCertificateContextProperty 函式會擷取包含在 憑證內容擴充屬性中的資訊,

語法

BOOL CertGetCertificateContextProperty(
  [in]      PCCERT_CONTEXT pCertContext,
  [in]      DWORD          dwPropId,
  [out]     void           *pvData,
  [in, out] DWORD          *pcbData
);

參數

[in] pCertContext

包含要擷取之屬性之 憑證CERT_CONTEXT 結構的指標。

[in] dwPropId

要擷取的屬性。 下表列出目前定義的標識碼和要 pvData 中傳回的數據類型。

CERT_ACCESS_STATE_PROP_ID

pvData的數據類型:DWORD 值的指標。

傳回 DWORD 值,指出是否保存憑證的寫入作業。 如果憑證位於記憶體存放區或以唯讀模式開啟的登錄存放區中,則不會設定 DWORD 值。

CERT_AIA_URL_RETRIEVED_PROP_ID

此標識碼是保留的。

CERT_ARCHIVED_KEY_HASH_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

針對憑證內容傳回先前儲存的加密密鑰 哈希

CERT_ARCHIVED_PROP_ID

pvData的資料類型:NULL。 如果 CertGetCertificateContextProperty 函式傳回 true,則 CERT_CONTEXT存在指定的屬性標識符。

表示在列舉期間略過憑證。 找到具有此屬性集之憑證的明確搜尋作業,例如用來尋找具有特定哈希或序號之憑證的憑證。 pvData 中沒有任何數據與這個屬性相關聯。

CERT_AUTHORITY_INFO_ACCESS_PROP_ID

此標識碼是保留的。

CERT_AUTO_ENROLL_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回以 Null 終止的 Unicode 字串,此字串會為憑證自動註冊的憑證類型命名。

CERT_AUTO_ENROLL_RETRY_PROP_ID

此標識碼是保留的。

CERT_BACKED_UP_PROP_ID

此標識碼是保留的。

CERT_CA_DISABLE_CRL_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

針對 證書頒發機構單位(CA)所使用的憑證,停用 證書吊銷清單 (CRL) 擷取。 如果 CA 憑證包含這個屬性,它也必須包含 CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 屬性。

CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

包含 在線憑證狀態通訊協定 (OCSP) URL 的清單,以用於 CA 憑證所簽發的憑證。 數位內容是 X509_AUTHORITY_INFO_ACCESS結構的 抽象語法表示法一 (ASN.1)編碼位元組,其中 pszAccessMethod 設定為 szOID_PKIX_OCSP

CERT_CROSS_CERT_DIST_POINTS_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

跨憑證的位置。 目前,此標識碼僅適用於憑證,不適用於CRL或 憑證信任清單(CCL)。

BYTE 數位含 ASN.1 編碼的 CROSS_CERT_DIST_POINTS_INFO 結構,方法是使用 CryptDecodeObject 函式搭配 lpszStuctType 參數的 X509_CROSS_CERT_DIST_POINTS 值。

CERT_CTL_USAGE_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回位元組陣列,其中包含 ASN.1 編碼 CTL_USAGE 結構。

CERT_DATE_STAMP_PROP_ID

pvData的數據類型:FILETIME 結構的指標。

將憑證新增至存放區的時間。

CERT_DESCRIPTION_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回憑證 UI 所顯示的屬性。 此屬性可讓使用者描述憑證的使用。

CERT_EFS_PROP_ID

此標識碼是保留的。

CERT_ENHKEY_USAGE_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回包含 ASN.1 編碼 CERT_ENHKEY_USAGE 結構的位元組陣列。 此結構包含增強密鑰使用方式的數位,物件標識碼 (OIDs),每個標識元都會指定有效的憑證使用方式。

CERT_ENROLLMENT_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

包含 RequestID、CADNSName、CAName 和 DisplayName 之擱置要求的註冊資訊。 資料格式的定義如下:

位元組 內容
前 4 個字節 擱置的要求標識碼
接下來 4 個字節 CADNSName 大小,以字元為單位,包括終止 Null 字元,後面接著具有終止 Null 字元的 CADNSName 字串
接下來 4 個字節 CAName 大小,以字元為單位,包括終止 Null 字元,後面接著具有終止 Null 字元的 CAName 字串
接下來 4 個字節 DisplayName 大小,以字元為單位,包括終止 Null 字元,後面接著具有終止 Null 字元的 DisplayName 字串

CERT_EXTENDED_ERROR_INFO_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回 Null 終止的 Unicode 字元字串,其中包含憑證內容的擴充錯誤資訊。

CERT_FORTEZZA_DATA_PROP_ID

此標識碼是保留的。

CERT_FRIENDLY_NAME_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回 Null 終止的 Unicode 字元字串,其中包含憑證的顯示名稱。

CERT_HASH_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回SHA1哈希。 如果哈希不存在,則會使用 cryptHashCertificate 函式 來計算該哈希。

CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID

pvData的數據類型:HCRYPTPROV_OR_NCRYPT_KEY_HANDLE 數據類型的指標。

傳回 HCRYPTPROVNCRYPT_KEY_HANDLE 選擇。

CERT_HCRYPTPROV_TRANSFER_PROP_ID

傳回與憑證相關聯的密碼編譯 API (CAPI) 密鑰句柄。 呼叫端負責釋放句柄。 當內容被釋放時,它將不會釋出。 屬性值會在傳回之後移除。 如果您在具有 CNG 索引鍵的內容上呼叫此屬性,則會傳回 CRYPT_E_NOT_FOUND

CERT_IE30_RESERVED_PROP_ID

此標識碼是保留的。

CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

與用來簽署此憑證之 私鑰相關聯的 公鑰 MD5 哈希。

CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

此憑證中籤發者名稱和序號的 MD5 哈希。

CERT_KEY_CONTEXT_PROP_ID

pvData的數據類型:CERT_KEY_CONTEXT 結構的指標。

傳回 CERT_KEY_CONTEXT 結構。

CERT_KEY_IDENTIFIER_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

如果不存在,請搜尋 szOID_SUBJECT_KEY_IDENTIFIER 延伸模組。 如果失敗,則會在憑證的 SubjectPublicKeyInfo 成員上完成 SHA1 哈希,以產生標識符值。

CERT_KEY_PROV_HANDLE_PROP_ID

pvData的數據類型:HCRYPTPROV 值的指標。

傳回從 CERT_KEY_CONTEXT_PROP_ID 取得的提供者句柄。

CERT_KEY_PROV_INFO_PROP_ID

pvData的數據類型:CRYPT_KEY_PROV_INFO 結構的指標。

傳回 CRYPT_KEY_PROV_INFO 結構的指標。

CERT_KEY_SPEC_PROP_ID

pvData的數據類型:DWORD 值的指標。

傳回 DWORD 值,指定如果存在,則為從 CERT_KEY_CONTEXT_PROP_ID取得的私鑰。 否則,如果CERT_KEY_PROV_INFO_PROP_ID存在,則它是 dwKeySpec的來源。

CERT_MD5_HASH_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回 MD5 哈希。 如果哈希不存在,則會使用 cryptHashCertificate 函式 來計算該哈希。

CERT_NCRYPT_KEY_HANDLE_PROP_ID

pvData的數據類型:NCRYPT_KEY_HANDLE 數據類型的指標。

傳回適用的 CERT_NCRYPT_KEY_SPEC 選擇。

CERT_NCRYPT_KEY_HANDLE_TRANSFER_PROP_ID

傳回與憑證相關聯的 CNG 金鑰句柄。 呼叫端負責釋放句柄。 當內容被釋放時,它將不會釋出。 屬性值會在傳回之後移除。 如果您在具有舊版 (CAPI) 索引鍵的內容上呼叫此屬性,則會傳回 CRYPT_E_NOT_FOUND

CERT_NEW_KEY_PROP_ID

此標識碼是保留的。

CERT_NEXT_UPDATE_LOCATION_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回 ASN.1 編碼 CERT_ALT_NAME_INFO 結構。

CERT_NEXT_UPDATE_LOCATION_PROP_ID目前僅搭配 CTL 使用。

CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID

此標識碼是保留的。

CERT_OCSP_CACHE_PREFIX_PROP_ID

此標識碼是保留的。

CERT_OCSP_RESPONSE_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回此憑證的編碼 OCSP 回應。

CERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID

pvData的數據類型:以 Null 終止的 Unicode 字串指標。

傳回代表憑證公鑰演演算法和位長度的 L"<PUBKEY><BITLENGTH>" 字串。 支援下列 <PUBKEY> 演算法:

  • L“RSA” (BCRYPT_RSA_ALGORITHM)
  • L“DSA” (BCRYPT_DSA_ALGORITHM)
  • L“ECDSA” (SSL_ECDSA_ALGORITHM)

Windows 8 和 Windows Server 2012: 支援此屬性開始。

CERT_PUBKEY_ALG_PARA_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

針對支援演算法參數繼承的公鑰,傳回 ASN.1 編碼的 PublicKey 演算法參數。 針對 數位簽名標準 (DSS),會傳回使用 CryptEncodeObject 函式編碼的參數。 只有在定義CMS_PKCS7時,才會使用這個屬性。

CERT_PUBKEY_HASH_RESERVED_PROP_ID

此標識碼是保留的。

CERT_PVK_FILE_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回 Null 終止的 Unicode 寬字元字串,其中包含包含與憑證公鑰相關聯之私鑰的檔名。

CERT_RENEWAL_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回更新憑證的哈希。

CERT_REQUEST_ORIGINATOR_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回 Null 終止的 Unicode 字串,其中包含憑證內容要求來源的 DNS 計算機名稱。

CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回編碼 CERT_POLICIES_INFO 結構的指標,其中包含內容之跟證書的應用程式原則。 此屬性可以使用 CryptDecodeObject 函式譯碼,並將 lpszStructType 參數設定為 X509_CERT_POLICIES,並將 dwCertEncodingType 參數設定為 X509_ASN_ENCODINGORPKCS_7_ASN_ENCODING的組合。

CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID

此標識碼是保留的。

CERT_SHA1_HASH_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回SHA1哈希。 如果哈希不存在,則會使用 cryptHashCertificate 函式 來計算該哈希。

CERT_SHA1_SHA256_HASH_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是52個字節、SHA1 哈希的20個字節,而SHA256哈希為32個字節。

傳回SHA1哈希和SHA256哈希的組合。 如果哈希不存在,則會使用 cryptHashCertificate 函式 來計算該哈希。

CERT_SHA256_HASH_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回SHA256哈希。 如果哈希不存在,則會使用 cryptHashCertificate 函式 來計算該哈希。

CERT_SIGN_HASH_CNG_ALG_PROP_ID

pvData的數據類型:以 Null 終止的 Unicode 字串指標。

傳回代表憑證簽章的 L"<SIGNATURE>/<HASH>" 字串。 <SIGNATURE> 值會識別 CNG 公鑰演演算法。 支援下列演算法:

  • L“RSA” (BCRYPT_RSA_ALGORITHM)
  • L“DSA” (BCRYPT_DSA_ALGORITHM)
  • L“ECDSA” (SSL_ECDSA_ALGORITHM)

<HASH> 值會識別 CNG 哈希演算法。 支援下列演算法:

  • L“MD5” (BCRYPT_MD5_ALGORITHM)
  • L“SHA1” (BCRYPT_SHA1_ALGORITHM)
  • L“SHA256” (BCRYPT_SHA256_ALGORITHM)
  • L“SHA384” (BCRYPT_SHA384_ALGORITHM)
  • L“SHA512” (BCRYPT_SHA512_ALGORITHM)

以下是常見的範例:

  • L“RSA/SHA1”
  • L“RSA/SHA256”
  • L“ECDSA/SHA256”

Windows 7 和 Windows Server 2008 R2: 此屬性的支持開始。

CERT_SIGNATURE_HASH_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回簽章哈希。 如果哈希不存在,則會使用 CryptHashToBeSigned 函式來計算該哈希。 哈希的長度是SHA的20個字節,MD5為16個字節。

CERT_SMART_CARD_DATA_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回已編碼智慧卡數據的指標。 在呼叫 CertGetCertificateContextProperty之前,您可以使用這個常數來擷取智慧卡憑證,方法是使用 CertFindCertificateInStore函式,並將 pvFindPara 參數設定為 CERT_SMART_CARD_DATA_PROP_ID,並將 dwFindType 參數設定為 CERT_FIND_PROPERTY

CERT_SMART_CARD_ROOT_INFO_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回編碼 CRYPT_SMART_CARD_ROOT_INFO 結構的指標。

CERT_SOURCE_LOCATION_PROP_ID

此標識碼是保留的。

CERT_SOURCE_URL_PROP_ID

此標識碼是保留的。

CERT_SUBJECT_DISABLE_CRL_PROP_ID

此標識碼是保留的。

CERT_SUBJECT_INFO_ACCESS_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回憑證內容的主體資訊存取延伸,做為編碼 CERT_SUBJECT_INFO_ACCESS 結構。

CERT_SUBJECT_NAME_MD5_HASH_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回憑證內容之編碼主體名稱的 MD5 哈希。

CERT_SUBJECT_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID

此標識碼是保留的。

CERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_ID

pvData的數據類型:DWORD 值的指標。

傳回憑證中公鑰的長度,以位為單位。

Windows 8 和 Windows Server 2012: 支援此屬性開始。

CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID

pvData的數據類型:BYTE 值的陣列指標。 這個陣列的大小是在 參數中指定。

傳回此憑證公鑰的 MD5 哈希。

針對所有使用者定義屬性標識碼,pvData 指向 BYTE 值的陣列。

如需每個屬性標識碼的詳細資訊,請參閱 CertSetCertificateContextPropertydwPropId 參數的檔。

[out] pvData

要接收數據之緩衝區的指標,dwPropId所決定。 傳回之結構的成員所指向的結構也會在基底結構之後傳回。 因此, 中所包含的大小通常超過基底結構的大小。

這個參數可以 NULL,以設定記憶體配置資訊的大小。 如需詳細資訊,請參閱 擷取未知長度的數據

[in, out] pcbData

DWORD 值的指標,指定 pvData 參數所指向之緩衝區的大小,以位元組為單位。 當函式傳回時,DWORD 值會包含要儲存在緩衝區中的位元元組數目。

若要在運行時間取得緩衝區的必要大小,請將 pvData 參數 NULL 傳遞,並將此參數指向的值設定為零。 如果 pvData 參數未 NULL,且 中指定的大小小於包含數據所需的位元元組數,則函式會失敗,GetLastError 傳回 ERROR_MORE_DATA,而且所需的大小會放在 參數所指向的變數中。

注意

處理緩衝區中傳回的數據時,應用程式必須使用所傳回數據的實際大小。 實際大小可能稍微小於輸入上所指定緩衝區的大小。 (在輸入時,緩衝區大小通常會指定夠大,以確保最大可能的輸出數據符合緩衝區。在輸出時,此參數所指向的變數會更新,以反映複製到緩衝區的數據實際大小。

傳回值

如果函式成功,函式會傳回 true

如果函式失敗,它會 FALSE傳回 。 如需擴充錯誤資訊,請呼叫 getLastError

一些可能的錯誤碼如下:

傳回碼 描述
CRYPT_E_NOT_FOUND 憑證沒有指定的 屬性。
ERROR_MORE_DATA 如果 pvData 參數指定的緩衝區不夠大,無法保存傳回的數據,則函式會設定 ERROR_MORE_DATA 程式代碼,並將所需的緩衝區大小以位元組為單位儲存在 所指向的變數中。

來自所呼叫函式的錯誤 CryptHashCertificate 可以傳播至此函式。

言論

屬性不會儲存在憑證內。 一般而言,在收到憑證回應之後,它們會與憑證相關聯,然後與存放區中的憑證一起儲存。 基於安全性考慮,建議您在儲存屬性值之前先驗證屬性值,並且只儲存資訊屬性,例如使用者存放區中的 CERT_FRIENDLY_NAME_PROP_ID 值。 所有其他屬性類型都應該儲存在本機計算機存放區中。

您的程式代碼可以使用宏來評估憑證內容的哈希類別。 如需詳細資訊,請參閱 CertSetCertificateContextProperty

例子

如需使用此函式的範例,請參閱 範例 C 程式:取得和設定憑證屬性範例 C 程式:列出存放區中的憑證

要求

要求 價值
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
支援的最低伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平臺 窗戶
標頭 wincrypt.h
連結庫 Crypt32.lib
DLL Crypt32.dll

另請參閱

CERT_KEY_CONTEXT

CertCreateCertificateContext

CertSetCertificateContextProperty

CryptHashCertificate

CryptHashToBeSigned

擴充屬性函式