IX509CertificateRequestPkcs7::InitializeFromCertificate 方法 (certenroll.h)
InitializeFromCertificate 方法會使用現有的憑證來初始化憑證要求。 憑證包含在位元組陣列中,其編碼方式是使用 可辨別編碼規則 (DER) ,如抽象語法表示法一 (ASN.1) 標準所定義。 DER 編碼位元組陣組是由純二進位序列或 Unicode 編碼的字串來表示。
語法
HRESULT InitializeFromCertificate(
[in] X509CertificateEnrollmentContext Context,
[in] VARIANT_BOOL RenewalRequest,
[in] BSTR strCertificate,
[in] EncodingType Encoding,
[in] X509RequestInheritOptions InheritOptions
);
參數
[in] Context
X509CertificateEnrollmentContext 列舉值,指定要求的憑證是否適用於使用者、計算機或代表計算機的系統管理員。
[in] RenewalRequest
VARIANT_BOOL,指出結束實體是否要求更新 strCertificate 參數所識別的憑證。
[in] strCertificate
包含 DER 編碼憑證的 BSTR 變數。
從 Windows 7 和 Windows Server 2008 R2 開始,您可以指定憑證指紋或序號,而不是編碼的憑證。 這樣做會導致函式搜尋適當的本地存儲以尋找相符的憑證。 請記住下列幾點:
- BSTR 必須是偶數十六進位數位。
- 忽略十六進位組之間的空格符。
- Encoding 參數必須設定為 XCN_CRYPT_STRING_HEXRAW。
- Context 參數會決定是否搜尋本機或計算機存放區或兩者。
- 如果需要私鑰,則只會搜尋個人和要求存放區。
- 如果不需要私鑰,也會搜尋根和中繼 CA 存放區。
[in] Encoding
EncodingType 列舉值,指定套用至 DER 編碼憑證的編碼類型。 預設值 為 XCN_CRYPT_STRING_BASE64。
[in] InheritOptions
X509RequestInheritOptions 列舉值,指定如何從現有的憑證建立憑證要求物件。 您可以選擇下列其中一個值,以指定如何繼承金鑰。 默認值為 InheritDefault。
值 | 意義 |
---|---|
|
未指定提供者和金鑰繼承。 |
|
建立新的密鑰,但會繼承預設的密碼編譯提供者。 |
|
建立新的密鑰,但會繼承用來建立現有憑證的密碼編譯提供者。 |
|
繼承私鑰和公鑰。 |
|
只繼承公鑰。 |
您也可以使用位 AND 運算,將索引鍵繼承值與下列值的任何組合結合。
值 | 意義 |
---|---|
|
繼承更新憑證。 指定此旗標會設定 ICertPropertyRenewal 值。 |
|
繼承證書範本。 |
|
繼承主體辨別名稱。 |
|
從憑證繼承相關的延伸模組。 |
|
繼承 SubjectAlternativeName 延伸模組。 |
|
繼承有效期間。 |
您也可以指定 InheritNone ,以防止上表中的任何旗標 (旗標與索引鍵繼承無關,) 預設不會實作。 如果您指定 InheritNone ,但也指定與金鑰繼承無關的旗標,方法會傳回 E_INVALIDARG。
如果您將 InheritOptions 參數設定為零 (0) 或指定 InheritDefault ,且未指定密鑰繼承值,則預設會使用 InheritNewSimilarKey 。
如果您將 InheritOptions 參數設定為零 (0) 或指定 InheritDefault ,且未指定任何與索引鍵繼承無關的值,則預設會設定下列旗標:
- InheritSubjectFlag
- InheritExtensionsFlag
- InheritValidityPeriodFlag
- 如果憑證包含範本延伸模組) ,則 InheritTemplateFlag (
- 如果用戶端正在更新憑證,則 InheritRenewalCertificateFlag ()
傳回值
如果函式成功,函式會傳回 S_OK。
如果函式失敗,它會傳回 指出錯誤的 HRESULT 值。 可能的值包括 (但不限於) 下表中的這些值。 如需常見錯誤碼的清單,請參閱 一般 HRESULT 值。
傳回碼 | Description |
---|---|
|
憑證要求對象已經初始化。 |
備註
InitializeFromCertificate 方法會藉由執行下列動作來驗證 InheritOptions 參數中指定的選項,並初始化新的 PKCS #7 要求物件:
- 從憑證、註冊內容和繼承輸入上指定的選項,建立 PKCS #10 要求物件。 PKCS #10 物件繼承:
- 如果範本存在於原始憑證中,而且您已設定 InheritTemplateFlag 值,則為範本。
- 如果您指定 InheritSubjectFlag,則為主體辨別名稱。
- 如果您指定 InheritSubjectAltNameFlag,則為主體別名。
- 如果您指定 InheritExtensionsFlag,則為延伸模組。
- 如果要更新原始憑證,請將原始憑證複製到新 PKCS #10 要求的 RenewCertificate 屬性。
- 如果要更新,請從原始憑證建立 ISignerCertificate ,並在 SignerCertificate 屬性上設定它。
- 將 PKCS #10 要求設定為內部要求物件。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | certenroll.h |
Dll | CertEnroll.dll |