Como passar um pedido de esquema HTTPS para um proxy sem usar um túnel CONNECT no FreeBSD?

1

O cliente ( C ) passa por um proxy ( P ) para entrar em contato com um servidor ( S ):

A --http--> P --https--> S

Eu preciso do proxy para poder investigar o conteúdo da solicitação, pois vejo duas opções:

  1. Interceptação de túnel SSL : C envia uma solicitação CONNECT para criar um túnel SSL entre C e S , mas o proxy intercepta e interrompe o túnel SSL gerando um certificado em tempo real assinado por uma autoridade de certificação interna confiável C para cumprir o aperto de mão.
  2. O cliente usa um esquema https:// : C não cria um encapsulamento, ele simplesmente passa a URL HTTPS para o proxy (como seria fazer com URLs HTTP), o proxy cuida de recuperar os dados de S usando HTTPS e encaminhá-lo para C em HTTP claro.

Eu considero que a comunicação entre C e P esteja segura, então não vejo sentido em configurar a interceptação SSL: consome tempo para configurar, precisa injetar uma homebrew CA na CA raiz do cliente, desperdício de recursos de computação para lidar com handshakes inúteis e criptografia. Ao contrário, a segunda opção é o peso leve e permite banir completamente o uso de CONNECT no proxy.

Um teste manual usando telnet mostra facilmente que minha instalação do squid funciona bem e suporta corretamente esta segunda opção: Posso recuperar com êxito um documento passando um esquema https:// para o proxy.

No entanto, o cliente C estando no FreeBSD, eu não encontro uma maneira de dizer a qualquer software cliente para agir da mesma maneira.

Não encontrei nenhuma opção relevante em fetch . Mesma coisa com wget .

Eu também tentei curl , parece explicar que todas as operações são feitas através de HTTP, a menos que -p / --proxytunnel é usado, no entanto, ele ainda tenta criar um túnel para conexão HTTPS, mesmo sem essa opção. Eu também tentei jogar com essa opção, incluindo tentar um --no-proxytunnel , pois de acordo com a mesma manpage, algumas opções booleanas aceitam esta sintaxe, mas sem sorte. Proxy túnel parece de fato ser aplicado na linha 5635 de lib / url.c ( commit ):

/*************************************************************
 * If the protocol is using SSL and HTTP proxy is used, we set
 * the tunnel_proxy bit.
 *************************************************************/
if((conn->given->flags&PROTOPT_SSL) && conn->bits.httpproxy)
  conn->bits.tunnel_proxy = TRUE;

Qualquer solução, seja usando ferramentas do sistema básico do FreeBSD ou algum cliente bem conhecido disponível no repositório seria bem-vinda!

    
por WhiteWinterWolf 10.12.2015 / 19:56

0 respostas