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

IX509CertificateRequestPkcs10

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

公式ドキュメント

IX509CertificateRequestPkcs10 インターフェイスは、PKCS を表します

メソッド 28

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

vtbl 32 HRESULT InitializeFromTemplateName(X509CertificateEnrollmentContext Context, LPWSTR strTemplateName)

。 (IX509CertificateRequestPkcs10.InitializeFromTemplateName)

ContextX509CertificateEnrollmentContextin要求された証明書がエンドユーザー、コンピューター、またはコンピューターの代わりに動作する管理者のいずれを対象とするかを指定する X509CertificateEnrollmentContext 列挙値。
strTemplateNameLPWSTRinActive Directory に表示されるテンプレートの共通名 (CN)、またはドット区切り 10 進数の オブジェクト識別子 を格納する BSTR 変数。

戻り値

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

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

戻り値/値 説明
HRESULT_FROM_WIN32(ERROR_ALREADY_INITIALIZED)
証明書要求オブジェクトは既に初期化されています。

解説(Remarks)

InitializeFromTemplateName メソッドは、次のコレクションを作成します。

その後、メソッドはテンプレートを調べ、次の処理を実行します。

CSPInformations プロパティが NULL の場合、メソッドはコンピューターにインストールされているプロバイダーから ICspInformations コレクションを作成します。

vtbl 33 HRESULT InitializeFromPrivateKey(X509CertificateEnrollmentContext Context, IX509PrivateKey* pPrivateKey, LPWSTR strTemplateName)

IX509PrivateKey オブジェクトと、オプションでテンプレートを使用して、証明書要求を初期化します。

ContextX509CertificateEnrollmentContextin

要求された証明書がエンドユーザー、コンピューター、またはコンピューターの代わりに動作する管理者のいずれを対象とするかを指定する X509CertificateEnrollmentContext 列挙値。次のいずれかの値を指定できます。ただし、秘密キーMachineContext プロパティが設定されている場合は、ContextMachine 列挙値を指定する必要があります。

意味
ContextUser
証明書がエンドユーザーに対して要求されています。
ContextMachine
証明書がコンピューターに対して要求されています。
ContextAdministratorForceMachine
証明書が、コンピューターの代わりに動作する管理者によって要求されています。
pPrivateKeyIX509PrivateKey*inoptional秘密キーを表す IX509PrivateKey インターフェイスへのポインター。
strTemplateNameLPWSTRinActive Directory に表示されるテンプレートの共通名 (CN)、またはドット区切り 10 進数の オブジェクト識別子 を格納する BSTR 変数。これはオプションのパラメーターです。

戻り値

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

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

戻り値 説明
HRESULT_FROM_WIN32(ERROR_ALREADY_INITIALIZED)
証明書要求オブジェクトは既に初期化されています。

解説(Remarks)

テンプレートを指定した場合、InitializeFromPrivateKey メソッドは次の処理を実行します。

テンプレートを指定するかどうかにかかわらず、CSPInformations プロパティが指定されていない場合、メソッドはコンピューターにインストールされているプロバイダーから ICspInformations コレクションを作成します。

この時点では秘密キーは作成されません。メソッドに渡された IX509PrivateKey オブジェクトが既存のキーを表していない場合、Encode メソッドが呼び出されたときにキーが作成されます。テンプレートが指定されておらず、かつ IX509PrivateKeyProviderName プロパティが設定されていない場合、既定のプロバイダーを使用してキーが作成されます。秘密キーが存在する場合、それは PrivateKey プロパティに設定されます。

vtbl 34 HRESULT InitializeFromPublicKey(X509CertificateEnrollmentContext Context, IX509PublicKey* pPublicKey, LPWSTR strTemplateName)

IX509PublicKey オブジェクトと、オプションでテンプレートを使用して、null 署名の証明書要求を初期化します。

