次の方法で共有


ICertRequest::Submit メソッド (certcli.h)

Submit メソッドは、証明書サービス サーバーに要求を送信します。

結果の処理状態がCR_DISP_ISSUED場合は、 ICertRequest3::GetCertificate メソッドを呼び出して発行された証明書を取得できます。

構文

HRESULT Submit(
  [in]          LONG       Flags,
  [in]          const BSTR strRequest,
  [in]          const BSTR strAttributes,
  [in]          const BSTR strConfig,
  [out, retval] LONG       *pDisposition
);

パラメーター

[in] Flags

要求の形式、要求の種類、および要求が暗号化されているかどうかを指定します。 次のいずれかの形式属性フラグを使用して、要求のエンコード方法を指定できます。

意味
CR_IN_BASE64
開始/終了のない Unicode BASE64 形式。
CR_IN_BASE64HEADER
開始/終了を含む Unicode BASE64 形式。
CR_IN_BINARY
バイナリ形式。
CR_IN_ENCODEANY
すべてのCR_IN_BASE64HEADER、CR_IN_BASE64、またはCR_IN_BINARY形式をお試しください。
 

次のいずれかの書式値フラグを使用して、要求の種類を指定できます。

意味
CR_IN_RETURNCHALLENGE
CA に送信できるチャレンジを返します。 課題は、 CMS (CMC) 経由の証明書管理 の完全な要求です。 このフラグをオンにすると、FR_PROP_FULLRESPONSE フラグを指定して GetFullResponseProperty メソッドを呼び出すと、主要な構成証明チャレンジを含む CMC 応答が返されます。
CR_IN_CHALLENGERESPONSE
呼び出しは、チャレンジに対する応答です。 RequestId は strAttributes パラメーターで渡す必要があり、チャレンジへの応答は strRequest パラメーターで渡す必要があります。 このフラグは、アプリケーションが復号化されたチャレンジを CA に送り返す必要がある場合にオンにする必要があります。 その後、 GetFullResponseProperty メソッドを呼び出して、発行された終了エンティティ証明書を取得できます。
CR_IN_CMC
CMS (CMC) 経由の証明書管理要求。
CR_IN_FORMATANY
すべてのCR_IN_CMC、CR_IN_KEYGEN、CR_IN_PKCS7、またはCR_IN_PKCS10形式をお試しください。
CR_IN_KEYGEN
Keygen 要求 (Netscape 形式)。
CR_IN_PKCS7
PKCS #7 要求 (更新または登録エージェント)。
CR_IN_PKCS10
PKCS #10 要求。
CR_IN_RPC
DCOM の代わりに RPC を使用してメッセージを送信します。
CR_IN_FULLRESPONSE
完全な CMC 応答を返します。
CR_IN_CRLS
現在の証明書失効リストを含めます。
CR_IN_MACHINE
キー サービス コンピューターのコンテキストを使用します。
CR_IN_ROBO
別の送信者に代わってメッセージが要求されていることを示します。

証明機関 (CA) が "代理更新" 用に構成されていない場合、CA は要求を拒否します。

CA で "代理更新" を有効にする方法の詳細については、「 更新専用モードの証明書登録 Web サービスの構成」を参照してください。

要求は更新要求である必要があり、署名証明書は要求と同じテンプレートを使用している必要があります。

さらに、要求は、次のいずれかの条件が満たされている場合にのみ成功します。

  • 署名証明書は、同じ CA によって発行されている必要があります
  • 署名証明書の SAN2 拡張機能には、サブジェクトの UPN があります
  • 署名証明書のサブジェクト名には、サブジェクトのFQDN_1779があります
Windows Server 2008 および Windows Server 2003: このフラグはサポートされていません。
CR_IN_CLIENTIDNONE
クライアントを識別する要求データには含めないでください。

Windows Server 2008 および Windows Server 2003: このフラグはサポートされていません。

CR_IN_CONNECTONLY
サーバーとの DCOM 接続が確立されているが、要求は送信されないことを指定します。

[in] strRequest

証明書要求を含む文字列へのポインター。 CR_IN_BASE64またはCR_IN_BASE64HEADERが Flags で指定された場合、 strRequest は Unicode 文字列である必要があります。

[in] strAttributes

要求の省略可能な追加 属性 を含む文字列へのポインター。 各属性は、名前と値の文字列のペアです。 コロン文字は名前と値を区切り、改行文字は複数の名前と値のペアを区切ります。次に例を示します。

