CertSetCertificateContextProperty 函式 (wincrypt.h)

CertSetCertificateContextProperty 函式會為指定的 憑證內容設定擴充屬性

語法

BOOL CertSetCertificateContextProperty(
  [in] PCCERT_CONTEXT pCertContext,
  [in] DWORD          dwPropId,
  [in] DWORD          dwFlags,
  [in] const void     *pvData
);

參數

[in] pCertContext

CERT_CONTEXT 結構的指標。

[in] dwPropId

要設定的屬性。 dwPropId 的值會決定 pvData 參數的類型和內容。 目前定義的標識碼及其相關 pvData 類型如下。

附註CRYPT_HASH_BLOBCRYPT_DATA_BLOB 會在 CRYPT_INTEGER_BLOB 主題中說明。
 

CERT_ACCESS_STATE_PROP_ID

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

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

CERT_AIA_URL_RETRIEVED_PROP_ID

此標識碼是保留的。

CERT_ARCHIVED_KEY_HASH_PROP_ID

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

此屬性會儲存憑證內容的加密金鑰 哈希

CERT_ARCHIVED_PROP_ID

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

表示列舉期間會略過 憑證。 具有此屬性集的憑證仍可透過明確的搜尋作業找到,例如尋找具有特定 哈希 或特定序號的憑證。 這個屬性可以設定為空 BLOB{0,NULL}

CERT_AUTHORITY_INFO_ACCESS_PROP_ID

此標識碼是保留的。

CERT_AUTO_ENROLL_PROP_ID

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

使用 [自動註冊] 註冊憑證之後所設定的屬性。 pvData 所指向的 CRYPT_DATA_BLOB 結構 包含已自動註冊憑證之憑證類型的 Null 終止 Unicode 名稱。 任何後續對自動註冊憑證的呼叫,會檢查此屬性,以判斷是否已註冊憑證。

CERT_AUTO_ENROLL_RETRY_PROP_ID

此標識碼是保留的。

CERT_BACKED_UP_PROP_ID

此標識碼是保留的。

CERT_CA_DISABLE_CRL_PROP_ID

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

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

CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID

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

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

CERT_CROSS_CERT_DIST_POINTS_PROP_ID

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

設定跨憑證的位置。 此值僅適用於憑證,不適用於 證書吊銷清單憑證信任清單(CCL)。 CRYPT_DATA_BLOB 結構包含 抽象語法表示法一(ASN.1)編碼 CROSS_CERT_DIST_POINTS_INFO 結構,該結構使用 CryptEncodeObject 函式搭配 lpszStuctType 參數的X509_CROSS_CERT_DIST_POINTS值進行編碼。

CERT_CTL_USAGE_PROP_ID

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

CRYPT_DATA_BLOB 結構包含 ASN.1 編碼 CTL_USAGE 結構。 此結構會使用 CryptEncodeObject 函式搭配設定X509_ENHANCED_KEY_USAGE值來編碼。

CERT_DATE_STAMP_PROP_ID

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

這個屬性會設定憑證新增至存放區的時間。

CERT_DESCRIPTION_PROP_ID

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

憑證 UI 所設定和顯示的屬性。 此屬性可讓使用者描述憑證的使用。

CERT_EFS_PROP_ID

此標識碼是保留的。

CERT_ENHKEY_USAGE_PROP_ID

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

屬性,表示 pvData 參數指向包含 ASN.1 編碼 CERT_ENHKEY_USAGE 結構的 CRYPT_DATA_BLOB 結構。 此結構會使用 CryptEncodeObject 函式搭配設定X509_ENHANCED_KEY_USAGE值來編碼。

CERT_ENROLLMENT_PROP_ID

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

包含 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的數據類型:CRYPT_DATA_BLOB 結構的指標。

這個屬性會設定字串,其中包含憑證內容的擴充錯誤資訊。

CERT_FORTEZZA_DATA_PROP_ID

此標識碼是保留的。

CERT_FRIENDLY_NAME_PROP_ID

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

CRYPT_DATA_BLOB 結構包含憑證的顯示名稱。

CERT_HASH_PROP_ID

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

這個屬性是由呼叫 CertGetCertificateContextProperty 函式來隱含設定。

CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID

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

這個屬性會呼叫 NCryptIsKeyHandle,以判斷這是否為 NCRYPT_KEY_HANDLE。 若為 NCRYPT_KEY_HANDLE,則設定 CERT_NCRYPT_KEY_HANDLE_PROP_ID;否則,它會設定 CERT_KEY_PROV_HANDLE_PROP_ID

CERT_HCRYPTPROV_TRANSFER_PROP_ID

設定與憑證相關聯的 CAPI 金鑰句柄。

CERT_IE30_RESERVED_PROP_ID