ContextX509CertificateEnrollmentContextin要求された証明書がエンドユーザー、コンピューター、またはコンピューターの代わりに動作する管理者のいずれを対象とするかを指定する X509CertificateEnrollmentContext 列挙値。
pPublicKeyIX509PublicKey*inoptional公開キーを表す IX509PublicKey インターフェイスへのポインター。
strTemplateNameLPWSTRinActive Directory に表示されるテンプレートの共通名 (CN)、またはドット区切り 10 進数の オブジェクト識別子 を格納する BSTR 変数。これはオプションのパラメーターです。

戻り値

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

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

戻り値/値 説明
HRESULT_FROM_WIN32(ERROR_ALREADY_INITIALIZED)
証明書要求オブジェクトは既に初期化されています。

解説(Remarks)

テンプレートを指定した場合、InitializeFromPublicKey メソッドは次の処理を実行します。

テンプレートを指定するかどうかにかかわらず、CSPInformations プロパティが指定されていない場合、メソッドはコンピューターにインストールされているプロバイダーから ICspInformations コレクションを作成します。

このメソッドは秘密キーを作成しません。このメソッドを使用することは、要求が null 署名であることを意味します。そのため、メソッドは IX509SignatureInformation オブジェクトの NullSigned プロパティを設定します。

vtbl 35 HRESULT InitializeFromCertificate(X509CertificateEnrollmentContext Context, LPWSTR strCertificate, EncodingType Encoding, X509RequestInheritOptions InheritOptions)

既存の証明書を使用して証明書要求を初期化します。 (IX509CertificateRequestPkcs10.InitializeFromCertificate)

ContextX509CertificateEnrollmentContextin要求された証明書がエンドユーザー、コンピューター、またはコンピューターの代わりに動作する管理者のいずれを対象とするかを指定する X509CertificateEnrollmentContext 列挙値。
strCertificateLPWSTRin

DER エンコードされた証明書を格納する BSTR 変数。

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

  • BSTR は偶数個の 16 進数字である必要があります。
  • 16 進数のペアの間の空白は無視されます。
  • Encoding パラメーターは XCN_CRYPT_STRING_HEXRAW に設定する必要があります。
  • Context パラメーターは、ユーザーストアとコンピューターストアのいずれか、または両方を検索するかどうかを決定します。
  • 秘密キーが必要な場合は、個人ストアと要求ストアのみが検索されます。
  • 秘密キーが不要な場合は、ルートストアと中間 CA ストアも検索されます。
EncodingEncodingTypeinDER エンコードされた証明書に適用される Unicode エンコードの種類を指定する EncodingType 列挙値。既定値は XCN_CRYPT_STRING_BASE64 です。
InheritOptionsX509RequestInheritOptionsin

既存の証明書から証明書要求オブジェクトを作成する方法を指定する X509RequestInheritOptions 列挙値。次のいずれかの値を選択して、キーを継承する方法を指定できます。既定値は InheritDefault です。

意味
InheritDefault
プロバイダーとキーの継承は指定されません。
InheritNewDefaultKey
新しいキーを作成しますが、既定の暗号化プロバイダーを継承します。
InheritNewSimilarKey
新しいキーを作成しますが、既存の証明書の作成に使用された暗号化プロバイダーを継承します。
InheritPrivateKey
秘密キーと公開キーを継承します。
InheritPublicKey
公開キーのみを継承します。

ビット単位の OR 演算を使用して、キーの継承値を次の値の任意の組み合わせと組み合わせることもできます。

意味
InheritRenewalCertificateFlag
更新証明書を継承します。このフラグを指定すると、RenewalCertificate プロパティが設定されます。
InheritTemplateFlag
証明書テンプレートを継承します。
InheritSubjectFlag
サブジェクトの識別名を継承します。
InheritExtensionsFlag
証明書から関連する拡張を継承します。
InheritSubjectAltNameFlag
SubjectAlternativeName 拡張を継承します。
InheritValidityPeriodFlag
有効期間を継承します。

InheritNone を指定すると、前の表のフラグ (キーの継承に関連しないフラグ) が既定で適用されないようにすることもできます。InheritNone を指定し、かつキーの継承に関連しないフラグも指定した場合、メソッドは E_INVALIDARG を返します。

