Artigo: 182888 - Última revisão: quinta-feira, 1 de Julho de 2004 - Revisão: 2.1

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

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sumário

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

Quando o Internet Explorer tenta aceder ao mesmo URL, é comunicado o erro semelhante.

Mais Informação

Este erro ocorre quando o cliente não tem conhecimento sobre a autoridade de certificação que emitiu o certificado de servidor. O problema poderá ser corrigido pela instalar certificado de raiz da autoridade de certificação. Uma lista de todos os certificados instalados pode ser visualizada a partir do Internet Explorer. No menu Ver, clique em Opções da Internet, clique no separador conteúdo e clique em autoridades.

É possível ignorar este erro na aplicação WinInet sem instalar um certificado. Existem dois métodos para processar este erro. Pode utilizar código semelhante ao seguinte.

Método 1. Com uma interface de utilizador (é gerada uma caixa de mensagem tal como o Internet Explorer):
   ...
   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 de utilizador:
   ...
   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;
   }
   ...
				
pode ser utilizada lógica semelhante com classes MFC WinInet. Neste caso, os seguintes métodos MFC correspondem às WinInet API utilizado anteriormente:

  • CInternetFile::SendRequest
  • CInternetFile::QueryOption
  • CInternetFile::SetOption
  • CInternetFile::ErrorDlg
Tenha em atenção que o Visual C++ 5.0 falta documentação sobre CInternetFile::ErrorDlg CInternetFile::QueryOption e CInternetFile::SetOption. Ver a origem MFC inet.cpp ficheiros para informações sobre como utilizar este método.

Nota 1 : InternetErrorDlg podem devolver valores a seguir:
   ERROR_SUCCESS
   ERROR_CANCELLED
   ERROR_INTERNET_FORCE_RETRY.
				
o pedido deve seja novamente submetido apenas quando ERROR_INTERNET_FORCE_RETRY é devolvido. No Internet Explorer 4.0 e 4.01, no entanto, o pedido tem seja novamente submetido, mesmo quando ERROR_SUCCESS é devolvido.

Microsoft confirmou que este problema existe no InternetErrorDlg API. Nota 2 : SECURITY_FLAG_IGNORE_UNKNOWN_CA não está implementada no Internet Explorer 3.0 e 3.02.

InternetErrorDlg continua a funcionar, no entanto, com a excepção seguinte. A caixa de diálogo gerada por esta API não permite ignorar erro de autoridade de certificado inválido; é apenas uma notificação ao utilizador que página não pode ser visualizada.

3 Nota : não é possível definir a opção para ignorar este erro antes de ocorrer o erro. Primeiro deve tentar enviar o pedido, recebe o erro, em seguida, definir a opção (ou chamar InternetErrorDlg) e submeta de novo.

Referências

Para obter informações adicionais, consulte o seguinte artigo na base de dados de conhecimento da Microsoft:
168151  (http://support.microsoft.com/kb/168151/EN-US/ ) Como criar pedidos SSL utilizando WinInet

A informação contida neste artigo aplica-se a:
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 4.01 Service Pack 2
Palavras-chave: 
kbmt kberrmsg KB182888 KbMtpt
Tradução automáticaTraduçã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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 182888  (http://support.microsoft.com/kb/182888/en-us/ )
Retired KB ArticleExclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.