Win32 API 日本語リファレンス
ホームSecurity.Cryptography.Certificates › IX509CertificateRequestCmc

IX509CertificateRequestCmc

COMIDispatch (デュアル)
IDispatch を実装(デュアルインターフェース)。HSP では comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。
IID728ab345-217d-11da-b2a4-000e7bbb2b09継承元IX509CertificateRequestPkcs7呼び出し名前(IDispatch) または vtbl自前メソッド開始 vtbl40

公式ドキュメント

CMC (Certificate Management Message over CMS) 証明書要求を表します。

メソッド 23

vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。

vtbl 40 HRESULT InitializeFromInnerRequestTemplateName(IX509CertificateRequest* pInnerRequest, LPWSTR strTemplateName)

InitializeFromInnerRequestTemplateName メソッドは、内部要求オブジェクトとテンプレートから証明書要求を初期化します。

pInnerRequestIX509CertificateRequest*inoptional内部要求オブジェクトを表す IX509CertificateRequest インターフェイスへのポインター。これは PKCS #10 要求または CMC 要求のいずれかです。
strTemplateNameLPWSTRinActive Directory に表示されるテンプレートの共通名 (CN)、またはドット区切りの十進数形式の オブジェクト識別子 を格納する BSTR 変数。

戻り値

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

関数が失敗した場合は、エラーを示す HRESULT 値を返します。とり得る値には次の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、共通の HRESULT 値 を参照してください。

リターンコード/値 説明
CRYPT_E_INVALID_MSG_TYPE
pInnerRequest パラメーターに渡す要求オブジェクトは、PKCS #10 要求または CMC 要求である必要があります。
HRESULT_FROM_WIN32(ERROR_ALREADY_INITIALIZED)
要求オブジェクトは既に初期化されています。

解説(Remarks)

テンプレートを指定すると、内部要求に含まれていない可能性のある情報を外部要求オブジェクトに追加できます。たとえば、内部要求に必要な拡張が含まれていない場合は、それを含むテンプレートを指定できます。

InitializeFromInnerRequestTemplateName メソッドは次の処理を行います。

vtbl 41 HRESULT get_TemplateObjectId(IObjectId** ppValue)

証明書要求の作成に使用されたテンプレートのオブジェクト識別子 (OID) を取得します。(IX509CertificateRequestCmc.get_TemplateObjectId)

ppValueIObjectId**out要求に関連付けられた証明書テンプレートの OID を表す IObjectId オブジェクトを受け取るポインタである。

解説(Remarks)

このオブジェクト識別子は、テンプレートの Active Directory 共通名 (CN) に対応する OID になります。このプロパティを呼び出す前に、IX509CertificateRequestCmc オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。

vtbl 42 HRESULT get_NullSigned(VARIANT_BOOL* pValue)

証明書要求のプライマリ署名が null 署名 (null-signed) かどうかを指定する Boolean 値を取得します。

pValueVARIANT_BOOL*out要求が NULL 署名(署名なし)であるかどうかを表す VARIANT_BOOL を受け取るポインタである。

解説(Remarks)

null 署名の証明書要求は、実際には署名されていません。つまり、SHA-1 などのダイジェストアルゴリズムを使用して要求のダイジェストを計算することはできますが、RSA などの公開キーアルゴリズムで暗号化されることはありません。これは、証明機関を相互認証する場合によくあるように、秘密キーが利用できないときに使用できます。

このプロパティを呼び出す前に、CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 43 HRESULT get_CryptAttributes(ICryptAttributes** ppValue)

省略可能な証明書属性の ICryptAttributes コレクションを取得します。(IX509CertificateRequestCmc.get_CryptAttributes)

ppValueICryptAttributes**out要求に含まれる暗号化属性のコレクション ICryptAttributes を受け取るポインタである。

解説(Remarks)

このプロパティを呼び出す前に、CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 44 HRESULT get_NameValuePairs(IX509NameValuePairs** ppValue)

証明書要求に関連付けられた IX509NameValuePairs コレクションを取得します。

ppValueIX509NameValuePairs**out要求に関連付けられた名前と値のペアのコレクション IX509NameValuePairs を受け取るポインタである。

解説(Remarks)