InheritOptions パラメーターを 0 に設定するか InheritDefault を指定し、キーの継承値を指定しなかった場合、既定で InheritNewSimilarKey が使用されます。

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

  • InheritSubjectFlag
  • InheritExtensionsFlag
  • InheritValidityPeriodFlag
  • InheritTemplateFlag (証明書にテンプレート拡張が含まれている場合)

戻り値

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

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

戻り値 説明
HRESULT_FROM_WIN32(ERROR_ALREADY_INITIALIZED)
証明書要求オブジェクトは既に初期化されています。

解説(Remarks)

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

vtbl 36 HRESULT InitializeDecode(LPWSTR strEncodedData, EncodingType Encoding)

既存の署名済みまたは未署名の PKCS をデコードします (IX509CertificateRequestPkcs10.InitializeDecode)

strEncodedDataLPWSTRinDER エンコードされた要求を格納する BSTR 変数。詳細については、「解説」を参照してください。
EncodingEncodingTypeinDER エンコードされた要求を格納する入力文字列に適用される Unicode エンコードの種類を指定する EncodingType 列挙値。既定値は XCN_CRYPT_STRING_BASE64 です。

戻り値

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

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

戻り値/値 説明
HRESULT_FROM_WIN32(ERROR_ALREADY_INITIALIZED)
証明書要求オブジェクトは既に初期化されています。

解説(Remarks)

InitializeDecode メソッドは、既存の PKCS #10 要求をデコードし、取得した情報を使用して、新しい要求オブジェクト用に次のコレクションを初期化します。

さらに、メソッドは次の処理を行います。

既定では、InitializeDecode メソッドは、デコードする証明書要求がエンドユーザーを対象としていると想定します。Windows 8 および Windows Server 2012 以降では、この既定の動作を変更できます。IX509CertificateRequestPkcs10 インターフェイスのインスタンスを作成した後、Encoding パラメーターを XCN_CRYPT_STRING_BINARY に設定し、strEncodedData パラメーターを次のいずれかの値に設定して InitializeDecode を呼び出します。

説明
L"ContextMachine" エンコードされた証明書要求はコンピューターを対象としています。
L"ContextUser" エンコードされた証明書要求はエンドユーザーを対象としています。
L"ContextAdministratorForceMachine" エンコードされた証明書が、コンピューターの代わりに動作する管理者によって要求されています。

その後、エンコードされた証明書を strEncodedData 引数に設定して、InitializeDecode メソッドを再度呼び出します。

vtbl 37 HRESULT CheckSignature(Pkcs10AllowedSignatureTypes AllowedSignatureTypes)

証明書要求が署名されていること、および署名が有効であることを検証します。 (IX509CertificateRequestPkcs10.CheckSignature)

AllowedSignatureTypesPkcs10AllowedSignatureTypesin

Pkcs10AllowedSignatureTypes 列挙値。次の値のビット単位の組み合わせを指定できます。

意味
AllowedKeySignature
非対称キーを使用して生成された署名が許可されます。このフラグが設定されている場合、署名は PKCS #10 要求内の公開キーに対して検証されます。
AllowedNullSignature
null 署名の署名が許可されます。

戻り値

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

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

戻り値 説明
CRYPT_E_NO_SIGNER
証明書要求が署名されていません。
ERROR_INVALID_STATE
署名の種類が AllowedSignatureTypes パラメーターで指定されていません。
NTE_BAD_SIGNATURE
AllowedSignatureTypes パラメーターで指定された値が、Pkcs10AllowedSignatureTypes 列挙型のメンバーではありません。

解説(Remarks)

このメソッドは、公開キーを使用して署名を復号し、署名を証明書要求のハッシュと比較します。

vtbl 38 HRESULT IsSmartCard(VARIANT_BOOL* pValue)

要求オブジェクトに関連付けられた暗号化プロバイダーのいずれかがスマートカードプロバイダーであるかどうかを示すブール値を取得します。

