IX509CertificateRequestPkcs7::InitializeFromCertificate メソッド (certenroll.h)

InitializeFromCertificate メソッドは、既存の証明書を使用して証明書要求を初期化します。 証明書は、抽象構文表記法 1 (ASN.1) 標準で定義されているDistinguished Encoding Rules (DER) を使用してエンコードされたバイト配列に含まれています。 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

end エンティティが strCertificate パラメーターで識別された証明書の更新を要求しているかどうかを示すVARIANT_BOOL

[in] strCertificate

DER でエンコードされた証明書を含む BSTR 変数。

Windows 7 および Windows Server 2008 R2 以降では、エンコードされた証明書ではなく、証明書のサムプリントまたはシリアル番号を指定できます。 これにより、関数は適切なローカル ストアで一致する証明書を検索します。 以下の点に注意してください。

  • BSTR は偶数の 16 進数である必要があります。
  • 16 進数のペア間の空白は無視されます。
  • Encoding パラメーターは、XCN_CRYPT_STRING_HEXRAWに設定する必要があります。
  • Context パラメーターは、ローカルまたはコンピューターのストア、またはその両方を検索するかどうかを決定します。
  • 秘密キーが必要な場合は、個人用ストアと要求ストアのみが検索されます。
  • 秘密キーが必要ない場合は、ルートおよび中間 CA ストアも検索されます。

[in] Encoding

DER でエンコードされた証明書に適用されるエンコードの種類を指定する EncodingType 列挙値。 既定値は 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 (0) に設定するか、InheritDefault を指定し、キーの継承値を指定しない場合、既定では InheritNewSimilarKey が使用されます。

InheritOptions パラメーターを 0 (0) に設定するか、InheritDefault を指定し、キーの継承に関連しない値を指定しない場合、既定では次のフラグが設定されます。

  • InheritSubjectFlag
  • InheritExtensionsFlag
  • InheritValidityPeriodFlag
  • InheritTemplateFlag (証明書にテンプレート拡張機能が含まれている場合)
  • InheritRenewalCertificateFlag (クライアントが証明書を更新している場合)

戻り値

関数が成功した場合、関数は S_OKを返します。

関数が失敗した場合は、エラーを示す HRESULT 値を返します。 有効な値を次の表に示しますが、これ以外にもあります。 一般的なエラー コードの一覧については、「 共通 HRESULT 値」を参照してください。

リターン コード 説明
ERROR_ALREADY_INITIALIZED
証明書要求オブジェクトは既に初期化されています。

注釈

InitializeFromCertificate メソッドは、InheritOptions パラメーターで指定されたオプションを検証し、次のアクションを実行して新しい PKCS #7 要求オブジェクトを初期化します。

  • 証明書、登録コンテキスト、および入力で指定された継承オプションから PKCS #10 要求オブジェクトを作成します。 PKCS #10 オブジェクトは次を継承します。
    • 元の証明書にテンプレートが存在し、 InheritTemplateFlag 値を設定した場合のテンプレート。
    • InheritSubjectFlag を指定した場合のサブジェクト識別名。
    • InheritSubjectAltNameFlag を指定した場合のサブジェクトの別名。
    • InheritExtensionsFlag を指定した場合の拡張機能。
  • 元の証明書を更新する場合は、新しい PKCS #10 要求の RenewalCertificate プロパティにコピーします。
  • 更新する場合は、元の証明書から ISignerCertificate を作成し、 SignerCertificate プロパティに設定します。
  • PKCS #10 要求を内部要求オブジェクトとして設定します。

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー certenroll.h
[DLL] CertEnroll.dll

こちらもご覧ください

IX509CertificateRequestPkcs7