CMC 要求オブジェクトにおける名前と値のペアの例については、IX509NameValuePair を参照してください。このプロパティを呼び出す前に、CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 45 HRESULT get_X509Extensions(IX509Extensions** ppValue)

証明書要求に含まれる拡張のコレクションを取得します。(IX509CertificateRequestCmc.get_X509Extensions)

ppValueIX509Extensions**out要求に含まれる X.509 拡張のコレクション IX509Extensions を受け取るポインタである。

解説(Remarks)

このプロパティを呼び出す前に、CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 46 HRESULT get_CriticalExtensions(IObjectIds** ppValue)

クリティカルとしてマークされたバージョン 3 証明書拡張を識別する IObjectIds コレクションを取得します。(IX509CertificateRequestCmc.get_CriticalExtensions)

ppValueIObjectIds**outクリティカル(重要)としてマークされた拡張の OID コレクション IObjectIds を受け取るポインタである。

解説(Remarks)

拡張のクリティカル性は、証明書を使用するアプリケーションに対して、その拡張を無視できるかどうかを示します。このプロパティを呼び出す前に、CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 47 HRESULT get_SuppressOids(IObjectIds** ppValue)

エンコード処理中に証明書から抑制する拡張または属性のオブジェクト識別子 (OID) のコレクションを取得します。

ppValueIObjectIds**out要求から抑制(除外)する拡張の OID コレクション IObjectIds を受け取るポインタである。

解説(Remarks)

属性と拡張は、証明書要求がエンコードまたは初期化されるときに追加されます。SuppressDefaults プロパティを呼び出すことで、既定の拡張と属性の追加を抑制できます。CMC 要求では、既定で作成されるのは XCN_OID_REQUEST_CLIENT_INFO (IX509AttributeClientId) 属性のみです。拡張は既定では追加されません。

このプロパティを呼び出す前に、IX509CertificateRequestCmc オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。

vtbl 48 HRESULT get_TransactionId(INT* pValue)

証明書の要求または応答の追跡に使用できるトランザクション識別子を指定または取得します。(Get)

pValueINT*outCMC 要求のトランザクション ID を表す INT を受け取るポインタである。

解説(Remarks)

証明書の要求と応答による一往復のトランザクションは、識別子を使用して追跡できます。クライアントはトランザクション ID を生成し、証明機関または登録機関がトランザクションを完了させるメッセージで応答するまでそれを保持します。応答にはその識別子が含まれます。

このプロパティを設定する場合は、Encode メソッドを呼び出す前に設定する必要がありますが、プロパティを呼び出す前に CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 49 HRESULT put_TransactionId(INT Value)

証明書の要求または応答の追跡に使用できるトランザクション識別子を指定または取得します。(Put)

ValueINTinCMC 要求のトランザクション ID を INT で指定する。

解説(Remarks)

証明書の要求と応答による一往復のトランザクションは、識別子を使用して追跡できます。クライアントはトランザクション ID を生成し、証明機関または登録機関がトランザクションを完了させるメッセージで応答するまでそれを保持します。応答にはその識別子が含まれます。

このプロパティを設定する場合は、Encode メソッドを呼び出す前に設定する必要がありますが、プロパティを呼び出す前に CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 50 HRESULT get_SenderNonce(EncodingType Encoding, LPWSTR* pValue)

ノンス (nonce) を格納するバイト配列を指定または取得します。(Get)

EncodingEncodingTypein取得する送信者ノンス文字列のエンコーディング種別を指定する EncodingType 列挙値である。
pValueLPWSTR*outリプレイ防止用の送信者ノンスを指定エンコーディングの文字列として受け取るポインタである。

解説(Remarks)

ノンスは、要求が以前のメッセージの繰り返しでないことを保証するために証明書要求に含めることができる、1 回限りのランダムまたは擬似ランダムなバイト配列です。

このプロパティは、必要に応じて Encode メソッドを呼び出す前に設定できますが、プロパティを呼び出す前に CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 51 HRESULT put_SenderNonce(EncodingType Encoding, LPWSTR Value)

ノンス (nonce) を格納するバイト配列を指定または取得します。(Put)

EncodingEncodingTypein渡す送信者ノンス文字列のエンコーディング種別を指定する EncodingType 列挙値である。
ValueLPWSTRinリプレイ防止用の送信者ノンスを指定エンコーディングの文字列として渡す。

