Em muitas redes, o acesso à internet passa por um proxy, um servidor intermediário que recebe as requisições dos computadores e as repassa aos sites e aos serviços. Uma integração que funciona no navegador e falha no serviço do Windows, o código 407 e a internet que funciona para um usuário e não para outro costumam ter o proxy no meio.
O que o proxy faz
O proxy fica entre os computadores da rede e a internet e pode:
- liberar ou bloquear o acesso por usuário, por site ou por categoria;
- registrar os acessos;
- guardar cópias de conteúdos frequentes, o chamado cache;
- exigir usuário e senha antes de liberar a saída.
Existem três tipos comuns:
- Proxy explícito: o programa conhece o endereço e a porta do proxy, como a 3128 ou a 8080, e envia as requisições para ele;
- Proxy transparente: a rede desvia o tráfego para o proxy sem nenhuma configuração no computador;
- Proxy reverso: fica na frente de um serviço e recebe as conexões que chegam da internet, e não as que saem da rede.
O HTTPS pelo proxy
No HTTPS, o programa pede ao proxy um túnel até o serviço, com o método CONNECT e o nome e a porta do destino, como api.example.com:443. Com o túnel aberto, o proxy só repassa os dados protegidos: ele conhece o nome do destino, mas não vê o conteúdo, a menos que faça a inspeção de HTTPS.
As configurações do Windows
O Windows guarda duas configurações de proxy separadas:
- A configuração do usuário: fica em Configurações, Rede e Internet, Proxy, vale para a conta conectada e é usada pelos navegadores e pela maior parte dos programas abertos pelo usuário;
- A configuração do WinHTTP: vale para o computador inteiro e é usada por muitos serviços do Windows e por programas que rodam como serviço.
A configuração do usuário tem três formas, que podem ser combinadas:
- Detectar configurações automaticamente: o Windows procura na rede um script de configuração, pelo protocolo WPAD;
- Usar script de configuração: o endereço de um arquivo PAC, que define qual proxy usar para cada destino;
- Usar um servidor proxy: o endereço e a porta informados à mão, com a lista de exceções e a opção de não usar o proxy para os endereços locais.
A lista de exceções define os destinos que não passam pelo proxy. Os endereços internos, como o servidor da loja, o servidor geral e a faixa 192.168.1.*, ficam nas exceções, para que as chamadas HTTP entre os computadores da rede não passem pelo proxy.
Alguns comandos consultam e ajustam o WinHTTP, e os que alteram a configuração pedem o prompt de comando aberto como administrador:
netsh winhttp show proxy: mostra o proxy do WinHTTP, e a resposta de acesso direto indica que não há proxy configurado;netsh winhttp show advproxy: mostra a configuração completa do WinHTTP nas versões mais novas do Windows;netsh winhttp import proxy source=ie: copia para o WinHTTP o proxy configurado para o usuário que executa o comando;netsh winhttp reset proxy: volta o WinHTTP para o acesso direto.
Os programas com configuração própria
Alguns programas têm um campo de proxy na própria configuração, e algumas ferramentas leem o proxy de variáveis de ambiente, como HTTPS_PROXY e NO_PROXY. O curl não segue a configuração de proxy do Windows e usa a opção -x ou essas variáveis. Quando a rede da filial 01 usa um proxy, como um firewall no endereço 192.168.1.1 com o proxy na porta 3128, dois testes comparam os caminhos:
curl -v -x http://192.168.1.1:3128 https://api.example.com: faz a chamada pelo proxy, e a saída mostra o pedido CONNECT e a resposta do proxy;curl -v --noproxy "*" https://api.example.com: faz a chamada direta, sem o proxy.
Os erros do proxy
As falhas mais comuns se separam assim:
- Código 407: o proxy exige autenticação e não recebeu uma credencial válida, e a resposta traz o cabeçalho Proxy-Authenticate com a forma de autenticação esperada;
- Códigos 502 e 504 gerados pelo proxy: o proxy recebeu uma resposta inválida do destino ou não recebeu resposta a tempo;
- Página de bloqueio: o proxy recusou o destino pela política de acesso e devolveu uma página própria no lugar do site;
- Falha só no serviço: o serviço roda com outra conta, que não tem a configuração de proxy do usuário.
No suporte
Diante de uma integração que funciona no navegador e falha no serviço, convém comparar o proxy usado em cada caso: a configuração do usuário, a do WinHTTP e a do próprio programa. O teste com o curl pelo proxy e sem ele separa um problema da rede de um problema do proxy, e a resposta 407 mostra que a requisição parou no proxy, antes de chegar ao serviço.
Para guardar
- O proxy recebe as requisições dos computadores e as repassa à internet, com controle, registro e cache.
- No HTTPS, o proxy abre um túnel com o método CONNECT e não vê o conteúdo sem a inspeção.
- O Windows tem a configuração de proxy do usuário e a do WinHTTP, usada por serviços.
- O código 407 indica que o proxy exige autenticação.
- Os endereços internos ficam na lista de exceções, fora do proxy.
A integração de preços funciona quando o técnico testa pelo navegador do servidor da loja, mas falha quando roda como serviço, com tempo esgotado na conexão. A rede usa um proxy explícito. O que conferir?
A configuração de proxy usada pelo serviço. O navegador segue o proxy configurado na conta do usuário, e o serviço roda com outra conta, sem essa configuração. O comando netsh winhttp show proxy mostra o proxy do WinHTTP, e a configuração do próprio programa pode ter um campo de proxy à parte.
Um teste com o curl para o endereço da integração, no caixa 01, recebe o código 407. O que esse código indica?
Que a requisição chegou a um proxy que exige autenticação. A resposta vem do proxy, e não do serviço, e o cabeçalho Proxy-Authenticate mostra a forma de autenticação esperada. O acerto fica com o responsável pela rede, que fornece a credencial do proxy para a integração ou libera o destino sem autenticação.