Метод 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
Указывает формат запроса, тип запроса и то, зашифрован ли запрос. Один из следующих флагов атрибутов формата можно использовать для указания способа кодирования запроса.
Для указания типа запроса можно использовать один из следующих флагов значений формата.
Значение | Значение |
---|---|
|
Возвращает запрос, который можно отправить в ЦС. Задача заключается в полном запросе управления сертификатами через CMS (CMC). Если этот флаг включен, вызов метода GetFullResponseProperty с флагом FR_PROP_FULLRESPONSE возвращает ответ CMC, содержащий запрос аттестации ключа. |
|
Вызов — это ответ на вызов. RequestId должен передаваться в параметре strAttributes , а ответ на запрос — в параметре strRequest . Этот флаг должен быть включен, когда приложению необходимо отправить обратно расшифрованный запрос в ЦС. Затем можно вызвать метод GetFullResponseProperty , чтобы получить выданный сертификат конечной сущности. |
|
Запрос управления сертификатами через CMS (CMC). |
|
Попробуйте все форматы CR_IN_CMC, CR_IN_KEYGEN, CR_IN_PKCS7 или CR_IN_PKCS10. |
|
Запрос Keygen (формат Netscape). |
|
Запрос PKCS No 7 (агент по продлению или регистрации). |
|
Запрос PKCS 10. |
|
Передай сообщения с помощью RPC вместо DCOM. |
|
Возвращает полный ответ CMC. |
|
Включите текущие списки отзыва сертификатов. |
|
Используйте контекст компьютера службы ключей. |
|
Указывает, что сообщение запрашивается от имени другого отправителя.
Если центр сертификации (ЦС) не настроен для "продлить от имени", ЦС отклоняет запрос. Дополнительные сведения о включении функции "продление от имени" в ЦС см. в разделе Настройка веб-службы регистрации сертификатов для режима "Только продление". Запрос должен быть запросом на продление, а сертификат подписи должен использовать тот же шаблон, что и запрос. Кроме того, запрос будет выполнен, только если выполняется одно из следующих условий:
|
|
Не включайте в данные запроса, которые идентифицируют клиента.
Windows Server 2008 и Windows Server 2003: Этот флаг не поддерживается. |
|
Указывает, что подключение DCOM к серверу установлено, но запрос не отправляется. |
[in] strRequest
Указатель на строку, содержащую запрос сертификата. Если CR_IN_BASE64 или CR_IN_BASE64HEADER указано в разделе Флаги, строка strRequest должна быть строкой Юникода.
[in] strAttributes
Указатель на строку, содержащую необязательные дополнительные атрибуты для запроса. Каждый атрибут представляет собой пару строк имя-значение. Символ двоеточия разделяет имя и значение, а символ новой строки разделяет несколько пар "имя-значение", например:
C++ | "AttributeName1:AttributeValue1\nAttributeName2:AttributeValue2" |
VB | "AttributeName1:AttributeValue1" & vbNewLine & "AttributeName2:AttributeValue2" |
[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
Возвращаемое значение указывает ликвидацию запроса. Ликвидация является одним из следующих значений.Код возврата | Описание |
---|---|
|
Запрос отклонен |
|
Не удалось выполнить запрос |
|
Запрос не завершен |
|
Выданный сертификат |
|
Сертификат, выданный отдельно |
|
Запрос, принятый при отправке |
Комментарии
Если вы читаете запрос формата 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 |