解説(Remarks)

ノンスは、要求が以前のメッセージの繰り返しでないことを保証するために証明書要求に含めることができる、1 回限りのランダムまたは擬似ランダムなバイト配列です。

このプロパティは、必要に応じて Encode メソッドを呼び出す前に設定できますが、プロパティを呼び出す前に CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 52 HRESULT get_SignatureInformation(IX509SignatureInformation** ppValue)

証明書要求の署名に使用されるプライマリ署名に関する情報を格納する IX509SignatureInformation オブジェクトを取得します。

ppValueIX509SignatureInformation**out署名アルゴリズム等の署名情報を表す IX509SignatureInformation オブジェクトを受け取るポインタである。

解説(Remarks)

IX509SignatureInformation オブジェクトには、証明書要求に署名するプライマリ署名に使用されるハッシュ、公開キー、および署名アルゴリズムに関する情報が含まれます。CMC 要求は、プライマリ署名に加えて、0 個以上の証明書ベースの署名を持つことができます。証明書ベースの署名は、たとえば、新しい証明書を要求するエンティティの ID を 1 つ以上の追加の当事者が保証する必要がある場合に、要求に含めることができます。これらの追加の証明書ベースの署名のコレクションを取得するには、SignerCertificates プロパティを呼び出します。

プライマリ署名は通常、内部 PKCS #10 要求オブジェクト内の公開キーに対応する秘密キーを使用して作成されます。秘密キーは通常、新しい要求を証明書階層に登録 (エンロール) するために作成されるため、プライマリ署名は証明書ベースではなく、これを取得するには SignatureInformation プロパティを呼び出す必要があります。

SignatureInformation プロパティが呼び出されたときに IX509SignatureInformation オブジェクトが存在しない場合、または初期化時に署名の作成が延期された場合、このプロパティは次の処理を行います。

このプロパティを呼び出す前に、CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 53 HRESULT get_ArchivePrivateKey(VARIANT_BOOL* pValue)

証明機関 (CA) に秘密キーをアーカイブするかどうかを示す Boolean 値を指定または取得します。(Get)

pValueVARIANT_BOOL*out秘密鍵をアーカイブ(キーアーカイブ)するかどうかを表す VARIANT_BOOL を受け取るポインタである。

解説(Remarks)

CA に秘密キーのアーカイブを要求するには、KeyArchivalCertificate プロパティに CA の暗号化 (キー交換) 証明書も設定する必要があります。

このプロパティは、必要に応じて Encode メソッドを呼び出す前に設定できますが、プロパティ値を設定する前に CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 54 HRESULT put_ArchivePrivateKey(VARIANT_BOOL Value)

証明機関 (CA) に秘密キーをアーカイブするかどうかを示す Boolean 値を指定または取得します。(Put)

ValueVARIANT_BOOLin秘密鍵をアーカイブ(キーアーカイブ)するかどうかを VARIANT_BOOL で指定する。

解説(Remarks)

CA に秘密キーのアーカイブを要求するには、KeyArchivalCertificate プロパティに CA の暗号化 (キー交換) 証明書も設定する必要があります。

このプロパティは、必要に応じて Encode メソッドを呼び出す前に設定できますが、プロパティ値を設定する前に CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 55 HRESULT get_KeyArchivalCertificate(EncodingType Encoding, LPWSTR* pValue)

証明機関 (CA) の暗号化証明書を指定または取得します。(Get)

EncodingEncodingTypein取得するキーアーカイブ証明書文字列のエンコーディング種別を指定する EncodingType 列挙値である。
pValueLPWSTR*out秘密鍵アーカイブの暗号化に使用する CA の証明書を指定エンコーディングの文字列として受け取るポインタである。

解説(Remarks)

適切に構成されている場合、証明機関 (CA) はクライアントの秘密キーをアーカイブできます。通常、クライアントは CA に交換証明書を要求し、それを検証して、KeyArchivalCertificate プロパティへの入力として使用します。CA の公開キーは、アーカイブのために送信される秘密キーの暗号化に使用されます。キーのアーカイブを要求するには、ArchivePrivateKey プロパティを使用できます。

