Método ICertRequest::Submit (certcli.h)
El método Submit envía una solicitud al servidor de Servicios de certificados.
Si el estado de disposición resultante es CR_DISP_ISSUED, puede recuperar el certificado emitido llamando al método ICertRequest3::GetCertificate .
Sintaxis
HRESULT Submit(
[in] LONG Flags,
[in] const BSTR strRequest,
[in] const BSTR strAttributes,
[in] const BSTR strConfig,
[out, retval] LONG *pDisposition
);
Parámetros
[in] Flags
Especifica el formato de solicitud, el tipo de solicitud y si la solicitud está cifrada. Se puede usar una de las siguientes marcas de atributo de formato para especificar cómo se codifica la solicitud.
Se puede usar una de las siguientes marcas de valor de formato para especificar el tipo de la solicitud.
Valor | Significado |
---|---|
|
Devuelve un desafío que se puede enviar a una entidad de certificación. El desafío es una solicitud completa de administración de certificados a través de CMS (CMC). Cuando esta marca está activada, al llamar al método GetFullResponseProperty con la marca FR_PROP_FULLRESPONSE devuelve una respuesta de CMC que contiene el desafío de atestación de claves. |
|
La llamada es una respuesta a un desafío. El requestId debe pasarse en el parámetro strAttributes y la respuesta al desafío debe pasarse en el parámetro strRequest . Esta marca debe activarse cuando una aplicación necesita devolver el desafío descifrado a la ENTIDAD de certificación. A continuación, puede llamar al método GetFullResponseProperty para obtener el certificado de entidad final emitido. |
|
Una solicitud de administración de certificados a través de CMS (CMC). |
|
Pruebe todos los formatos de CR_IN_CMC, CR_IN_KEYGEN, CR_IN_PKCS7 o CR_IN_PKCS10. |
|
Solicitud keygen (formato Netscape). |
|
Solicitud PKCS #7 (agente de renovación o registro). |
|
Solicitud PKCS #10. |
|
Transmita los mensajes mediante RPC en lugar de DCOM. |
|
Devuelve una respuesta completa de CMC. |
|
Incluya las listas de revocación de certificados actuales. |
|
Use el contexto del equipo de servicio de claves. |
|
Indica que el mensaje se solicita en nombre de otro remitente.
Si la entidad de certificación (CA) no está configurada para "renovar en nombre de", la ENTIDAD de certificación rechaza la solicitud. Para obtener más información sobre cómo habilitar "renovar en nombre de" en la ENTIDAD de certificación, consulte Configuración del servicio web de inscripción de certificados para el modo de solo renovación. La solicitud debe ser una solicitud de renovación y el certificado de firma debe usar la misma plantilla que la solicitud. Además, la solicitud solo se realizará correctamente cuando se cumple una de las condiciones siguientes:
|
|
No incluya en los datos de solicitud que identifiquen al cliente.
Windows Server 2008 y Windows Server 2003: Esta marca no se admite. |
|
Especifica que se establece la conexión DCOM con el servidor, pero la solicitud no se envía. |
[in] strRequest
Puntero a la cadena que contiene la solicitud de certificado. Si CR_IN_BASE64 o CR_IN_BASE64HEADER se especificó en Flags, strRequest debe ser una cadena Unicode.
[in] strAttributes
Puntero a la cadena que contiene atributos adicionales opcionales para la solicitud. Cada atributo es un par de cadenas de nombre-valor. El carácter de dos puntos separa el nombre y el valor, y un carácter de nueva línea separa varios pares nombre-valor, por ejemplo:
C++ | "AttributeName1:AttributeValue1\nAttributeName2:AttributeValue2" |
VB | "AttributeName1:AttributeValue1" & vbNewLine & "AttributeName2:AttributeValue2" |
[in] strConfig
Representa una cadena de configuración válida para el servidor de Servicios de certificados. La cadena puede ser una dirección URL HTTPS para un servidor de inscripción o con el formato NombreDeEquipoDeEquipo\, donde NombreDeEquipo es el nombre de red del servidor y CAName es el nombre común de la entidad de certificación, tal como se especifica durante la configuración de Servicios de certificados. Para obtener información sobre el nombre de la cadena de configuración, vea ICertConfig.
Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: No se admite una dirección URL HTTPS como entrada.
[out, retval] pDisposition
Puntero al valor de disposición de la solicitud.
Valor devuelto
C++
Si el método se realiza correctamente, el método devuelve S_OK.Tras completar correctamente esta función, *pDisposition se establece en uno de los valores de la tabla siguiente.
Si se produce un error en el método, devuelve un valor HRESULT que indica el error. Para obtener una lista de códigos de error comunes, consulte Valores HRESULT comunes.
VB
El valor devuelto especifica la disposición de la solicitud. La disposición es uno de los siguientes valores.Código devuelto | Descripción |
---|---|
|
Solicitud denegada |
|
Error en la solicitud |
|
La solicitud no se completó |
|
Certificado emitido |
|
Certificado emitido por separado |
|
Solicitud realizada en envío |
Comentarios
Si lee una solicitud de formato BASE64 de un archivo, asegúrese de que el archivo está en Unicode o de convertirlo de ASCII a Unicode antes de enviar la solicitud con este método.
Ejemplos
// 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();
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | certcli.h (incluya Certsrv.h) |
Library | Certidl.lib |
Archivo DLL | Certcli.dll |