Você está offline; aguardando reconexão

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

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.
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
kbdsi

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 182888 - Última Revisão: 07/01/2004 15:29:07 - Revisão: 2.1

Microsoft Internet Explorer 4.0 Edição de 128 Bits, Microsoft Internet Explorer 4.01 Service Pack 2

  • kbmt kberrmsg KB182888 KbMtpt
Comentários
m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?"> html>