pValueVARIANT_BOOL*out列挙および選択されたプロバイダーのいずれかがスマートカードプロバイダーであるかどうかを示す VARIANT_BOOL 変数へのポインター。

戻り値

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

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

戻り値/値 説明
CERTSRV_E_PROPERTY_EMPTY
秘密キーが見つからないか、秘密キーに関連付けられた ICspInformation オブジェクトが見つかりません。
OLE_E_BLANK
オブジェクトが初期化されていません。

解説(Remarks)

IsSmartCard メソッドは、まず秘密キーに関連付けられたプロバイダーを確認します。そのプロバイダーがスマートカード用でない場合、メソッドは CspStatuses コレクションを反復処理し、スマートカード用に選択されているプロバイダーが見つかるまで検索します。選択されたスマートカードプロバイダーが見つからない場合、メソッドは False を返します。このメソッドを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。

vtbl 39 HRESULT get_TemplateObjectId(IObjectId** ppValue)

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

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

解説(Remarks)

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

vtbl 40 HRESULT get_PublicKey(IX509PublicKey** ppValue)

証明書要求に含まれる公開キーを格納する IX509PublicKey オブジェクトを取得します。

ppValueIX509PublicKey**out要求に含まれる公開鍵を表す IX509PublicKey オブジェクトを受け取るポインタである。

解説(Remarks)

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

vtbl 41 HRESULT get_PrivateKey(IX509PrivateKey** ppValue)

証明書要求の署名に使用された秘密キーを格納する IX509PrivateKey オブジェクトを取得します。

ppValueIX509PrivateKey**out要求に関連付けられた秘密鍵を表す IX509PrivateKey オブジェクトを受け取るポインタである。

解説(Remarks)

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

vtbl 42 HRESULT get_NullSigned(VARIANT_BOOL* pValue)

証明書要求が null 署名であるかどうかを示すブール値を取得します。

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

解説(Remarks)

null 署名の PKCS #10 証明書要求は、実際には署名されていません。つまり、署名は SHA-1 などのダイジェストアルゴリズムを使用して作成されたハッシュですが、要求は RSA などの公開キーアルゴリズムでは暗号化されていません。これは、証明機関 の相互証明を行う場合によくあるように、秘密キーが利用できない場合に使用できます。詳細については、InitializeFromPublicKey メソッドを参照してください。

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

vtbl 43 HRESULT get_ReuseKey(VARIANT_BOOL* pValue)

既存の秘密キーが要求の署名に使用されたかどうかを示すブール値を取得します。

pValueVARIANT_BOOL*out既存の鍵を再利用するかどうかを表す VARIANT_BOOL を受け取るポインタである。

解説(Remarks)

InitializeFromCertificate メソッドを呼び出して要求オブジェクトを初期化した場合、要求の署名に使用する秘密キーを証明書から継承するかどうかを示す値を InheritOptions パラメーターに指定しています。このパラメーターに InheritPrivateKey を指定した場合、ReuseKey プロパティはブール値の true を返します。

vtbl 44 HRESULT get_OldCertificate(EncodingType Encoding, LPWSTR* pValue)

InitializeFromCertificate メソッドに渡された証明書を取得します。

EncodingEncodingTypein取得する旧証明書文字列のエンコーディング種別を指定する EncodingType 列挙値である。
pValueLPWSTR*out更新元となる旧証明書を指定エンコーディングの文字列として受け取るポインタである。

解説(Remarks)

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

vtbl 45 HRESULT get_Subject(IX500DistinguishedName** ppValue)

証明書を要求するエンティティの X.500 識別名を指定または取得します。 (Get)

ppValueIX500DistinguishedName**out要求のサブジェクト(主体)識別名を表す IX500DistinguishedName オブジェクトを受け取るポインタである。

解説(Remarks)

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

vtbl 46 HRESULT put_Subject(IX500DistinguishedName* pValue)

証明書を要求するエンティティの X.500 識別名を指定または取得します。 (Put)

pValueIX500DistinguishedName*inoptional要求のサブジェクト(主体)識別名を表す IX500DistinguishedName オブジェクトを渡す。

