Vraag Hoe een HTTPS-URL te testen met een bepaald IP-adres


Laten we zeggen dat een website load-balanced is tussen verschillende servers. Ik wil een opdracht uitvoeren om te testen of het werkt, zoals curl DOMAIN.TLD. Dus om elk IP-adres te isoleren, geef ik handmatig het IP-adres op. Maar veel websites kunnen op de server worden gehost, dus ik voorzie nog steeds een host-header, zoals deze: curl IP_ADDRESS -H 'Host: DOMAIN.TLD'. In mijn inzicht creëren deze twee commando's exact hetzelfde HTTP-verzoek. Het enige verschil is dat ik in de laatste het DNS-lookup-gedeelte uit cURL verwijder en dit handmatig doe (corrigeer me als ik het mis heb).

Tot nu toe allemaal goed. Maar nu wil ik hetzelfde doen voor een HTTPS-URL. Nogmaals, ik zou het zo kunnen testen curl https://DOMAIN.TLD. Maar ik wil de IP handmatig opgeven, dus ik rijd curl https://IP_ADDRESS -H 'Host: DOMAIN.TLD'. Nu krijg ik een cURL-foutmelding:

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

Ik kan dit natuurlijk omzeilen door cURL te vertellen dat het niet om het certificaat gaat (de "-k" -optie), maar het is niet ideaal.

Is er een manier om het IP-adres waarmee wordt verbonden te isoleren van de host die wordt gecertificeerd door SSL?


58
2017-10-31 09:10


oorsprong


Is uw load balancer het SSL-eindpunt, of zijn het de afzonderlijke instanties? - rikola


antwoorden:


Denk dat ik een oplossing heb gevonden die door de cURL-handleiding gaat:

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

Toegevoegd in [curl] 7.21.3. Ondersteuning bij verwijderen toegevoegd in 7.42.0.

van CURLOPT_RESOLVE uitgelegd


87
2017-10-31 10:32



- Resolve bestaat niet in curl ... - JustAGuy
De krul op mijn machine (7.27.0) heeft --opgelost. - Theron Luhn
Je kunt zien dat het werkt met curl -v en u kunt zien dat krul de optie voor het oplossen van problemen toevoegt aan de DNS-cache-temporariie, en toevoegingen gebruikt het IP-adres dat u hebt opgegeven. - CMCDragonkai
CentOS 6.8 krul: optie --opnieuw: is onbekend krul: probeer 'krullen --help'of' krullen --manual 'voor meer informatie root @ server3 [~] # curl -V curl 7.19.7 (x86_64-redhat-linux -gnu) libcurl / 7.19.7 NSS / 3.21 Basis ECC zlib / 1.2.3 libidn / 1.18 libssh2 / 1.4.2 Protocollen: tftp ftp telnet dict ldap ldaps http bestand https ftps scp sftp Kenmerken: GSS-onderhandelings IDN IPv6 Grootbestand NTLM SSL libz - Jose Nobile
Merk op dat als u een hostnaam gebruikt voor IP_ADDRESS, zal het stil de optie negeren. - Xiong Chiamiov


U kunt in / etc / hosts wijzigen om de server te laten denken dat het domein zich op een bepaald IP-adres bevindt.

Dit is de syntaxis:

192.168.10.20 www.domain.tld

Hierdoor gebruikt cURL het gewenste IP-adres zonder dat het SSL-certificaat wordt verbroken.


10
2017-10-31 09:14



Dat werkt, maar ik ben op zoek naar een methode die geen aanpassing van het besturingssysteem als geheel vereist - Martin
Ik denk eerlijk gezegd niet dat er een andere manier is. U moet cURL toegang krijgen tot de juiste domeinnaam om het certificaat te laten werken en de manier om een ​​bepaald domein aan een IP toe te wijzen, is door DNS of door het hosts-bestand. - miono


Hier is de man invoer voor het momenteel meest opbeurende antwoord omdat ze alleen een link naar de programmatische component bevatten:

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

Maar vanwege de gegeven beperking ("Dit betekent dat je verschillende items nodig hebt als je een adres voor dezelfde host wilt opgeven, maar verschillende poorten."), Zou ik een andere, nieuwere optie overwegen die beide tegelijkertijd kan vertalen:

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

5
2018-03-09 13:34





Als u krul in Windows gebruikt, gebruikt u dubbele aanhalingstekens

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

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

U kunt het schema / protocol vooraf overslaan, maar u kunt het poortnummer niet overslaan in de --resolve-reeks.


4
2018-06-21 16:27