IX509CertificateRequestPkcs7
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
IX509CertificateRequestPkcs7 インターフェイスは PKCS を表します
メソッド 8
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
テンプレートを使用して証明書要求を初期化します。(IX509CertificateRequestPkcs7.InitializeFromTemplateName)
| Context | X509CertificateEnrollmentContext | in | X509CertificateEnrollmentContext 列挙値です。この値は、要求する証明書がエンドユーザー、コンピューター、またはコンピューターの代理として動作する管理者のいずれを対象とするかを指定します。 |
| strTemplateName | LPWSTR | in | BSTR 変数です。この変数には、Active Directory に表示されるテンプレートの Common Name (CN)、またはドット区切り 10 進数の オブジェクト識別子 を格納します。 |
戻り値
関数が成功した場合は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| リターンコード/値 | 説明 |
|---|---|
| 証明書要求オブジェクトは既に初期化されています。 |
解説(Remarks)
InitializeFromTemplateName メソッドは、PKCS #7 要求オブジェクトを作成し、このメソッドが呼び出される前に存在していた値を次のプロパティに設定します。
このメソッドは、次のコレクションを作成します。- ICryptAttributes コレクション。
- IX509Extensions コレクション。
- IObjectIds コレクション (既定の XCN_OID_KEY_USAGE および XCN_OID_BASIC_CONSTRAINTS2 オブジェクト識別子が設定されたもの)。
- 新しい要求から抑制する属性および拡張の OID を格納する、空の IObjectIds コレクション。
続いて、このメソッドはテンプレートを調べ、次の処理を実行します。
- テンプレートで指定された拡張を IX509Extensions コレクションに追加します。
- 既定のクリティカル拡張 (XCN_OID_KEY_USAGE および XCN_OID_BASIC_CONSTRAINTS2) がクリティカルでないとテンプレートが示している場合、それらをコレクションから削除します。テンプレートによってクリティカルとしてマークされた OID は追加されます。
- テンプレートが対称アルゴリズムをサポートしている場合、SmimeCapabilities プロパティを設定します。
- テンプレートが個別の署名アルゴリズム OID を必要とする場合、AlternateSignatureAlgorithm プロパティを設定します。
- IX509SignatureInformation オブジェクトを作成します。
- テンプレートでアルゴリズムが指定されている場合、ハッシュアルゴリズム OID を作成し、それを IX509SignatureInformation オブジェクトに設定します。
- テンプレートでアルゴリズムが指定されている場合、非対称暗号化アルゴリズム OID を作成し、それを IX509SignatureInformation オブジェクトに設定します。
- テンプレートの設定から、次の IX509PrivateKey プロパティを設定します。
CSPInformations プロパティが NULL の場合、このメソッドは、コンピューターにインストールされているプロバイダーから ICspInformations コレクションを作成します。
最後に、このメソッドは、初期化された PKCS #10 要求を内部要求オブジェクトとして設定します。
既存の証明書を使用して証明書要求を初期化します。(IX509CertificateRequestPkcs7.InitializeFromCertificate)
| Context | X509CertificateEnrollmentContext | in | X509CertificateEnrollmentContext 列挙値です。この値は、要求する証明書がエンドユーザー、コンピューター、またはコンピューターの代理として動作する管理者のいずれを対象とするかを指定します。 | ||||||||||||||
| RenewalRequest | VARIANT_BOOL | in | strCertificate パラメーターで識別される証明書の更新をエンドエンティティが要求しているかどうかを示す VARIANT_BOOL です。 | ||||||||||||||
| strCertificate | LPWSTR | in | DER エンコードされた証明書を格納する BSTR 変数です。 Windows 7 および Windows Server 2008 R2 以降では、エンコードされた証明書の代わりに、証明書の拇印 (サムプリント) またはシリアル番号を指定できます。これにより、関数は一致する証明書を適切なローカルストアから検索します。次の点に注意してください。
| ||||||||||||||
| Encoding | EncodingType | in | EncodingType 列挙値です。この値は、DER エンコードされた証明書に適用されるエンコードの種類を指定します。既定値は XCN_CRYPT_STRING_BASE64 です。 | ||||||||||||||
| InheritOptions | X509RequestInheritOptions | in | X509RequestInheritOptions 列挙値です。この値は、既存の証明書から証明書要求オブジェクトを作成する方法を指定します。次の値のいずれかを選択して、キーを継承する方法を指定できます。既定値は InheritDefault です。 また、ビット単位の AND 演算を使用して、キー継承値を次の値の任意の組み合わせと結合することもできます。
InheritNone を指定すると、前の表に示したフラグ (キー継承に関連しないフラグ) が既定で適用されないようにすることもできます。InheritNone を指定し、かつキー継承に関連しないフラグも指定した場合、このメソッドは E_INVALIDARG を返します。 InheritOptions パラメーターに 0 を設定するか InheritDefault を指定し、キー継承値を指定しなかった場合、既定で InheritNewSimilarKey が使用されます。 InheritOptions パラメーターに 0 を設定するか InheritDefault を指定し、キー継承に関連しない値をいずれも指定しなかった場合、既定で次のフラグが設定されます。
|
戻り値
関数が成功した場合は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| リターンコード | 説明 |
|---|---|
| 証明書要求オブジェクトは既に初期化されています。 |
解説(Remarks)
InitializeFromCertificate メソッドは、InheritOptions パラメーターで指定されたオプションを検証し、次の処理を実行して新しい PKCS #7 要求オブジェクトを初期化します。
- 入力で指定された証明書、登録 (エンロール) コンテキスト、および継承オプションから、PKCS #10 要求オブジェクトを作成します。この PKCS #10 オブジェクトは、次を継承します。
- 元の証明書にテンプレートが存在し、InheritTemplateFlag 値を設定した場合、そのテンプレート。
- InheritSubjectFlag を指定した場合、サブジェクトの識別名。
- InheritSubjectAltNameFlag を指定した場合、サブジェクトの別名。
- InheritExtensionsFlag を指定した場合、拡張。
- 元の証明書を更新する場合、その証明書を新しい PKCS #10 要求の RenewalCertificate プロパティにコピーします。
- 元の証明書を更新する場合、その証明書から ISignerCertificate を作成し、SignerCertificate プロパティに設定します。
- PKCS #10 要求を内部要求オブジェクトとして設定します。
内部の PKCS から証明書要求を初期化します
| pInnerRequest | IX509CertificateRequest* | inoptional | 要求を表す IX509CertificateRequest インターフェイスへのポインターです。 |
戻り値
関数が成功した場合は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| リターンコード/値 | 説明 |
|---|---|
| 入力で指定された要求オブジェクトは PKCS #10 要求ではありません。 | |
|
要求オブジェクトは既に初期化されています。 |
解説(Remarks)
このメソッドは、入力で指定された PKCS #10 要求を内部要求オブジェクトとして設定します。
既存の署名済みまたは未署名の PKCS をデコードします (IX509CertificateRequestPkcs7.InitializeDecode)
| strEncodedData | LPWSTR | in | DER エンコードされた要求を格納する BSTR 変数です。 |
| Encoding | EncodingType | in | EncodingType 列挙値です。この値は、DER エンコードされた要求を格納する入力文字列に適用される Unicode エンコードの種類を指定します。既定値は XCN_CRYPT_STRING_BASE64 です。 |
戻り値
関数が成功した場合は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。取り得る値には以下の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| リターンコード/値 | 説明 |
|---|---|
|
要求オブジェクトは既に初期化されています。 |
解説(Remarks)
InitializeDecode メソッドは、次を行います。
- 入力で指定された PKCS #7 要求をデコードします。
- デコードしたオブジェクトを使用して、次のコレクションを持つ内部 PKCS #10 要求を作成します。
- 空の ICryptAttributes コレクション。
- 空の IX509Extensions コレクション。
- クリティカル拡張用の空の IObjectIds コレクション。
- 新しい要求から抑制する属性および拡張の OID を格納する、空の IObjectIds コレクション。
- デコードした拡張を IX509Extensions コレクションに追加します。
- デコードした属性を ICryptAttributes コレクションに追加します。
- ClientId プロパティを設定します。
- TemplateObjectId プロパティを設定します。
- 元の PKCS #7 要求の署名を使用して、新しい ISignerCertificate オブジェクトを作成します。
- ISignerCertificate オブジェクトから IX509SignatureInformation オブジェクトを取得します。
- 元の署名アルゴリズムとハッシュアルゴリズムを使用して、新しい IX509SignatureInformation オブジェクトを初期化します。
- PKCS #10 要求を内部要求オブジェクトとして設定します。
既定では、InitializeDecode メソッドは、デコードする証明書要求がエンドユーザー向けであると想定します。Windows 8 および Windows Server 2012 以降では、この既定の動作を変更できます。IX509CertificateRequestPkcs7 インターフェイスのインスタンスを作成した後、Encoding パラメーターに XCN_CRYPT_STRING_BINARY を設定し、strEncodedData パラメーターに次の値のいずれかを設定して InitializeDecode を呼び出します。
| 値 | 説明 |
|---|---|
| L"ContextMachine" | エンコードされた証明書要求はコンピューター向けです。 |
| L"ContextUser" | エンコードされた証明書要求はエンドユーザー向けです。 |
| L"ContextAdministratorForceMachine" | エンコードされた証明書は、コンピューターの代理として動作する管理者によって要求されます。 |
その後、エンコードされた証明書を strEncodedData 引数に設定して、InitializeDecode メソッドを再度呼び出します。
証明書を要求するエンドエンティティの Security Account Manager (SAM) 名を格納する文字列を指定または取得します。(Get)
| pValue | LPWSTR* | out | 代理要求における要求者(対象ユーザー)の名前を文字列として受け取るポインタである。 |
解説(Remarks)
このプロパティは、登録 (エンロール) エージェントが別のユーザーの代理として登録を行う場合にのみ使用されます。このプロパティを呼び出す前に、PKCS #7 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。
証明書を要求するエンドエンティティの Security Account Manager (SAM) 名を格納する文字列を指定または取得します。(Put)
| Value | LPWSTR | in | 代理要求における要求者(対象ユーザー)の名前を文字列で指定する。 |
解説(Remarks)
このプロパティは、登録 (エンロール) エージェントが別のユーザーの代理として登録を行う場合にのみ使用されます。このプロパティを呼び出す前に、PKCS #7 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。
証明書要求への署名に使用する証明書を指定または取得します。(Get)
| ppValue | ISignerCertificate** | out | PKCS#7 要求に署名する署名証明書を表す ISignerCertificate オブジェクトを受け取るポインタである。 |
解説(Remarks)
このプロパティを呼び出す前に、PKCS #7 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。
証明書要求への署名に使用する証明書を指定または取得します。(Put)
| pValue | ISignerCertificate* | inoptional | PKCS#7 要求に署名する署名証明書を表す ISignerCertificate オブジェクトを渡す。 |
解説(Remarks)
このプロパティを呼び出す前に、PKCS #7 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IX509CertificateRequestPkcs7 "{728AB344-217D-11DA-B2A4-000E7BBB2B09}" #usecom global IX509CertificateRequestPkcs7 IID_IX509CertificateRequestPkcs7 "{}" #comfunc global IX509CertificateRequestPkcs7_InitializeFromTemplateName 32 int,wstr #comfunc global IX509CertificateRequestPkcs7_InitializeFromCertificate 33 int,int,wstr,int,int #comfunc global IX509CertificateRequestPkcs7_InitializeFromInnerRequest 34 sptr #comfunc global IX509CertificateRequestPkcs7_InitializeDecode 35 wstr,int #comfunc global IX509CertificateRequestPkcs7_get_RequesterName 36 var #comfunc global IX509CertificateRequestPkcs7_put_RequesterName 37 wstr #comfunc global IX509CertificateRequestPkcs7_get_SignerCertificate 38 sptr #comfunc global IX509CertificateRequestPkcs7_put_SignerCertificate 39 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IX509CertificateRequestPkcs7 "{728AB344-217D-11DA-B2A4-000E7BBB2B09}" #usecom global IX509CertificateRequestPkcs7 IID_IX509CertificateRequestPkcs7 "{}" #comfunc global IX509CertificateRequestPkcs7_InitializeFromTemplateName 32 int,wstr #comfunc global IX509CertificateRequestPkcs7_InitializeFromCertificate 33 int,int,wstr,int,int #comfunc global IX509CertificateRequestPkcs7_InitializeFromInnerRequest 34 sptr #comfunc global IX509CertificateRequestPkcs7_InitializeDecode 35 wstr,int #comfunc global IX509CertificateRequestPkcs7_get_RequesterName 36 sptr #comfunc global IX509CertificateRequestPkcs7_put_RequesterName 37 wstr #comfunc global IX509CertificateRequestPkcs7_get_SignerCertificate 38 sptr #comfunc global IX509CertificateRequestPkcs7_put_SignerCertificate 39 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。