解説(Remarks)

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

vtbl 47 HRESULT get_CspStatuses(ICspStatuses** ppValue)

証明書要求に関連付けられた秘密キーの使用目的に一致する ICspStatus オブジェクトのコレクションを取得します。

ppValueICspStatuses**out利用可能な暗号化サービスプロバイダー(CSP)の状態コレクション ICspStatuses を受け取るポインタである。

解説(Remarks)

このプロパティは、ICspStatus オブジェクトのコレクションを取得します。各オブジェクトは、1 つのプロバイダー/アルゴリズムのペアを表します。CspStatuses プロパティは GetCspStatuses メソッドとは異なります。メソッドでは KeySpec パラメーターを設定できますが、CspStatusesIX509CertificateRequestPkcs10 オブジェクトに関連付けられた秘密キーに設定された KeySpec プロパティを使用します。次のいずれかの値を指定できます。

説明
XCN_AT_NONE Cryptography API: Next Generation (CNG) プロバイダーのみが選択されます。
XCN_AT_KEYEXCHANGE 暗号化アルゴリズム (キー交換を含む) を備えた CryptoAPI 暗号化サービスプロバイダー (CSP) のみが選択されます。
XCN_AT_SIGNATURE 署名アルゴリズムを備えた CryptoAPI 暗号化サービスプロバイダー (CSP) のみが選択されます。

要求オブジェクトの初期化時にテンプレートを指定した場合、pKIDefaultCSPspKIDefaultKeySpec などのテンプレート属性が、コレクション内で最初に有効になるプロバイダー/アルゴリズムのペアに影響します。各 ICspStatus オブジェクトに対して次のプロパティを呼び出すことで、ペアに関する情報を取得できます。

このメソッドで取得されたコレクションは、要求オブジェクトに内部的に保存されます。コレクションは、PKCS #10 オブジェクトが存在する限り存在します。

たとえば、要求オブジェクトに関連付けられた秘密キーの KeySpec プロパティが XCN_AT_SIGNATURE に設定されており、テンプレートを使用して要求を初期化するとします。この場合、次のことが成り立ちます。

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

vtbl 48 HRESULT get_SmimeCapabilities(VARIANT_BOOL* pValue)

コンピューターがサポートする暗号化機能を示す IX509ExtensionSmimeCapabilities コレクションを作成するかどうかを Encode メソッドに指示するブール値を指定または取得します。 (Get)

pValueVARIANT_BOOL*outS/MIME 機能拡張を要求に含めるかどうかを表す VARIANT_BOOL を受け取るポインタである。

解説(Remarks)

Multipurpose Internet Mail Extensions (MIME) は、バイナリデータをメールで送信できるようにテキストに整形するための仕様です。Secure/Multipurpose Internet Mail Extensions (S/MIME) は、MIME メッセージを暗号化および署名するための標準です。

IX509ExtensionSmimeCapabilities オブジェクトで表される SmimeCapabilities 拡張は、暗号化されたメールメッセージの送受信時に、受信者の復号機能を送信者に通知するために使用されます。これにより、送信者は送信者と受信者の両方がサポートする最も安全なアルゴリズムを選択できます。

Encode メソッドを呼び出す前に SuppressDefaults プロパティを設定しなかった場合、SmimeCapabilities 拡張が既定で追加され、使用可能な対称アルゴリズムの OID が列挙されて拡張値に追加されます。Encode を呼び出す前に SmimeCapabilities プロパティを設定してください。

vtbl 49 HRESULT put_SmimeCapabilities(VARIANT_BOOL Value)

コンピューターがサポートする暗号化機能を示す IX509ExtensionSmimeCapabilities コレクションを作成するかどうかを Encode メソッドに指示するブール値を指定または取得します。 (Put)

ValueVARIANT_BOOLinS/MIME 機能拡張を要求に含めるかどうかを VARIANT_BOOL で指定する。

解説(Remarks)