此標識碼是保留的。

CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID

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

這個屬性會設定與用來簽署此憑證之 私鑰 相關聯的 公鑰 MD5哈希

CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID

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

CRYPT_DATA_BLOB 結構包含此憑證中籤發者名稱和序號的 MD5 哈希。

CERT_KEY_CONTEXT_PROP_ID

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

結構會指定憑證的私鑰。 它同時包含私鑰 HCRYPTPROV 和金鑰規格。 如需 hCryptProv 成員和 dwFlags 設定的詳細資訊,請參閱本主題稍後的 CERT_KEY_PROV_HANDLE_PROP_ID。

附注 可以針對這個屬性新增更多 CERT_KEY_CONTEXT 結構成員。 如果是,cbSize 成員值將會據以調整。 cbSize 成員必須設定為 CERT_KEY_CONTEXT 結構的大小。
 

CERT_KEY_IDENTIFIER_PROP_ID

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

這個屬性通常是透過呼叫 CertGetCertificateContextProperty 函式來隱含設定。

CERT_KEY_PROV_HANDLE_PROP_ID

pvData的數據類型:HCRYPTPROV 值。

設定憑證私鑰 HCRYPTPROV 句柄。 如果 CERT_KEY_CONTEXT 結構存在,hCryptProv 成員就會更新。 如果不存在,則會使用 dwKeySpec 建立,並由 CERT_KEY_PROV_INFO_PROP_ID 初始化。 如果未設定CERT_STORE_NO_CRYPT_RELEASE_FLAG,hCryptProv 值會在 屬性設定為 NULL 或最終釋放 CERT_CONTEXT 結構時隱含釋放。

CERT_KEY_PROV_INFO_PROP_ID

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

結構會指定憑證的私鑰。

CERT_KEY_SPEC_PROP_ID

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

指定私鑰的 DWORD 值。 如果 CERT_KEY_CONTEXT 結構存在,則會更新 dwKeySpec 成員。 如果沒有,則會使用 hCryptProv 建立, 設定為零。

CERT_MD5_HASH_PROP_ID

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

這個屬性是由呼叫 CertGetCertificateContextProperty 函式來隱含設定。

CERT_NCRYPT_KEY_HANDLE_PROP_ID

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

此屬性會將憑證私鑰的 NCRYPT_KEY_HANDLE,並將 dwKeySpec 設定為 CERT_NCRYPT_KEY_SPEC

CERT_NCRYPT_KEY_HANDLE_TRANSFER_PROP_ID

設定與憑證相關聯的 CNG 金鑰句柄。

CERT_NEW_KEY_PROP_ID

此標識碼是保留的。

CERT_NEXT_UPDATE_LOCATION_PROP_ID

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

CRYPT_DATA_BLOB 結構包含 ASN.1 編碼的 CERT_ALT_NAME_INFO 結構,該結構會使用設定X509_ALTERNATE_NAME值設定的 CryptEncodeObject 函式來編碼。

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的數據類型:CRYPT_DATA_BLOB 結構的指標。

此屬性會設定來自此憑證 CERT_SERVER_OCSP_RESPONSE_CONTEXT 的編碼 在線憑證狀態通訊協定 (OCSP) 回應。

CERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID

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

呼叫 CertGetCertificateContextProperty 函式,以隱含方式設定此屬性。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP:不支援此標識符。

CERT_PUBKEY_ALG_PARA_PROP_ID

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

此屬性與支援演算法參數繼承的公鑰搭配使用。 數據 BLOB 包含 ASN.1 編碼的 PublicKey 演算法參數。 對於 DSS,這些參數是使用 CryptEncodeObject 函式來編碼的參數。 只有在定義CMS_PKCS7時,才會使用這個參數。

CERT_PUBKEY_HASH_RESERVED_PROP_ID

此標識碼是保留的。

CERT_PVK_FILE_PROP_ID

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

CRYPT_DATA_BLOB 結構會指定包含與憑證公鑰相關聯之私鑰的檔名。 在 CRYPT_DATA_BLOB 結構內,pbData 成員是 null 終止 Unicode 寬字元字串的指標,而 cbData 成員表示字符串的長度。

CERT_RENEWAL_PROP_ID

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

這個屬性會指定更新憑證的哈希。

CERT_REQUEST_ORIGINATOR_PROP_ID

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

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

CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID

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

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

CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID

此標識碼是保留的。

CERT_SIGN_HASH_CNG_ALG_PROP_ID

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

呼叫 CertGetCertificateContextProperty 函式,以隱含方式設定此屬性。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP:不支援此標識符。

CERT_SHA1_HASH_PROP_ID

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

這個屬性是由呼叫 CertGetCertificateContextProperty 函式來隱含設定。