C++ "AttributeName1:AttributeValue1\nAttributeName2:AttributeValue2"
VB "AttributeName1:AttributeValue1" & vbNewLine & "AttributeName2:AttributeValue2"
Certificate Services サーバーは、属性名を解析するときに、スペース、ハイフン (マイナス記号)、大文字と小文字を無視します。 たとえば、"AttributeName1"、"Attribute Name1"、"Attribute-name1" はすべて同等です。 属性値の場合、Certificate Services サーバーは先頭と末尾の空白を無視します。

[in] strConfig

Certificate Services サーバーの有効な構成文字列を表します。 文字列は、登録サーバーの HTTPS URL、または ComputerName\CAName 形式で指定できます。 ComputerName はサーバーのネットワーク名、 CAName は証明書サービスのセットアップ時に入力された 証明機関の共通名です。 構成文字列名の詳細については、「 ICertConfig」を参照してください。

Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: HTTPS URL は入力としてサポートされていません。

[out, retval] pDisposition

要求の廃棄値へのポインター。

戻り値

C++

メソッドが成功した場合、メソッドは S_OKを返します。

この関数が正常に完了すると、*pDisposition は次の表のいずれかの値に設定されます。

メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。 一般的なエラー コードの一覧については、「 共通 HRESULT 値」を参照してください。

VB

戻り値は、要求の処理を指定します。 処理は、次のいずれかの値です。
リターン コード 説明
CR_DISP_DENIED
要求が拒否されました
CR_DISP_ERROR
要求が失敗しました
CR_DISP_INCOMPLETE
要求が完了しませんでした
CR_DISP_ISSUED
証明書発行日
CR_DISP_ISSUED_OUT_OF_BAND
個別に発行された証明書
CR_DISP_UNDER_SUBMISSION
申請時に受け取った要求

注釈

ファイルから BASE64 形式の要求を読み取る場合は、ファイルが Unicode であることを確認するか、このメソッドを使用して要求を送信する前に ASCII から Unicode に変換します。

    //  The pointer to the interface object.
    ICertRequest * pCertRequest = NULL;

    //  The variable for the computer\CAName.
    BSTR         bstrCA = NULL;

    //  The variable for the request.
    BSTR         bstrRequest = NULL;

    //  The variable for the attributes.
    BSTR         bstrAttribs = NULL;

    //  The variable for the disposition code.
    long        nDisp;

    HRESULT     hr;

    //  Initialize COM.
    hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

    //  Check status.
    if (FAILED(hr))
    {
        printf("Failed CoInitializeEx [%x]\n", hr);
        goto error;
    }

    //  Instantiate the CertConfig object.
    hr = CoCreateInstance(CLSID_CCertRequest,
                          NULL,
                          CLSCTX_INPROC_SERVER,
                          IID_ICertRequest,
                          (void **)&pCertRequest);
    if (FAILED(hr))
    {
        printf("Failed CoCreateInstance pCertRequest [%x]\n", hr);
        goto error;
    }

    //  Specify the certification authority.
    //  Note: In C++, produce one backslash (\) by using two.
    bstrCA = SysAllocString(L"server01\\myCAName");

    //  Create the request (not shown), and assign it to bstrRequest,
    //  for example, use ICEnroll::createPKCS10.

    //  Generate the attributes. In this case, no attributes
    //  are specified.
    bstrAttribs = SysAllocString(L"");
    
    //  Submit the request.
    hr = pCertRequest->Submit(CR_IN_BASE64 | CR_IN_PKCS10, 
                              bstrRequest,
                              bstrAttribs,
                              bstrCA, 
                              &nDisp );
    if (FAILED(hr))
    {
        printf("Failed Submit [%x]\n", hr);
        goto error;
    }
    else
    {
        //  Use the disposition value as needed.
    }

    //  Done processing.

error:

    //  Free BSTR values.
    if (NULL != bstrCA)
        SysFreeString(bstrCA);

    if (NULL != bstrRequest)
        SysFreeString(bstrRequest);

    if (NULL != bstrAttribs)
        SysFreeString(bstrAttribs);

    //  Clean up object resources.
    if (NULL != pCertRequest)
        pCertRequest->Release();

    //  Free COM resources.
    CoUninitialize();

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー certcli.h (Certsrv.h を含む)
Library Certidl.lib
[DLL] Certcli.dll

こちらもご覧ください

CCertRequest

ICEnroll::createPKCS10

ICertConfig

ICertRequest

ICertRequest2

ICertRequest3