Multipurpose Internet Mail Extensions (MIME) は、バイナリデータをメールで送信できるようにテキストに整形するための仕様です。Secure/Multipurpose Internet Mail Extensions (S/MIME) は、MIME メッセージを暗号化および署名するための標準です。

IX509ExtensionSmimeCapabilities オブジェクトで表される SmimeCapabilities 拡張は、暗号化されたメールメッセージの送受信時に、受信者の復号機能を送信者に通知するために使用されます。これにより、送信者は送信者と受信者の両方がサポートする最も安全なアルゴリズムを選択できます。

Encode メソッドを呼び出す前に SuppressDefaults プロパティを設定しなかった場合、SmimeCapabilities 拡張が既定で追加され、使用可能な対称アルゴリズムの OID が列挙されて拡張値に追加されます。Encode を呼び出す前に SmimeCapabilities プロパティを設定してください。

vtbl 50 HRESULT get_SignatureInformation(IX509SignatureInformation** ppValue)

証明書要求の署名に関する情報を格納する IX509SignatureInformation オブジェクトを取得します。

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

解説(Remarks)

IX509SignatureInformation オブジェクトには、証明書要求の署名に使用されるハッシュ、公開キー、および署名の各アルゴリズムに関する情報が格納されます。要求に IX509SignatureInformation オブジェクトが関連付けられていない場合、このプロパティはオブジェクトの作成を試み、秘密キーを使用して PublicKeyAlgorithm プロパティを設定します。

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

vtbl 51 HRESULT get_KeyContainerNamePrefix(LPWSTR* pValue)

新しい秘密キーのコンテナー名を作成するために使用するプレフィックスを指定または取得します。 (Get)

pValueLPWSTR*out鍵コンテナー名に付与するプレフィックス文字列を受け取るポインタである。

解説(Remarks)

各 CryptoAPI 暗号化サービスプロバイダー または Cryptography API: Next Generation (CNG) キープロバイダーは、秘密キー用のキーコンテナーを保持します。既存のキーのキーコンテナー名を取得するには、IX509PrivateKey オブジェクトの ContainerName プロパティを使用します。

プレフィックスには、キーコンテナー名の最大長とコンテナー名に使用できる文字の範囲内で、任意の文字列を含めることができます。たとえば、キーコンテナー名を指定するために ContainerName プロパティを呼び出さなかった場合、秘密キーの作成時にコンテナー名が自動的に作成され、コンテナー名のプレフィックスは文字列 "lp" になります。別の例として、テストハーネスを作成していて、それを生成したプログラムごとにキーコンテナーを区別したい場合は、実行可能ファイルの名前をプレフィックスとして使用できます。

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

vtbl 52 HRESULT put_KeyContainerNamePrefix(LPWSTR Value)

新しい秘密キーのコンテナー名を作成するために使用するプレフィックスを指定または取得します。 (Put)

ValueLPWSTRin鍵コンテナー名に付与するプレフィックス文字列を指定する。

解説(Remarks)

各 CryptoAPI 暗号化サービスプロバイダー または Cryptography API: Next Generation (CNG) キープロバイダーは、秘密キー用のキーコンテナーを保持します。既存のキーのキーコンテナー名を取得するには、IX509PrivateKey オブジェクトの ContainerName プロパティを使用します。

プレフィックスには、キーコンテナー名の最大長とコンテナー名に使用できる文字の範囲内で、任意の文字列を含めることができます。たとえば、キーコンテナー名を指定するために ContainerName プロパティを呼び出さなかった場合、秘密キーの作成時にコンテナー名が自動的に作成され、コンテナー名のプレフィックスは文字列 "lp" になります。別の例として、テストハーネスを作成していて、それを生成したプログラムごとにキーコンテナーを区別したい場合は、実行可能ファイルの名前をプレフィックスとして使用できます。

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

vtbl 53 HRESULT get_CryptAttributes(ICryptAttributes** ppValue)

オプションの証明書属性の ICryptAttributes コレクションを取得します。 (IX509CertificateRequestPkcs10.get_CryptAttributes)

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