このプロパティを設定する場合は、Encode メソッドを呼び出す前に設定する必要がありますが、プロパティを呼び出す前に CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 56 HRESULT put_KeyArchivalCertificate(EncodingType Encoding, LPWSTR Value)

証明機関 (CA) の暗号化証明書を指定または取得します。(Put)

EncodingEncodingTypein渡すキーアーカイブ証明書文字列のエンコーディング種別を指定する EncodingType 列挙値である。
ValueLPWSTRin秘密鍵アーカイブの暗号化に使用する CA の証明書を指定エンコーディングの文字列として渡す。

解説(Remarks)

適切に構成されている場合、証明機関 (CA) はクライアントの秘密キーをアーカイブできます。通常、クライアントは CA に交換証明書を要求し、それを検証して、KeyArchivalCertificate プロパティへの入力として使用します。CA の公開キーは、アーカイブのために送信される秘密キーの暗号化に使用されます。キーのアーカイブを要求するには、ArchivePrivateKey プロパティを使用できます。

このプロパティを設定する場合は、Encode メソッドを呼び出す前に設定する必要がありますが、プロパティを呼び出す前に CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 57 HRESULT get_EncryptionAlgorithm(IObjectId** ppValue)

アーカイブする秘密キーの暗号化に使用するアルゴリズムのオブジェクト識別子 (OID) を指定または取得します。(Get)

ppValueIObjectId**out鍵アーカイブ等の暗号化に使用するアルゴリズムを表す IObjectId オブジェクトを受け取るポインタである。

解説(Remarks)

証明機関 (CA) に秘密キーのアーカイブを要求する場合は、CA から交換証明書を取得し、その証明書に含まれる公開キーを使用して、アーカイブのために送信する秘密キーを暗号化する必要があります。EncryptionAlgorithm プロパティは、キーの暗号化に使用されるアルゴリズムを識別します。

このプロパティは、次のプロパティに関連しています。

このプロパティを設定する場合は、Encode メソッドを呼び出す前に設定する必要がありますが、プロパティを呼び出す前に CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 58 HRESULT put_EncryptionAlgorithm(IObjectId* pValue)

アーカイブする秘密キーの暗号化に使用するアルゴリズムのオブジェクト識別子 (OID) を指定または取得します。(Put)

pValueIObjectId*inoptional鍵アーカイブ等の暗号化に使用するアルゴリズムを表す IObjectId オブジェクトを渡す。

解説(Remarks)

証明機関 (CA) に秘密キーのアーカイブを要求する場合は、CA から交換証明書を取得し、その証明書に含まれる公開キーを使用して、アーカイブのために送信する秘密キーを暗号化する必要があります。EncryptionAlgorithm プロパティは、キーの暗号化に使用されるアルゴリズムを識別します。

このプロパティは、次のプロパティに関連しています。

このプロパティを設定する場合は、Encode メソッドを呼び出す前に設定する必要がありますが、プロパティを呼び出す前に CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 59 HRESULT get_EncryptionStrength(INT* pValue)

アーカイブする秘密キーに適用される相対的な暗号化レベルを指定または取得します。(Get)

pValueINT*out暗号化の強度(鍵長などのビット数)を表す INT を受け取るポインタである。

解説(Remarks)

このプロパティは、次のプロパティに関連しています。

暗号化強度は多くの場合、暗号化アルゴリズムによって暗黙的に決まります。アルゴリズムが複数の強度をサポートしていない場合は、EncryptionStrength プロパティを設定しないでください。

このプロパティを設定する場合は、Encode メソッドを呼び出す前に設定する必要がありますが、プロパティを呼び出す前に CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 60 HRESULT put_EncryptionStrength(INT Value)

アーカイブする秘密キーに適用される相対的な暗号化レベルを指定または取得します。(Put)

ValueINTin暗号化の強度(鍵長などのビット数)を INT で指定する。

解説(Remarks)

このプロパティは、次のプロパティに関連しています。

暗号化強度は多くの場合、暗号化アルゴリズムによって暗黙的に決まります。アルゴリズムが複数の強度をサポートしていない場合は、EncryptionStrength プロパティを設定しないでください。

このプロパティを設定する場合は、Encode メソッドを呼び出す前に設定する必要がありますが、プロパティを呼び出す前に CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

