Como manipular o erro de autoridade de certificado inválido com WinInet

Traduções deste artigo Traduções deste artigo
ID do artigo: 182888 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sumário

Se um certificado SSL do servidor é emitido por desconhecido ou a autoridade de certificação inválido API do WinInet HttpSendRequest ou MFC CInternetFile::SendRequest falhará com erro 12045 (ERROR_INTERNET_INVALID_CA).

Quando o Internet Explorer tenta acessar a mesma URL, erro semelhante é relatado.

Mais Informações

Este erro ocorre quando o cliente não sabe sobre a autoridade de certificação que emitiu o certificado de servidor. O problema pode ser corrigido por instalar certificado de raiz da autoridade de certificação. Uma lista de todos os certificados instalados pode ser exibida no Internet Explorer. No menu Exibir, clique em Opções da Internet, clique na guia conteúdo e clique em autoridades.

É possível ignorar esse erro no aplicativo WinInet sem instalar um certificado. Há dois métodos de manipular esse erro. Você pode usar código semelhante ao seguinte.

Método 1. Com uma interface do usuário (uma caixa de mensagem semelhante do Internet Explorer é gerada):
   ...
   Again:
   if (!HttpSendRequest (hReq,...))
       dwError = GetLastError ();

   if (dwError == ERROR_INTERNET_INVALID_CA)
   {
       // Make sure to check return code from InternetErrorDlg
       // user may click either OK or Cancel. In case of Cancel
       // request should not be resumbitted.
       InternetErrorDlg (GetDesktopWindow(),
                         hReq,
                         ERROR_INTERNET_INVALID_CA,
                         FLAGS_ERROR_UI_FILTER_FOR_ERRORS |
                         FLAGS_ERROR_UI_FLAGS_GENERATE_DATA |
                         FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS,
                         NULL);
      goto again;
   }
   ...
				
método 2. Sem uma interface do usuário:
   ...
   Again:
   if (!HttpSendRequest (hReq,...))
      dwError = GetLastError ();
   if (dwError == ERROR_INTERNET_INVALID_CA)
   {
      DWORD dwFlags;
      DWORD dwBuffLen = sizeof(dwFlags);

      InternetQueryOption (hReq, INTERNET_OPTION_SECURITY_FLAGS,
            (LPVOID)&dwFlags, &dwBuffLen);

      dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
      InternetSetOption (hReq, INTERNET_OPTION_SECURITY_FLAGS,
                            &dwFlags, sizeof (dwFlags) );
      goto again;
   }
   ...
				
lógica semelhante pode ser usada com classes MFC WinInet. Nesse caso, os seguintes métodos MFC correspondem a WinInet APIs usadas acima:

  • CInternetFile::SendRequest
  • CInternetFile::QueryOption
  • CInternetFile::SetOption
  • CInternetFile::ErrorDlg
Observe que o Visual C++ 5.0 está faltando documentação sobre CInternetFile::ErrorDlg, CInternetFile::QueryOption e CInternetFile::SetOption. Consulte a fonte do MFC inet.cpp arquivo para informações sobre como usar esse método.

1 Observação : InternetErrorDlg pode retornar valores a seguir:
   ERROR_SUCCESS
   ERROR_CANCELLED
   ERROR_INTERNET_FORCE_RETRY.
				
a solicitação deve ser reenviada somente quando ERROR_INTERNET_FORCE_RETRY é retornado. No Internet Explorer 4.0 e 4.01, no entanto, a solicitação deve ser reenviada mesmo quando ERROR_SUCCESS é retornado.

A Microsoft confirmou este é um problema na API InternetErrorDlg. 2 Observação : SECURITY_FLAG_IGNORE_UNKNOWN_CA não está implementado no Internet Explorer 3.0 e 3.02.

InternetErrorDlg ainda funciona, no entanto, com a seguinte exceção. A caixa de diálogo gerada por esta API não permite ignorar erro de autoridade de certificado inválido; ele é simplesmente uma notificação para o usuário que a página não pode ser exibida.

3 Observação : A opção para ignorar este erro não pode ser definida antes de ocorrer o erro. Primeiro você deve tentar enviar a solicitação, receber a mensagem de erro, e em seguida, definir a opção (ou chamar InternetErrorDlg) e envie novamente.

Referências

Para obter informações adicionais, consulte os seguintes artigos na Base de dados de Conhecimento Microsoft:
168151Como fazer solicitações SSL usando WinInet

Propriedades

ID do artigo: 182888 - Última revisão: quinta-feira, 1 de julho de 2004 - Revisão: 2.1
A informação contida neste artigo aplica-se a:
  • Microsoft Internet Explorer 4.0 Edição de 128 Bits
  • Microsoft Internet Explorer 4.01 Service Pack 2
Palavras-chave: 
kbmt kberrmsg KB182888 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 182888
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com