解説(Remarks)

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

vtbl 54 HRESULT get_X509Extensions(IX509Extensions** ppValue)

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

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

解説(Remarks)

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

vtbl 55 HRESULT get_CriticalExtensions(IObjectIds** ppValue)

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

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

解説(Remarks)

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

vtbl 56 HRESULT get_SuppressOids(IObjectIds** ppValue)

要求のエンコード時に要求へ追加されなかった既定の拡張および属性のオブジェクト識別子 (OID) のコレクションを取得します。

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

解説(Remarks)

属性と拡張は、証明書要求のエンコード時または初期化時に追加されます。SuppressDefaults プロパティを呼び出すことで、既定の拡張および属性の追加を抑制できます。PKCS #10 要求では、次の属性が既定で追加されます。

次の拡張が既定で追加されます。

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

vtbl 57 HRESULT get_RawDataToBeSigned(EncodingType Encoding, LPWSTR* pValue)

Encode メソッドによって作成された未署名の証明書要求を取得します。

EncodingEncodingTypein取得する署名対象データのエンコーディング種別を指定する EncodingType 列挙値である。
pValueLPWSTR*out署名前の(署名対象となる)要求データを指定エンコーディングの文字列として受け取るポインタである。

解説(Remarks)

Encode メソッドは、DER エンコードされた署名済みの証明書要求を作成しますが、未署名の要求もバイト配列として内部的に保存します。RawDataToBeSigned プロパティを使用すると、そのバイナリデータを Unicode エンコードされた文字列として取得できます。

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

vtbl 58 HRESULT get_Signature(EncodingType Encoding, LPWSTR* pValue)

Encode メソッドによって作成された要求の署名を取得します。

EncodingEncodingTypein取得する署名データのエンコーディング種別を指定する EncodingType 列挙値である。
pValueLPWSTR*out要求に付与された署名を指定エンコーディングの文字列として受け取るポインタである。

解説(Remarks)

Encode メソッドは、DER エンコードされた署名済みの証明書要求を作成し、それをバイト配列として内部的に保存します。Signature プロパティを使用すると、署名を格納するバイト配列を取得できます。

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

vtbl 59 HRESULT GetCspStatuses(X509KeySpec KeySpec, ICspStatuses** ppCspStatuses)

呼び出し元が指定した秘密キーの使用目的に一致するすべてのプロバイダー/アルゴリズムのペアを格納する ICspStatuses コレクションを取得します。

KeySpecX509KeySpecin

キーの使用目的を指定する X509KeySpec 列挙値。次のいずれかの値を指定できます。

意味
XCN_AT_NONE
Cryptography API: Next Generation (CNG) プロバイダーのみが選択されます。
XCN_AT_KEYEXCHANGE
暗号化アルゴリズム (キー交換を含む) を備えた CryptoAPI 暗号化サービスプロバイダー (CSP) のみが選択されます。
XCN_AT_SIGNATURE
署名アルゴリズムを備えた CryptoAPI CSP のみが選択されます。
ppCspStatusesICspStatuses**outコレクションを表す ICspStatuses インターフェイスへのポインターを受け取る変数のアドレス。

戻り値

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

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

戻り値 説明
CERTSRV_E_PROPERTY_EMPTY
秘密キーが見つかりません。
OLE_E_BLANK
オブジェクトが初期化されていません。

解説(Remarks)

このメソッドは、ICspStatus オブジェクトのコレクションを取得します。各オブジェクトは、1 つのプロバイダー/アルゴリズムのペアを表します。IX509CertificateRequestPkcs10 要求オブジェクトの初期化時にテンプレートを指定した場合、pKIDefaultCSPspKIDefaultKeySpec などのテンプレート属性が、最初に有効になるペアに影響します。各 ICspStatus オブジェクトに対して次のプロパティを呼び出すことで、ペアに関する情報を取得できます。