vtbl 61 HRESULT get_EncryptedKeyHash(EncodingType Encoding, LPWSTR* pValue)

アーカイブする秘密キーのハッシュを取得します。

EncodingEncodingTypein取得する暗号化済み鍵ハッシュ文字列のエンコーディング種別を指定する EncodingType 列挙値である。
pValueLPWSTR*outアーカイブされた秘密鍵の暗号化済みハッシュを指定エンコーディングの文字列として受け取るポインタである。

解説(Remarks)

秘密キーのアーカイブの詳細については、ArchivePrivateKey プロパティおよび KeyArchivalCertificate プロパティを参照してください。

vtbl 62 HRESULT get_SignerCertificates(ISignerCertificates** ppValue)

要求の署名に使用される証明書のコレクションを取得します。

ppValueISignerCertificates**outCMC 要求に署名する署名証明書のコレクション ISignerCertificates を受け取るポインタである。

解説(Remarks)

CMC 要求は、プライマリ署名に加えて、0 個以上の証明書ベースの署名を持つことができます。証明書ベースの署名は、たとえば、新しい証明書を要求するエンティティの ID を 1 つ以上の追加の当事者が保証する必要がある場合に、要求に含めることができます。これらの追加の証明書ベースの署名のコレクションを取得するには、SignerCertificates プロパティを呼び出します。

プライマリ署名は通常、内部 PKCS #10 要求オブジェクト内の公開キーに対応する秘密キーを使用して作成されます。秘密キーは通常、新しい要求を証明書階層に登録 (エンロール) するために作成されるため、プライマリ署名は証明書ベースではなく、これを取得するには SignatureInformation プロパティを呼び出す必要があります。

このプロパティを呼び出す前に、CMC 要求オブジェクトを初期化する必要があります。詳細については、次のトピックを参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IX509CertificateRequestCmc "{728AB345-217D-11DA-B2A4-000E7BBB2B09}"
#usecom global IX509CertificateRequestCmc IID_IX509CertificateRequestCmc "{}"
#comfunc global IX509CertificateRequestCmc_InitializeFromInnerRequestTemplateName  40 sptr,wstr
#comfunc global IX509CertificateRequestCmc_get_TemplateObjectId                    41 sptr
#comfunc global IX509CertificateRequestCmc_get_NullSigned                          42 var
#comfunc global IX509CertificateRequestCmc_get_CryptAttributes                     43 sptr
#comfunc global IX509CertificateRequestCmc_get_NameValuePairs                      44 sptr
#comfunc global IX509CertificateRequestCmc_get_X509Extensions                      45 sptr
#comfunc global IX509CertificateRequestCmc_get_CriticalExtensions                  46 sptr
#comfunc global IX509CertificateRequestCmc_get_SuppressOids                        47 sptr
#comfunc global IX509CertificateRequestCmc_get_TransactionId                       48 var
#comfunc global IX509CertificateRequestCmc_put_TransactionId                       49 int
#comfunc global IX509CertificateRequestCmc_get_SenderNonce                         50 int,var
#comfunc global IX509CertificateRequestCmc_put_SenderNonce                         51 int,wstr
#comfunc global IX509CertificateRequestCmc_get_SignatureInformation                52 sptr
#comfunc global IX509CertificateRequestCmc_get_ArchivePrivateKey                   53 var
#comfunc global IX509CertificateRequestCmc_put_ArchivePrivateKey                   54 int
#comfunc global IX509CertificateRequestCmc_get_KeyArchivalCertificate              55 int,var
#comfunc global IX509CertificateRequestCmc_put_KeyArchivalCertificate              56 int,wstr
#comfunc global IX509CertificateRequestCmc_get_EncryptionAlgorithm                 57 sptr
#comfunc global IX509CertificateRequestCmc_put_EncryptionAlgorithm                 58 sptr
#comfunc global IX509CertificateRequestCmc_get_EncryptionStrength                  59 var
#comfunc global IX509CertificateRequestCmc_put_EncryptionStrength                  60 int
#comfunc global IX509CertificateRequestCmc_get_EncryptedKeyHash                    61 int,var
#comfunc global IX509CertificateRequestCmc_get_SignerCertificates                  62 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。