CERT_SIGNATURE_HASH_PROP_ID

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

如果簽章哈希不存在,則會使用 cryptHashToBeSigned 函式來計算簽章哈希。 pvData 指向現有的或計算哈希。 通常,哈希的長度是SHA的20個字節,MD5則為16個字節。

CERT_SMART_CARD_DATA_PROP_ID

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

此屬性會設定智慧卡憑證內容的智慧卡數據屬性。

CERT_SMART_CARD_ROOT_INFO_PROP_ID

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

此屬性會設定智慧卡跟證書內容的資訊屬性。

CERT_SOURCE_LOCATION_PROP_ID

此標識碼是保留的。

CERT_SOURCE_URL_PROP_ID

此標識碼是保留的。

CERT_SUBJECT_DISABLE_CRL_PROP_ID

此標識碼是保留的。

CERT_SUBJECT_INFO_ACCESS_PROP_ID

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

此屬性會將憑證內容的主體資訊存取延伸模組設定為編碼 CERT_SUBJECT_INFO_ACCESS 結構。

CERT_SUBJECT_NAME_MD5_HASH_PROP_ID

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

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

CERT_SUBJECT_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID

此標識碼是保留的。

CERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_ID

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

呼叫 CertGetCertificateContextProperty 函式,以隱含方式設定此屬性。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP:不支援此標識符。

CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID

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

這個屬性會設定此憑證公鑰的 MD5 哈希。

pvDataCRYPT_DATA_BLOB 結構的指標。

使用者可以使用從 CERT_FIRST_USER_PROP_IDCERT_LAST_USER_PROP_IDDWORD 值,定義其他 dwPropId 類型。 針對所有使用者定義 dwPropId 類型,pvData 指向編碼 CRYPT_DATA_BLOB 結構。

[in] dwFlags

您可以為 CERT_KEY_PROV_HANDLE_PROP_ID 或 CERT_KEY_CONTEXT_PROP_ID dwPropId 屬性設定CERT_STORE_NO_CRYPT_RELEASE_FLAG。

如果已設定CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG值,則會忽略任何提供者寫入錯誤,而且一律會設定快取內容的屬性。

如果已設定CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG,則不會保存任何內容屬性集。

[in] pvData

dwPropId值所決定之數據類型的指標。

Note 針對任何 dwPropId,將 pvData 設定為 NULL 會刪除屬性。
 

傳回值

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

如果函式失敗,函式會傳回 FALSE。 如需擴充錯誤資訊,請呼叫 getLastError。 其中一個可能的錯誤碼如下。

傳回碼 描述
E_INVALIDARG
屬性無效。 指定的標識碼大於 0x0000FFFF,或針對 CERT_KEY_CONTEXT_PROP_ID 屬性,cbSize 成員,在 CERT_KEY_CONTEXT 結構中指定無效。

言論

如果屬性已經存在,則會取代其舊值。

您的程式代碼可以使用宏來評估憑證內容的哈希類別。 Wincrypt.h 標頭會為此定義下列宏。 CertSetCertificateContextProperty 函式會在內部使用這些宏。

IS_CERT_HASH_PROP_ID(X)IS_PUBKEY_HASH_PROP_ID(X)IS_CHAIN_HASH_PROP_ID(X) 每個宏都會以 dwPropId (X) 值作為輸入,並評估為布爾值。 下表顯示 dwPropId 值,這些值會評估為每個宏 TRUE

宏觀 如果 dwPropId,評估為 true
IS_CERT_HASH_PROP_IDdwPropId
CERT_SHA1_HASH_PROP_ID
CERT_MD5_HASH_PROP_ID、 或
CERT_SIGNATURE_HASH_PROP_ID
IS_PUBKEY_HASH_PROP_IDdwPropId
CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID
CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID
IS_CHAIN_HASH_PROP_IDdwPropId
CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID
CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID
CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID、 或
CERT_SUBJECT_NAME_MD5_HASH_PROP_ID
 

IS_STRONG_SIGN_PROP_ID(x) 宏會在 dwPropId 參數 中設定 CERT_SIGN_HASH_CNG_ALG_PROP_IDCERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_IDCERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID 屬性時,評估為 true TRUE。

例子

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

要求

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

另請參閱

CERT_ALT_NAME_INFO

CERT_CONTEXT

CERT_ENHKEY_USAGE

CERT_KEY_CONTEXT

CROSS_CERT_DIST_POINTS_INFO

CRYPT_DATA_BLOB

CRYPT_HASH_BLOB

CRYPT_KEY_PROV_INFO

CTL_USAGE

CertGetCertificateContextProperty

CertSetCRLContextProperty

CryptEncodeObject

CryptHashToBeSigned

擴充屬性函式