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.

Valor Significado
CR_IN_BASE64
Formato Unicode BASE64 sin begin/end.
CR_IN_BASE64HEADER
Formato Unicode BASE64 con begin/end.
CR_IN_BINARY
Formato binario.
CR_IN_ENCODEANY
Pruebe todos los formatos de CR_IN_BASE64HEADER, CR_IN_BASE64 o CR_IN_BINARY.
 

Se puede usar una de las siguientes marcas de valor de formato para especificar el tipo de la solicitud.

Valor Significado
CR_IN_RETURNCHALLENGE
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.
CR_IN_CHALLENGERESPONSE
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.
CR_IN_CMC
Una solicitud de administración de certificados a través de CMS (CMC).
CR_IN_FORMATANY
Pruebe todos los formatos de CR_IN_CMC, CR_IN_KEYGEN, CR_IN_PKCS7 o CR_IN_PKCS10.
CR_IN_KEYGEN
Solicitud keygen (formato Netscape).
CR_IN_PKCS7
Solicitud PKCS #7 (agente de renovación o registro).
CR_IN_PKCS10
Solicitud PKCS #10.
CR_IN_RPC
Transmita los mensajes mediante RPC en lugar de DCOM.
CR_IN_FULLRESPONSE
Devuelve una respuesta completa de CMC.
CR_IN_CRLS
Incluya las listas de revocación de certificados actuales.
CR_IN_MACHINE
Use el contexto del equipo de servicio de claves.
CR_IN_ROBO
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:

  • La misma ENTIDAD de certificación debe haber emitido el certificado de firma.
  • La extensión SAN2 del certificado de firma tiene el UPN del asunto
  • El nombre del firmante del certificado de firma tiene el FQDN_1779 del firmante
Windows Server 2008 y Windows Server 2003: Esta marca no se admite.
CR_IN_CLIENTIDNONE
No incluya en los datos de solicitud que identifiquen al cliente.

Windows Server 2008 y Windows Server 2003: Esta marca no se admite.

CR_IN_CONNECTONLY
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"
Cuando el servidor de Servicios de certificados analiza los nombres de atributo, omite espacios, guiones (signos menos) y mayúsculas de minúsculas. Por ejemplo, "AttributeName1", "Attribute Name1" y "Attribute-name1" son equivalentes. En el caso de los valores de atributo, el servidor de Servicios de certificados omite el espacio en blanco inicial y final.

[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
CR_DISP_DENIED
Solicitud denegada
CR_DISP_ERROR
Error en la solicitud
CR_DISP_INCOMPLETE
La solicitud no se completó
CR_DISP_ISSUED
Certificado emitido
CR_DISP_ISSUED_OUT_OF_BAND
Certificado emitido por separado
CR_DISP_UNDER_SUBMISSION
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

Consulte también

CCertRequest

ICEnroll::createPKCS10

ICertConfig

ICertRequest

ICertRequest2

ICertRequest3