IX509CertificateRequestPkcs10
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
IX509CertificateRequestPkcs10 インターフェイスは、PKCS を表します
メソッド 28
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
。 (IX509CertificateRequestPkcs10.InitializeFromTemplateName)
| Context | X509CertificateEnrollmentContext | in | 要求された証明書がエンドユーザー、コンピューター、またはコンピューターの代わりに動作する管理者のいずれを対象とするかを指定する X509CertificateEnrollmentContext 列挙値。 |
| strTemplateName | LPWSTR | in | Active Directory に表示されるテンプレートの共通名 (CN)、またはドット区切り 10 進数の オブジェクト識別子 を格納する BSTR 変数。 |
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。有効な値には次の表に示す値が含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻り値/値 | 説明 |
|---|---|
|
証明書要求オブジェクトは既に初期化されています。 |
解説(Remarks)
InitializeFromTemplateName メソッドは、次のコレクションを作成します。
- ICryptAttributes コレクション。
- IX509Extensions コレクション。
- XCN_OID_KEY_USAGE および XCN_OID_BASIC_CONSTRAINTS2 の既定のオブジェクト識別子が設定された IObjectIds コレクション。
- 新しい要求から抑制する属性および拡張の OID 用の空の IObjectIds コレクション。
その後、メソッドはテンプレートを調べ、次の処理を実行します。
- テンプレートで指定された拡張を IX509Extensions コレクションに追加します。
- テンプレートがクリティカルでないことを示している場合、既定のクリティカル拡張 (XCN_OID_KEY_USAGE および XCN_OID_BASIC_CONSTRAINTS2) をコレクションから削除します。テンプレートによってクリティカルとしてマークされた OID は追加されます。
- テンプレートが対称アルゴリズムをサポートしている場合、SmimeCapabilities プロパティを設定します。
- テンプレートが個別の署名アルゴリズム OID を必要とする場合、AlternateSignatureAlgorithm プロパティを設定します。
- IX509SignatureInformation オブジェクトを作成します。
- アルゴリズムがテンプレートで指定されている場合、ハッシュアルゴリズムの OID を作成し、それを IX509SignatureInformation オブジェクトに設定します。
- アルゴリズムがテンプレートで指定されている場合、非対称暗号化アルゴリズムの OID を作成し、それを IX509SignatureInformation オブジェクトに設定します。
- テンプレートの設定から次の IX509PrivateKey プロパティを設定します。
CSPInformations プロパティが NULL の場合、メソッドはコンピューターにインストールされているプロバイダーから ICspInformations コレクションを作成します。
IX509PrivateKey オブジェクトと、オプションでテンプレートを使用して、証明書要求を初期化します。
| Context | X509CertificateEnrollmentContext | in | 要求された証明書がエンドユーザー、コンピューター、またはコンピューターの代わりに動作する管理者のいずれを対象とするかを指定する X509CertificateEnrollmentContext 列挙値。次のいずれかの値を指定できます。ただし、秘密キー の MachineContext プロパティが設定されている場合は、ContextMachine 列挙値を指定する必要があります。
| ||||||||
| pPrivateKey | IX509PrivateKey* | inoptional | 秘密キーを表す IX509PrivateKey インターフェイスへのポインター。 | ||||||||
| strTemplateName | LPWSTR | in | Active Directory に表示されるテンプレートの共通名 (CN)、またはドット区切り 10 進数の オブジェクト識別子 を格納する BSTR 変数。これはオプションのパラメーターです。 |
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。有効な値には次の表に示す値が含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻り値 | 説明 |
|---|---|
|
証明書要求オブジェクトは既に初期化されています。 |
解説(Remarks)
テンプレートを指定した場合、InitializeFromPrivateKey メソッドは次の処理を実行します。
- テンプレートで指定された拡張を IX509Extensions コレクションに追加します。
- IObjectIds コレクションを作成し、既定の XCN_OID_KEY_USAGE および XCN_OID_BASIC_CONSTRAINTS2 のオブジェクト識別子を設定します。これらの OID がクリティカルでないことをテンプレートが示している場合、それらはコレクションから削除されます。テンプレートによってクリティカルとしてマークされた OID は追加されます。
- テンプレートが対称アルゴリズムをサポートしている場合、SmimeCapabilities プロパティを設定します。
- テンプレートが個別の署名アルゴリズム OID を必要とする場合、AlternateSignatureAlgorithm プロパティを設定します。
- IX509SignatureInformation オブジェクトを作成します。
- アルゴリズムがテンプレートで指定されている場合、ハッシュアルゴリズムの OID を作成し、それを IX509SignatureInformation オブジェクトに設定します。
- 非対称暗号化アルゴリズムの OID がテンプレートに存在する場合、それを取得して IX509SignatureInformation オブジェクトに設定します。
- テンプレートの設定から IX509PrivateKey プロパティの多くを設定します。
テンプレートを指定するかどうかにかかわらず、CSPInformations プロパティが指定されていない場合、メソッドはコンピューターにインストールされているプロバイダーから ICspInformations コレクションを作成します。
この時点では秘密キーは作成されません。メソッドに渡された IX509PrivateKey オブジェクトが既存のキーを表していない場合、Encode メソッドが呼び出されたときにキーが作成されます。テンプレートが指定されておらず、かつ IX509PrivateKey の ProviderName プロパティが設定されていない場合、既定のプロバイダーを使用してキーが作成されます。秘密キーが存在する場合、それは PrivateKey プロパティに設定されます。
IX509PublicKey オブジェクトと、オプションでテンプレートを使用して、null 署名の証明書要求を初期化します。
| Context | X509CertificateEnrollmentContext | in | 要求された証明書がエンドユーザー、コンピューター、またはコンピューターの代わりに動作する管理者のいずれを対象とするかを指定する X509CertificateEnrollmentContext 列挙値。 |
| pPublicKey | IX509PublicKey* | inoptional | 公開キーを表す IX509PublicKey インターフェイスへのポインター。 |
| strTemplateName | LPWSTR | in | Active Directory に表示されるテンプレートの共通名 (CN)、またはドット区切り 10 進数の オブジェクト識別子 を格納する BSTR 変数。これはオプションのパラメーターです。 |
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。有効な値には次の表に示す値が含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻り値/値 | 説明 |
|---|---|
|
証明書要求オブジェクトは既に初期化されています。 |
解説(Remarks)
テンプレートを指定した場合、InitializeFromPublicKey メソッドは次の処理を実行します。
- オプションのテンプレートで指定された拡張がある場合、それを IX509Extensions コレクションに追加します。
- CriticalExtensions コレクションを作成し、既定の XCN_OID_KEY_USAGE および XCN_OID_BASIC_CONSTRAINTS2 のオブジェクト識別子を設定します。テンプレートが指定され、これらの OID がクリティカルでないことを示している場合、それらはコレクションから削除されます。テンプレートによってクリティカルとしてマークされた OID がある場合、それは追加されます。
- テンプレートが対称アルゴリズムをサポートしている場合、SmimeCapabilities プロパティを設定します。
- テンプレートが個別の署名アルゴリズム OID を必要とする場合、AlternateSignatureAlgorithm プロパティを設定します。
- IX509SignatureInformation オブジェクトを作成します。
- アルゴリズムがテンプレートで指定されている場合、ハッシュアルゴリズムの OID を作成し、それを IX509SignatureInformation オブジェクトに設定します。
- アルゴリズムがテンプレートで指定されている場合、非対称暗号化アルゴリズムの OID を作成し、それを IX509SignatureInformation オブジェクトに設定します。
テンプレートを指定するかどうかにかかわらず、CSPInformations プロパティが指定されていない場合、メソッドはコンピューターにインストールされているプロバイダーから ICspInformations コレクションを作成します。
このメソッドは秘密キーを作成しません。このメソッドを使用することは、要求が null 署名であることを意味します。そのため、メソッドは IX509SignatureInformation オブジェクトの NullSigned プロパティを設定します。
既存の証明書を使用して証明書要求を初期化します。 (IX509CertificateRequestPkcs10.InitializeFromCertificate)
| Context | X509CertificateEnrollmentContext | in | 要求された証明書がエンドユーザー、コンピューター、またはコンピューターの代わりに動作する管理者のいずれを対象とするかを指定する X509CertificateEnrollmentContext 列挙値。 | ||||||||||||||
| strCertificate | LPWSTR | in | DER エンコードされた証明書を格納する BSTR 変数。 Windows 7 および Windows Server 2008 R2 以降では、エンコードされた証明書の代わりに証明書のサムプリントまたはシリアル番号を指定できます。これを指定すると、関数は一致する証明書を該当するローカルストアで検索します。次の点に注意してください。
| ||||||||||||||
| Encoding | EncodingType | in | DER エンコードされた証明書に適用される Unicode エンコードの種類を指定する EncodingType 列挙値。既定値は XCN_CRYPT_STRING_BASE64 です。 | ||||||||||||||
| InheritOptions | X509RequestInheritOptions | in | 既存の証明書から証明書要求オブジェクトを作成する方法を指定する X509RequestInheritOptions 列挙値。次のいずれかの値を選択して、キーを継承する方法を指定できます。既定値は InheritDefault です。 ビット単位の OR 演算を使用して、キーの継承値を次の値の任意の組み合わせと組み合わせることもできます。
InheritNone を指定すると、前の表のフラグ (キーの継承に関連しないフラグ) が既定で適用されないようにすることもできます。InheritNone を指定し、かつキーの継承に関連しないフラグも指定した場合、メソッドは E_INVALIDARG を返します。 InheritOptions パラメーターを 0 に設定するか InheritDefault を指定し、キーの継承値を指定しなかった場合、既定で InheritNewSimilarKey が使用されます。 InheritOptions パラメーターを 0 に設定するか InheritDefault を指定し、キーの継承に関連しない値をいずれも指定しなかった場合、既定で次のフラグが設定されます。
|
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。有効な値には次の表に示す値が含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻り値 | 説明 |
|---|---|
|
証明書要求オブジェクトは既に初期化されています。 |
解説(Remarks)
InitializeFromCertificate メソッドは、InheritOptions パラメーターで指定されたオプションを検証し、次の処理を実行して新しい PKCS #10 要求オブジェクトを初期化します。
- 更新証明書が存在し、かつ InheritRenewalCertificateFlag を指定した場合、入力証明書から新しい要求に更新証明書をコピーします。
- 既存の証明書にテンプレートが指定されており、かつ InheritTemplateFlag 値を設定した場合、テンプレートをコピーします。
- InheritSubjectFlag を指定した場合、サブジェクトの識別名を新しい要求にコピーします。
- InheritSubjectAltNameFlag を指定した場合、サブジェクトの別名を新しい要求にコピーします。
- InheritExtensionsFlag を指定した場合、拡張を新しい要求にコピーします。
既存の署名済みまたは未署名の PKCS をデコードします (IX509CertificateRequestPkcs10.InitializeDecode)
| strEncodedData | LPWSTR | in | DER エンコードされた要求を格納する BSTR 変数。詳細については、「解説」を参照してください。 |
| Encoding | EncodingType | in | DER エンコードされた要求を格納する入力文字列に適用される Unicode エンコードの種類を指定する EncodingType 列挙値。既定値は XCN_CRYPT_STRING_BASE64 です。 |
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。有効な値には次の表に示す値が含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻り値/値 | 説明 |
|---|---|
|
証明書要求オブジェクトは既に初期化されています。 |
解説(Remarks)
InitializeDecode メソッドは、既存の PKCS #10 要求をデコードし、取得した情報を使用して、新しい要求オブジェクト用に次のコレクションを初期化します。
- 空の ICryptAttributes コレクション。
- 空の IX509Extensions コレクション。
- 新しい要求から抑制する属性および拡張の OID 用の空の IObjectIds コレクション。
さらに、メソッドは次の処理を行います。
- デコードされた拡張を IX509Extensions コレクションに追加します。
- デコードされた属性を ICryptAttributes コレクションに追加します。
- デコードされたクリティカル拡張で CriticalExtensions プロパティを設定します。
- ClientId プロパティを設定します。
- TemplateObjectId プロパティを設定します。
既定では、InitializeDecode メソッドは、デコードする証明書要求がエンドユーザーを対象としていると想定します。Windows 8 および Windows Server 2012 以降では、この既定の動作を変更できます。IX509CertificateRequestPkcs10 インターフェイスのインスタンスを作成した後、Encoding パラメーターを XCN_CRYPT_STRING_BINARY に設定し、strEncodedData パラメーターを次のいずれかの値に設定して InitializeDecode を呼び出します。
| 値 | 説明 |
|---|---|
| L"ContextMachine" | エンコードされた証明書要求はコンピューターを対象としています。 |
| L"ContextUser" | エンコードされた証明書要求はエンドユーザーを対象としています。 |
| L"ContextAdministratorForceMachine" | エンコードされた証明書が、コンピューターの代わりに動作する管理者によって要求されています。 |
その後、エンコードされた証明書を strEncodedData 引数に設定して、InitializeDecode メソッドを再度呼び出します。
証明書要求が署名されていること、および署名が有効であることを検証します。 (IX509CertificateRequestPkcs10.CheckSignature)
| AllowedSignatureTypes | Pkcs10AllowedSignatureTypes | in | Pkcs10AllowedSignatureTypes 列挙値。次の値のビット単位の組み合わせを指定できます。
|
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。有効な値には次の表に示す値が含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻り値 | 説明 |
|---|---|
| 証明書要求が署名されていません。 | |
| 署名の種類が AllowedSignatureTypes パラメーターで指定されていません。 | |
| AllowedSignatureTypes パラメーターで指定された値が、Pkcs10AllowedSignatureTypes 列挙型のメンバーではありません。 |
解説(Remarks)
このメソッドは、公開キーを使用して署名を復号し、署名を証明書要求のハッシュと比較します。
要求オブジェクトに関連付けられた暗号化プロバイダーのいずれかがスマートカードプロバイダーであるかどうかを示すブール値を取得します。
| pValue | VARIANT_BOOL* | out | 列挙および選択されたプロバイダーのいずれかがスマートカードプロバイダーであるかどうかを示す VARIANT_BOOL 変数へのポインター。 |
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。有効な値には次の表に示す値が含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻り値/値 | 説明 |
|---|---|
| 秘密キーが見つからないか、秘密キーに関連付けられた ICspInformation オブジェクトが見つかりません。 | |
| オブジェクトが初期化されていません。 |
解説(Remarks)
IsSmartCard メソッドは、まず秘密キーに関連付けられたプロバイダーを確認します。そのプロバイダーがスマートカード用でない場合、メソッドは CspStatuses コレクションを反復処理し、スマートカード用に選択されているプロバイダーが見つかるまで検索します。選択されたスマートカードプロバイダーが見つからない場合、メソッドは False を返します。このメソッドを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
証明書要求の作成に使用されたテンプレートのオブジェクト識別子 (OID) を取得します。 (IX509CertificateRequestPkcs10.get_TemplateObjectId)
| ppValue | IObjectId** | out | 要求に関連付けられた証明書テンプレートの OID を表す IObjectId オブジェクトを受け取るポインタである。 |
解説(Remarks)
オブジェクト識別子は、テンプレートの Active Directory 共通名 (CN) の OID にすることができます。このプロパティを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
証明書要求に含まれる公開キーを格納する IX509PublicKey オブジェクトを取得します。
| ppValue | IX509PublicKey** | out | 要求に含まれる公開鍵を表す IX509PublicKey オブジェクトを受け取るポインタである。 |
解説(Remarks)
このプロパティを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
証明書要求の署名に使用された秘密キーを格納する IX509PrivateKey オブジェクトを取得します。
| ppValue | IX509PrivateKey** | out | 要求に関連付けられた秘密鍵を表す IX509PrivateKey オブジェクトを受け取るポインタである。 |
解説(Remarks)
このプロパティを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
証明書要求が null 署名であるかどうかを示すブール値を取得します。
| pValue | VARIANT_BOOL* | out | 要求が NULL 署名(署名なし)であるかどうかを表す VARIANT_BOOL を受け取るポインタである。 |
解説(Remarks)
null 署名の PKCS #10 証明書要求は、実際には署名されていません。つまり、署名は SHA-1 などのダイジェストアルゴリズムを使用して作成されたハッシュですが、要求は RSA などの公開キーアルゴリズムでは暗号化されていません。これは、証明機関 の相互証明を行う場合によくあるように、秘密キーが利用できない場合に使用できます。詳細については、InitializeFromPublicKey メソッドを参照してください。
このプロパティを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
既存の秘密キーが要求の署名に使用されたかどうかを示すブール値を取得します。
| pValue | VARIANT_BOOL* | out | 既存の鍵を再利用するかどうかを表す VARIANT_BOOL を受け取るポインタである。 |
解説(Remarks)
InitializeFromCertificate メソッドを呼び出して要求オブジェクトを初期化した場合、要求の署名に使用する秘密キーを証明書から継承するかどうかを示す値を InheritOptions パラメーターに指定しています。このパラメーターに InheritPrivateKey を指定した場合、ReuseKey プロパティはブール値の true を返します。
InitializeFromCertificate メソッドに渡された証明書を取得します。
| Encoding | EncodingType | in | 取得する旧証明書文字列のエンコーディング種別を指定する EncodingType 列挙値である。 |
| pValue | LPWSTR* | out | 更新元となる旧証明書を指定エンコーディングの文字列として受け取るポインタである。 |
解説(Remarks)
このプロパティを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
証明書を要求するエンティティの X.500 識別名を指定または取得します。 (Get)
| ppValue | IX500DistinguishedName** | out | 要求のサブジェクト(主体)識別名を表す IX500DistinguishedName オブジェクトを受け取るポインタである。 |
解説(Remarks)
Encode メソッドを呼び出す前にこのプロパティを設定する必要があり、また、このプロパティを呼び出す前に IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
証明書を要求するエンティティの X.500 識別名を指定または取得します。 (Put)
| pValue | IX500DistinguishedName* | inoptional | 要求のサブジェクト(主体)識別名を表す IX500DistinguishedName オブジェクトを渡す。 |
解説(Remarks)
Encode メソッドを呼び出す前にこのプロパティを設定する必要があり、また、このプロパティを呼び出す前に IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
証明書要求に関連付けられた秘密キーの使用目的に一致する ICspStatus オブジェクトのコレクションを取得します。
| ppValue | ICspStatuses** | out | 利用可能な暗号化サービスプロバイダー(CSP)の状態コレクション ICspStatuses を受け取るポインタである。 |
解説(Remarks)
このプロパティは、ICspStatus オブジェクトのコレクションを取得します。各オブジェクトは、1 つのプロバイダー/アルゴリズムのペアを表します。CspStatuses プロパティは GetCspStatuses メソッドとは異なります。メソッドでは KeySpec パラメーターを設定できますが、CspStatuses は IX509CertificateRequestPkcs10 オブジェクトに関連付けられた秘密キーに設定された KeySpec プロパティを使用します。次のいずれかの値を指定できます。
| 値 | 説明 |
|---|---|
| XCN_AT_NONE | Cryptography API: Next Generation (CNG) プロバイダーのみが選択されます。 |
| XCN_AT_KEYEXCHANGE | 暗号化アルゴリズム (キー交換を含む) を備えた CryptoAPI 暗号化サービスプロバイダー (CSP) のみが選択されます。 |
| XCN_AT_SIGNATURE | 署名アルゴリズムを備えた CryptoAPI 暗号化サービスプロバイダー (CSP) のみが選択されます。 |
要求オブジェクトの初期化時にテンプレートを指定した場合、pKIDefaultCSPs や pKIDefaultKeySpec などのテンプレート属性が、コレクション内で最初に有効になるプロバイダー/アルゴリズムのペアに影響します。各 ICspStatus オブジェクトに対して次のプロパティを呼び出すことで、ペアに関する情報を取得できます。
- CspInformation プロパティはプロバイダー情報を取得します。
- CspAlgorithm プロパティはアルゴリズム情報を取得します。
- EnrollmentStatus プロパティは IX509EnrollmentStatus オブジェクトを取得します。ステータスオブジェクトの Selected プロパティを呼び出して、このプロバイダー/アルゴリズムのペアがこの要求で有効になっているかどうかを判断します。
- Ordinal プロパティは、コレクション内でのプロバイダー/アルゴリズムのペアの位置を取得します。
このメソッドで取得されたコレクションは、要求オブジェクトに内部的に保存されます。コレクションは、PKCS #10 オブジェクトが存在する限り存在します。
たとえば、要求オブジェクトに関連付けられた秘密キーの KeySpec プロパティが XCN_AT_SIGNATURE に設定されており、テンプレートを使用して要求を初期化するとします。この場合、次のことが成り立ちます。
- ICspStatus オブジェクトのコレクションが作成され、IX509CertificateRequestPkcs10 オブジェクトに保存されます。コレクションには、コンピューターにインストールされているすべての有効なプロバイダー/アルゴリズムのペアが含まれます。
- KeySpec プロパティが XCN_AT_NONE に設定されていないため、コレクション内の各 Cryptography API: Next Generation (CNG) プロバイダー/アルゴリズムのペアについて Selected プロパティは SelectedNo に設定されます。
- KeySpec プロパティが XCN_AT_KEYEXCHANGE に設定されていないため、アルゴリズムをデータの暗号化またはキーのアーカイブにのみ使用できるコレクション内の各 CryptoAPI CSP/アルゴリズムのペアについて Selected プロパティは SelectedNo に設定されます。
- テンプレートまたは秘密キーによって参照されているものの、コンピューターでサポートされていない各プロバイダーについて、プレースホルダーの ICspStatus オブジェクトが作成されてコレクションに追加され、Selected プロパティは SelectedNo に設定されます。
- アルゴリズムをデータの署名にのみ使用できる各 CryptoAPI CSP/アルゴリズムのペアについて、Selected プロパティは SelectedYes に設定されます。
- Ordinal プロパティは、pKIDefaultCSPs テンプレート属性によって識別される CSP の順序 (存在する場合) を反映するように設定されます。属性で最初に列挙された CSP が、コレクション内で最初に並べられます。このプロパティは、秘密キーを作成する必要がある場合に、登録 (エンロール) 時に使用されます。最初に選択された CSP/アルゴリズムのペアがキーの作成に使用されますが、その操作が失敗した場合は、次に選択されたペアが試行されます。
このメソッドを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
コンピューターがサポートする暗号化機能を示す IX509ExtensionSmimeCapabilities コレクションを作成するかどうかを Encode メソッドに指示するブール値を指定または取得します。 (Get)
| pValue | VARIANT_BOOL* | out | S/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 プロパティを設定してください。
コンピューターがサポートする暗号化機能を示す IX509ExtensionSmimeCapabilities コレクションを作成するかどうかを Encode メソッドに指示するブール値を指定または取得します。 (Put)
| Value | VARIANT_BOOL | in | S/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 プロパティを設定してください。
証明書要求の署名に関する情報を格納する IX509SignatureInformation オブジェクトを取得します。
| ppValue | IX509SignatureInformation** | out | 署名アルゴリズム等の署名情報を表す IX509SignatureInformation オブジェクトを受け取るポインタである。 |
解説(Remarks)
IX509SignatureInformation オブジェクトには、証明書要求の署名に使用されるハッシュ、公開キー、および署名の各アルゴリズムに関する情報が格納されます。要求に IX509SignatureInformation オブジェクトが関連付けられていない場合、このプロパティはオブジェクトの作成を試み、秘密キーを使用して PublicKeyAlgorithm プロパティを設定します。
このプロパティを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化し、Encode を呼び出す必要があります。詳細については、次のいずれかのメソッドを参照してください。
新しい秘密キーのコンテナー名を作成するために使用するプレフィックスを指定または取得します。 (Get)
| pValue | LPWSTR* | out | 鍵コンテナー名に付与するプレフィックス文字列を受け取るポインタである。 |
解説(Remarks)
各 CryptoAPI 暗号化サービスプロバイダー または Cryptography API: Next Generation (CNG) キープロバイダーは、秘密キー用のキーコンテナーを保持します。既存のキーのキーコンテナー名を取得するには、IX509PrivateKey オブジェクトの ContainerName プロパティを使用します。
プレフィックスには、キーコンテナー名の最大長とコンテナー名に使用できる文字の範囲内で、任意の文字列を含めることができます。たとえば、キーコンテナー名を指定するために ContainerName プロパティを呼び出さなかった場合、秘密キーの作成時にコンテナー名が自動的に作成され、コンテナー名のプレフィックスは文字列 "lp" になります。別の例として、テストハーネスを作成していて、それを生成したプログラムごとにキーコンテナーを区別したい場合は、実行可能ファイルの名前をプレフィックスとして使用できます。
Encode メソッドを呼び出す前にこのプロパティを設定する必要があり、また、このプロパティを呼び出す前に IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
新しい秘密キーのコンテナー名を作成するために使用するプレフィックスを指定または取得します。 (Put)
| Value | LPWSTR | in | 鍵コンテナー名に付与するプレフィックス文字列を指定する。 |
解説(Remarks)
各 CryptoAPI 暗号化サービスプロバイダー または Cryptography API: Next Generation (CNG) キープロバイダーは、秘密キー用のキーコンテナーを保持します。既存のキーのキーコンテナー名を取得するには、IX509PrivateKey オブジェクトの ContainerName プロパティを使用します。
プレフィックスには、キーコンテナー名の最大長とコンテナー名に使用できる文字の範囲内で、任意の文字列を含めることができます。たとえば、キーコンテナー名を指定するために ContainerName プロパティを呼び出さなかった場合、秘密キーの作成時にコンテナー名が自動的に作成され、コンテナー名のプレフィックスは文字列 "lp" になります。別の例として、テストハーネスを作成していて、それを生成したプログラムごとにキーコンテナーを区別したい場合は、実行可能ファイルの名前をプレフィックスとして使用できます。
Encode メソッドを呼び出す前にこのプロパティを設定する必要があり、また、このプロパティを呼び出す前に IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
オプションの証明書属性の ICryptAttributes コレクションを取得します。 (IX509CertificateRequestPkcs10.get_CryptAttributes)
| ppValue | ICryptAttributes** | out | 要求に含まれる暗号化属性のコレクション ICryptAttributes を受け取るポインタである。 |
解説(Remarks)
このプロパティを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
証明書要求に含まれる拡張のコレクションを取得します。 (IX509CertificateRequestPkcs10.get_X509Extensions)
| ppValue | IX509Extensions** | out | 要求に含まれる X.509 拡張のコレクション IX509Extensions を受け取るポインタである。 |
解説(Remarks)
このプロパティを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
クリティカルとしてマークされたバージョン 3 証明書拡張を識別する IObjectIds コレクションを取得します。 (IX509CertificateRequestPkcs10.get_CriticalExtensions)
| ppValue | IObjectIds** | out | クリティカル(重要)としてマークされた拡張の OID コレクション IObjectIds を受け取るポインタである。 |
解説(Remarks)
拡張のクリティカル性は、証明書を使用するアプリケーションに対して、その拡張を無視できるかどうかを示します。このプロパティを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
要求のエンコード時に要求へ追加されなかった既定の拡張および属性のオブジェクト識別子 (OID) のコレクションを取得します。
| ppValue | IObjectIds** | out | 要求から抑制(除外)する拡張の OID コレクション IObjectIds を受け取るポインタである。 |
解説(Remarks)
属性と拡張は、証明書要求のエンコード時または初期化時に追加されます。SuppressDefaults プロパティを呼び出すことで、既定の拡張および属性の追加を抑制できます。PKCS #10 要求では、次の属性が既定で追加されます。
- XCN_OID_REQUEST_CLIENT_INFO (IX509AttributeClientId)
- XCN_OID_ENROLLMENT_CSP_PROVIDER (IX509AttributeCspProvider)
- XCN_OID_OS_VERSION (IX509AttributeOSVersion)
- XCN_OID_RENEWAL_CERTIFICATE (IX509AttributeRenewalCertificate)
- XCN_OID_RSA_SMIMECapabilities (IX509ExtensionSmimeCapabilities)
- XCN_OID_SUBJECT_KEY_IDENTIFIER (IX509ExtensionSubjectKeyIdentifier)
- XCN_OID_KEY_USAGE (IX509ExtensionKeyUsage)
このプロパティを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
Encode メソッドによって作成された未署名の証明書要求を取得します。
| Encoding | EncodingType | in | 取得する署名対象データのエンコーディング種別を指定する EncodingType 列挙値である。 |
| pValue | LPWSTR* | out | 署名前の(署名対象となる)要求データを指定エンコーディングの文字列として受け取るポインタである。 |
解説(Remarks)
Encode メソッドは、DER エンコードされた署名済みの証明書要求を作成しますが、未署名の要求もバイト配列として内部的に保存します。RawDataToBeSigned プロパティを使用すると、そのバイナリデータを Unicode エンコードされた文字列として取得できます。
このプロパティを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化し、Encode を呼び出す必要があります。詳細については、次のいずれかのメソッドを参照してください。
Encode メソッドによって作成された要求の署名を取得します。
| Encoding | EncodingType | in | 取得する署名データのエンコーディング種別を指定する EncodingType 列挙値である。 |
| pValue | LPWSTR* | out | 要求に付与された署名を指定エンコーディングの文字列として受け取るポインタである。 |
解説(Remarks)
Encode メソッドは、DER エンコードされた署名済みの証明書要求を作成し、それをバイト配列として内部的に保存します。Signature プロパティを使用すると、署名を格納するバイト配列を取得できます。
このプロパティを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化し、Encode を呼び出す必要があります。詳細については、次のいずれかのメソッドを参照してください。
呼び出し元が指定した秘密キーの使用目的に一致するすべてのプロバイダー/アルゴリズムのペアを格納する ICspStatuses コレクションを取得します。
| KeySpec | X509KeySpec | in | キーの使用目的を指定する X509KeySpec 列挙値。次のいずれかの値を指定できます。
| ||||||||
| ppCspStatuses | ICspStatuses** | out | コレクションを表す ICspStatuses インターフェイスへのポインターを受け取る変数のアドレス。 |
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。有効な値には次の表に示す値が含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻り値 | 説明 |
|---|---|
| 秘密キーが見つかりません。 | |
| オブジェクトが初期化されていません。 |
解説(Remarks)
このメソッドは、ICspStatus オブジェクトのコレクションを取得します。各オブジェクトは、1 つのプロバイダー/アルゴリズムのペアを表します。IX509CertificateRequestPkcs10 要求オブジェクトの初期化時にテンプレートを指定した場合、pKIDefaultCSPs や pKIDefaultKeySpec などのテンプレート属性が、最初に有効になるペアに影響します。各 ICspStatus オブジェクトに対して次のプロパティを呼び出すことで、ペアに関する情報を取得できます。
- CspInformation プロパティはプロバイダー情報を取得します。
- CspAlgorithm プロパティはアルゴリズム情報を取得します。
- EnrollmentStatus プロパティは IX509EnrollmentStatus オブジェクトを取得します。ステータスオブジェクトの Selected プロパティを呼び出して、このプロバイダー/アルゴリズムのペアがこの要求で有効になっているかどうかを判断します。
- Ordinal プロパティは、プロバイダー/アルゴリズムのペアのコレクション内での位置を取得します。
このメソッドで取得されたコレクションは、要求オブジェクトに内部的に保存されます。KeySpec 値ごとに 1 つずつ、最大 3 つのコレクションを作成して保存できます。これは、プロバイダー/アルゴリズムのペアの選択状態を保持し、関連するプロパティページを複数回にわたって正確かつ迅速に表示できるようにするため、また、秘密キーを作成する必要がある場合に Encode メソッドがどのプロバイダーとアルゴリズムが選択されているかを識別できるようにするために行われます。プロバイダー/アルゴリズムのペアの選択状態が変更されると、その変更は該当するコレクションに保存されます。あるコレクションのメンバーに加えた変更は、他のいずれのコレクションのメンバーにも影響しません。コレクションは、PKCS #10 オブジェクトが存在する限り存在します。
たとえば、このメソッドが KeySpec パラメーターを XCN_AT_SIGNATURE に設定して呼び出され、テンプレートを使用して要求を初期化するとします。この場合、次のことが成り立ちます。
- ICspStatus オブジェクトのコレクションが作成され、IX509CertificateRequestPkcs10 オブジェクトに保存されます。コレクションには、コンピューターにインストールされているすべての有効なプロバイダー/アルゴリズムのペアが含まれます。
- KeySpec パラメーターが XCN_AT_NONE に設定されていないため、コレクション内の各 Cryptography API: Next Generation (CNG) プロバイダー/アルゴリズムのペアについて Selected プロパティは SelectedNo に設定されます。
- KeySpec パラメーターが XCN_AT_KEYEXCHANGE に設定されていないため、アルゴリズムをデータの暗号化またはキーのアーカイブに使用できるコレクション内の各 CryptoAPI CSP/アルゴリズムのペアについて Selected プロパティは SelectedNo に設定されます。
- テンプレートまたは秘密キーによって参照されているものの、コンピューターでサポートされていない各プロバイダーについて、プレースホルダーの ICspStatus オブジェクトが作成されてコレクションに追加され、Selected プロパティは SelectedNo に設定されます。
- アルゴリズムをデータの署名にのみ使用できる各 CryptoAPI CSP/アルゴリズムのペアについて、Selected プロパティは SelectedYes に設定されます。
- Ordinal プロパティは、pKIDefaultCSPs テンプレート属性によって識別される CSP の順序 (存在する場合) を反映するように設定されます。属性で最初に列挙された CSP が、コレクション内で最初に並べられます。このプロパティは、秘密キーを作成する必要がある場合に、登録 (エンロール) 時に使用されます。最初に選択された CSP/アルゴリズムのペアがキーの作成に使用されますが、その操作が失敗した場合は、次に選択されたペアが試行されます。
- 同じ KeySpec パラメーターでこのメソッドを再度呼び出すと、そのパラメーター値に対して以前に作成された既存のコレクションへのポインターが取得されます。
- 異なる KeySpec パラメーターでこのメソッドを再度呼び出しても、XCN_AT_SIGNATURE の KeySpec 値に対して作成されたコレクションには影響しません。さらに、新しいコレクションのいずれかのメンバーの Selected プロパティを変更しても、以前のコレクションのメンバーには影響しません。
GetCspStatuses メソッドは、KeySpec パラメーターを使用する点で CspStatuses プロパティとは異なります。メソッドではユーザーがこの値を指定できますが、プロパティは要求オブジェクトに関連付けられた秘密キーに設定された値を使用します。
このメソッドを呼び出す前に、IX509CertificateRequestPkcs10 オブジェクトを初期化する必要があります。詳細については、次のいずれかのメソッドを参照してください。
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 不要)。#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 sptr #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 sptr #comfunc global IX509CertificateRequestPkcs10_get_ReuseKey 43 sptr #comfunc global IX509CertificateRequestPkcs10_get_OldCertificate 44 int,sptr #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 sptr #comfunc global IX509CertificateRequestPkcs10_put_SmimeCapabilities 49 int #comfunc global IX509CertificateRequestPkcs10_get_SignatureInformation 50 sptr #comfunc global IX509CertificateRequestPkcs10_get_KeyContainerNamePrefix 51 sptr #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,sptr #comfunc global IX509CertificateRequestPkcs10_get_Signature 58 int,sptr #comfunc global IX509CertificateRequestPkcs10_GetCspStatuses 59 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。