Метод 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
Формат Юникода BASE64 без начала и конца.
CR_IN_BASE64HEADER
Формат Юникода BASE64 с начальным и конечным.
CR_IN_BINARY
Двоичный формат.
CR_IN_ENCODEANY
Попробуйте все форматы CR_IN_BASE64HEADER, CR_IN_BASE64 или CR_IN_BINARY.
 

Для указания типа запроса можно использовать один из следующих флагов значений формата.

Значение Значение
CR_IN_RETURNCHALLENGE
Возвращает запрос, который можно отправить в ЦС. Задача заключается в полном запросе управления сертификатами через CMS (CMC). Если этот флаг включен, вызов метода GetFullResponseProperty с флагом FR_PROP_FULLRESPONSE возвращает ответ CMC, содержащий запрос аттестации ключа.
CR_IN_CHALLENGERESPONSE
Вызов — это ответ на вызов. RequestId должен передаваться в параметре strAttributes , а ответ на запрос — в параметре strRequest . Этот флаг должен быть включен, когда приложению необходимо отправить обратно расшифрованный запрос в ЦС. Затем можно вызвать метод 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 No 7 (агент по продлению или регистрации).
CR_IN_PKCS10
Запрос PKCS 10.
CR_IN_RPC
Передай сообщения с помощью RPC вместо DCOM.
CR_IN_FULLRESPONSE
Возвращает полный ответ CMC.
CR_IN_CRLS
Включите текущие списки отзыва сертификатов.
CR_IN_MACHINE
Используйте контекст компьютера службы ключей.
CR_IN_ROBO
Указывает, что сообщение запрашивается от имени другого отправителя.

Если центр сертификации (ЦС) не настроен для "продлить от имени", ЦС отклоняет запрос.

Дополнительные сведения о включении функции "продление от имени" в ЦС см. в разделе Настройка веб-службы регистрации сертификатов для режима "Только продление".

Запрос должен быть запросом на продление, а сертификат подписи должен использовать тот же шаблон, что и запрос.

Кроме того, запрос будет выполнен, только если выполняется одно из следующих условий:

  • Сертификат подписи должен быть выдан тем же центром сертификации.
  • Расширение SAN2 сертификата подписи имеет имя участника-пользователя субъекта.
  • Имя субъекта сертификата подписи содержит 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 указано в разделе Флаги, строка strRequest должна быть строкой Юникода.

[in] strAttributes

Указатель на строку, содержащую необязательные дополнительные атрибуты для запроса. Каждый атрибут представляет собой пару строк имя-значение. Символ двоеточия разделяет имя и значение, а символ новой строки разделяет несколько пар "имя-значение", например:

C++ "AttributeName1:AttributeValue1\nAttributeName2:AttributeValue2"
VB "AttributeName1:AttributeValue1" & vbNewLine & "AttributeName2:AttributeValue2"
Когда сервер служб сертификатов анализирует имена атрибутов, он игнорирует пробелы, дефисы (знаки "минус") и регистр. Например, "AttributeName1", "Attribute Name1" и "Attribute-name1" являются эквивалентными. Для значений атрибутов сервер служб сертификатов игнорирует пробелы в начале и конце.

[in] strConfig

Представляет допустимую строку конфигурации для сервера служб сертификатов. Строка может быть URL-адресом HTTPS для сервера регистрации или в формате Имя_\компьютера CAName, где ComputerName — сетевое имя сервера, а CAName — общее имя центра сертификации, указанное при настройке служб сертификатов. Дополнительные сведения об имени строки конфигурации см. в разделе ICertConfig.

Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: URL-адрес HTTPS не поддерживается в качестве входных данных.

[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 из файла, убедитесь, что файл находится в Юникоде, или преобразуйте его из ASCII в Юникод перед отправкой запроса с помощью этого метода.

Примеры

    //  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
Header certcli.h (включая Certsrv.h)
Библиотека Certidl.lib
DLL Certcli.dll

См. также раздел

CCertRequest

ICEnroll::createPKCS10

ICertConfig

ICertRequest

ICertRequest2

ICertRequest3