このメソッドで取得されたコレクションは、要求オブジェクトに内部的に保存されます。KeySpec 値ごとに 1 つずつ、最大 3 つのコレクションを作成して保存できます。これは、プロバイダー/アルゴリズムのペアの選択状態を保持し、関連するプロパティページを複数回にわたって正確かつ迅速に表示できるようにするため、また、秘密キーを作成する必要がある場合に Encode メソッドがどのプロバイダーとアルゴリズムが選択されているかを識別できるようにするために行われます。プロバイダー/アルゴリズムのペアの選択状態が変更されると、その変更は該当するコレクションに保存されます。あるコレクションのメンバーに加えた変更は、他のいずれのコレクションのメンバーにも影響しません。コレクションは、PKCS #10 オブジェクトが存在する限り存在します。

たとえば、このメソッドが KeySpec パラメーターを XCN_AT_SIGNATURE に設定して呼び出され、テンプレートを使用して要求を初期化するとします。この場合、次のことが成り立ちます。

GetCspStatuses メソッドは、KeySpec パラメーターを使用する点で CspStatuses プロパティとは異なります。メソッドではユーザーがこの値を指定できますが、プロパティは要求オブジェクトに関連付けられた秘密キーに設定された値を使用します。

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

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IX509CertificateRequestPkcs10 "{728AB342-217D-11DA-B2A4-000E7BBB2B09}"
#usecom global IX509CertificateRequestPkcs10 IID_IX509CertificateRequestPkcs10 "{}"
#comfunc global IX509CertificateRequestPkcs10_InitializeFromTemplateName  32 int,wstr
#comfunc global IX509CertificateRequestPkcs10_InitializeFromPrivateKey    33 int,sptr,wstr
#comfunc global IX509CertificateRequestPkcs10_InitializeFromPublicKey     34 int,sptr,wstr
#comfunc global IX509CertificateRequestPkcs10_InitializeFromCertificate   35 int,wstr,int,int
#comfunc global IX509CertificateRequestPkcs10_InitializeDecode            36 wstr,int
#comfunc global IX509CertificateRequestPkcs10_CheckSignature              37 int
#comfunc global IX509CertificateRequestPkcs10_IsSmartCard                 38 var
#comfunc global IX509CertificateRequestPkcs10_get_TemplateObjectId        39 sptr
#comfunc global IX509CertificateRequestPkcs10_get_PublicKey               40 sptr
#comfunc global IX509CertificateRequestPkcs10_get_PrivateKey              41 sptr
#comfunc global IX509CertificateRequestPkcs10_get_NullSigned              42 var
#comfunc global IX509CertificateRequestPkcs10_get_ReuseKey                43 var
#comfunc global IX509CertificateRequestPkcs10_get_OldCertificate          44 int,var
#comfunc global IX509CertificateRequestPkcs10_get_Subject                 45 sptr
#comfunc global IX509CertificateRequestPkcs10_put_Subject                 46 sptr
#comfunc global IX509CertificateRequestPkcs10_get_CspStatuses             47 sptr
#comfunc global IX509CertificateRequestPkcs10_get_SmimeCapabilities       48 var
#comfunc global IX509CertificateRequestPkcs10_put_SmimeCapabilities       49 int
#comfunc global IX509CertificateRequestPkcs10_get_SignatureInformation    50 sptr
#comfunc global IX509CertificateRequestPkcs10_get_KeyContainerNamePrefix  51 var
#comfunc global IX509CertificateRequestPkcs10_put_KeyContainerNamePrefix  52 wstr
#comfunc global IX509CertificateRequestPkcs10_get_CryptAttributes         53 sptr
#comfunc global IX509CertificateRequestPkcs10_get_X509Extensions          54 sptr
#comfunc global IX509CertificateRequestPkcs10_get_CriticalExtensions      55 sptr
#comfunc global IX509CertificateRequestPkcs10_get_SuppressOids            56 sptr
#comfunc global IX509CertificateRequestPkcs10_get_RawDataToBeSigned       57 int,var
#comfunc global IX509CertificateRequestPkcs10_get_Signature               58 int,var
#comfunc global IX509CertificateRequestPkcs10_GetCspStatuses              59 int,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。