Método ICertRequest::Submit (certcli.h)

O método Submit envia uma solicitação para o servidor dos Serviços de Certificados.

Se a disposição resultante status for CR_DISP_ISSUED, você poderá recuperar o certificado emitido chamando o método ICertRequest3::GetCertificate.

Sintaxe

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 o formato de solicitação, o tipo de solicitação e se a solicitação é criptografada. Um dos sinalizadores de atributo de formato a seguir pode ser usado para especificar como a solicitação é codificada.

Valor Significado
CR_IN_BASE64
Formato BASE64 Unicode sem início/término.
CR_IN_BASE64HEADER
Formato BASE64 Unicode com início/fim.
CR_IN_BINARY
Formato binário.
CR_IN_ENCODEANY
Experimente todos os formatos CR_IN_BASE64HEADER, CR_IN_BASE64 ou CR_IN_BINARY.
 

Um dos sinalizadores de valor de formato a seguir pode ser usado para especificar o tipo da solicitação.

Valor Significado
CR_IN_RETURNCHALLENGE
Retorne um desafio que pode ser enviado a uma AC. O desafio é uma solicitação completa do Gerenciamento de Certificados sobre CMS (CMC ). Quando esse sinalizador é ativado, chamar o método GetFullResponseProperty com o sinalizador FR_PROP_FULLRESPONSE retorna uma resposta CMC que contém o desafio de atestado de chave.
CR_IN_CHALLENGERESPONSE
A chamada é uma resposta a um desafio. O RequestId deve ser passado no parâmetro strAttributes e a resposta ao desafio deve ser passada no parâmetro strRequest . Esse sinalizador deve ser ativado quando um aplicativo precisa enviar de volta o desafio descriptografado para a AC. Em seguida, você pode chamar o método GetFullResponseProperty para obter o certificado de entidade final emitido.
CR_IN_CMC
Uma solicitação de Gerenciamento de Certificados por CMS (CMC).
CR_IN_FORMATANY
Experimente todos os formatos CR_IN_CMC, CR_IN_KEYGEN, CR_IN_PKCS7 ou CR_IN_PKCS10.
CR_IN_KEYGEN
Solicitação keygen (formato Netscape).
CR_IN_PKCS7
Solicitação PKCS nº 7 (agente de renovação ou registro).
CR_IN_PKCS10
Solicitação PKCS nº 10.
CR_IN_RPC
Transmita as mensagens usando RPC em vez de DCOM.
CR_IN_FULLRESPONSE
Retornar uma resposta CMC completa.
CR_IN_CRLS
Inclua as listas de revogação de certificados atuais.
CR_IN_MACHINE
Use o contexto do computador de serviço de chave.
CR_IN_ROBO
Indica que a mensagem está sendo solicitada em nome de outro remetente.

Se a AC (autoridade de certificação ) não estiver configurada para "renovar em nome de", a AC rejeitará a solicitação.

Para obter mais informações sobre como habilitar a "renovação em nome de" na AC, consulte Configurando o serviço Web de registro de certificado para o modo somente renovação.

A solicitação deve ser uma solicitação de renovação e o certificado de assinatura deve estar usando o mesmo modelo que a solicitação.

Além disso, a solicitação terá êxito somente quando uma das seguintes condições for verdadeira:

  • O certificado de autenticação deve ter sido emitido pela mesma AC
  • A extensão SAN2 do certificado de autenticação tem o UPN do assunto
  • O Nome da Entidade do certificado de autenticação tem o FQDN_1779 da entidade
Windows Server 2008 e Windows Server 2003: Não há suporte para esse sinalizador.
CR_IN_CLIENTIDNONE
Não inclua nos dados de solicitação que identificam o cliente.

Windows Server 2008 e Windows Server 2003: Não há suporte para esse sinalizador.

CR_IN_CONNECTONLY
Especifica que a conexão DCOM com o servidor foi estabelecida, mas a solicitação não é enviada.

[in] strRequest

Um ponteiro para a cadeia de caracteres que contém a solicitação de certificado. Se CR_IN_BASE64 ou CR_IN_BASE64HEADER tiver sido especificado em Sinalizadores, strRequest deverá ser uma cadeia de caracteres Unicode.

[in] strAttributes

Um ponteiro para a cadeia de caracteres que contém atributos extras opcionais para a solicitação. Cada atributo é um par de cadeia de caracteres nome-valor. O caractere de dois-pontos separa o nome e o valor e um caractere de nova linha separa vários pares nome-valor, por exemplo:

C++ "AttributeName1:AttributeValue1\nAttributeName2:AttributeValue2"
VB "AttributeName1:AttributeValue1" & vbNewLine & "AttributeName2:AttributeValue2"
Quando o servidor dos Serviços de Certificado analisa nomes de atributo, ele ignora espaços, hifens (sinais de menos) e maiúsculas e minúsculas. Por exemplo, "AttributeName1", "Attribute Name1" e "Attribute-name1" são equivalentes. Para valores de atributo, o servidor dos Serviços de Certificados ignora o espaço em branco à esquerda e à direita.

[in] strConfig

Representa uma cadeia de caracteres de configuração válida para o servidor dos Serviços de Certificados. A cadeia de caracteres pode ser uma URL HTTPS para um servidor de registro ou no formulário ComputerName\CAName, em que ComputerName é o nome de rede do servidor e CAName é o nome comum da autoridade de certificação, conforme inserido durante a instalação dos Serviços de Certificado. Para obter informações sobre o nome da cadeia de caracteres de configuração, consulte ICertConfig.

Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Não há suporte para uma URL HTTPS como entrada.

[out, retval] pDisposition

Um ponteiro para o valor de disposição da solicitação.

Retornar valor

C++

Se o método for bem-sucedido, o método retornará S_OK.

Após a conclusão bem-sucedida dessa função, *pDisposition é definido como um dos valores na tabela a seguir.

Se o método falhar, ele retornará um valor HRESULT que indica o erro. Para obter uma lista de códigos de erro comuns, consulte Valores HRESULT comuns.

VB

O valor retornado especifica a disposição da solicitação. A disposição é um dos valores a seguir.
Código de retorno Descrição
CR_DISP_DENIED
Solicitação negada
CR_DISP_ERROR
Falha na solicitação
CR_DISP_INCOMPLETE
A solicitação não foi concluída
CR_DISP_ISSUED
Certificado emitido
CR_DISP_ISSUED_OUT_OF_BAND
Certificado emitido separadamente
CR_DISP_UNDER_SUBMISSION
Solicitação feita em envio

Comentários

Se você ler uma solicitação de formato BASE64 de um arquivo, verifique se o arquivo está em Unicode ou converta-o de ASCII para Unicode antes de enviar a solicitação com esse método.

Exemplos

    //  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 Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho certcli.h (inclua Certsrv.h)
Biblioteca Certidl.lib
DLL Certcli.dll

Confira também

CCertRequest

ICEnroll::createPKCS10

ICertConfig

ICertRequest

ICertRequest2

ICertRequest3