Como testar um URL HTTPS com um determinado endereço IP

59

Digamos que um site tenha balanceamento de carga entre vários servidores. Eu quero executar um comando para testar se está funcionando, como curl DOMAIN.TLD . Então, para isolar cada endereço IP, eu especifico o IP manualmente. Mas muitos sites podem estar hospedados no servidor, então eu ainda forneço um cabeçalho de host, como este: curl IP_ADDRESS -H 'Host: DOMAIN.TLD' . No meu entender, esses dois comandos criam exatamente o mesmo pedido HTTP. A única diferença é que no segundo eu retiro a parte de pesquisa de DNS do cURL e faço isso manualmente (por favor me corrija se eu estiver errado).

Tudo bem até agora. Mas agora quero fazer o mesmo para um URL HTTPS. Mais uma vez, eu pude testá-lo assim: curl https://DOMAIN.TLD . Mas eu quero especificar o IP manualmente, então eu corro curl https://IP_ADDRESS -H 'Host: DOMAIN.TLD' . Agora recebo um erro cURL:

curl: (51) SSL: certificate subject name 'DOMAIN.TLD' does not match target host name 'IP_ADDRESS'.

Claro que posso contornar isso dizendo à cURL para não se importar com o certificado (a opção "-k"), mas não é ideal.

Existe uma maneira de isolar o endereço IP que está sendo conectado do host que está sendo certificado pelo SSL?

    
por Martin 31.10.2012 / 10:10

4 respostas

88

Acho que encontrei uma solução no manual cURL:

curl https://DOMAIN.EXAMPLE --resolve 'DOMAIN.EXAMPLE:443:192.0.2.17'

Added in [curl] 7.21.3. Removal support added in 7.42.0.

de CURLOPT_RESOLVE explicado

    
por 31.10.2012 / 11:32
10

Você pode alterar em / etc / hosts para fazer o servidor pensar que o domínio está localizado em um determinado IP.

Esta é a sintaxe:

192.168.10.20 www.domain.tld

Isso fará com que cURL use o endereço IP desejado sem que o certificado SSL seja interrompido.

    
por 31.10.2012 / 10:14
5

Aqui está a entrada man da resposta atualmente mais votada, pois incluiu apenas um link para o componente programático:

--resolve <host:port:address>

    Provide  a  custom  address  for  a specific host and port pair. Using
    this, you can make the curl requests(s) use a specified address and 
    prevent the otherwise normally resolved address to be used. Consider 
    it a sort of /etc/hosts alternative provided on the command line. 
    The port number should be the number used for the specific protocol 
    the host will be used for. It means you need several entries if you 
    want to provide address for the same host but different ports.

    The provided address set by this option will be used even if -4, 
    --ipv4 or -6, --ipv6 is set to make curl use another IP version.

    This option can be used many times to add many host names to resolve.

    Added in 7.21.3.

Mas, devido à limitação dada ("Significa que você precisa de várias entradas se quiser fornecer endereço para o mesmo host, mas portas diferentes."), eu consideraria outra opção mais nova que possa traduzir ambas ao mesmo tempo:

--connect-to <HOST1:PORT1:HOST2:PORT2>

    For  a request to the given HOST:PORT pair, connect to 
    CONNECT-TO-HOST:CONNECT-TO-PORT instead. This option is suitable 
    to direct requests at a specific server, e.g. at a specific cluster 
    node in a cluster of servers. This option is only used to establish 
    the network connection. It does NOT affect the hostname/port that 
    is used for TLS/SSL (e.g. SNI, certificate verification) or for 
    the application protocols. "host" and "port" may be the empty string, 
    meaning "any host/port". "connect-to-host" and "connect-to-port" 
    may also be the empty string, meaning "use the request's original host/port".

    This option can be used many times to add many connect rules.

    See also --resolve and -H, --header. 
    Added in 7.49.0.
    
por 09.03.2018 / 14:34
4

Se você estiver executando o curl no Windows, use aspas duplas

curl https://DOMAIN.TLD --resolve "DOMAIN.TLD:443:IP_ADDRESS"

curl DOMAIN.TLD --resolve "DOMAIN.TLD:80:IP_ADDRESS"

Você pode pular o esquema / protocolo na frente, mas não pode pular o número da porta na string --resolve.

    
por 21.06.2017 / 18:27