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

意義
InheritDefault
未指定提供者和金鑰繼承。
InheritNewDefaultKey
建立新的密鑰,但會繼承預設的密碼編譯提供者。
InheritNewSimilarKey
建立新的密鑰,但會繼承用來建立現有憑證的密碼編譯提供者。
InheritPrivateKey
繼承私鑰和公鑰。
InheritPublicKey
只繼承公鑰。
 

您也可以使用位 AND 運算,將索引鍵繼承值與下列值的任何組合結合。

意義
InheritRenewalCertificateFlag
繼承更新憑證。 指定此旗標會設定 ICertPropertyRenewal 值。
InheritTemplateFlag
繼承證書範本。
InheritSubjectFlag
繼承主體辨別名稱。
InheritExtensionsFlag
從憑證繼承相關的延伸模組。
InheritSubjectAltNameFlag
繼承 SubjectAlternativeName 延伸模組。
InheritValidityPeriodFlag
繼承有效期間。
 

您也可以指定 InheritNone ,以防止上表中的任何旗標 (旗標與索引鍵繼承無關,) 預設不會實作。 如果您指定 InheritNone ,但也指定與金鑰繼承無關的旗標,方法會傳回 E_INVALIDARG

如果您將 InheritOptions 參數設定為零 (0) 或指定 InheritDefault ,且未指定密鑰繼承值,則預設會使用 InheritNewSimilarKey

如果您將 InheritOptions 參數設定為零 (0) 或指定 InheritDefault ,且未指定任何與索引鍵繼承無關的值,則預設會設定下列旗標:

  • InheritSubjectFlag
  • InheritExtensionsFlag
  • InheritValidityPeriodFlag
  • 如果憑證包含範本延伸模組) ,則 InheritTemplateFlag (
  • 如果用戶端正在更新憑證,則 InheritRenewalCertificateFlag ()

傳回值

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

如果函式失敗,它會傳回 指出錯誤的 HRESULT 值。 可能的值包括 (但不限於) 下表中的這些值。 如需常見錯誤碼的清單,請參閱 一般 HRESULT 值

傳回碼 Description
ERROR_ALREADY_INITIALIZED
憑證要求對象已經初始化。

備註

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

另請參閱

IX509CertificateRequestPkcs7