Frage So testen Sie eine HTTPS-URL mit einer bestimmten IP-Adresse


Angenommen, eine Website wird zwischen mehreren Servern ausgelastet. Ich möchte einen Befehl ausführen, um zu testen, ob es funktioniert, wie z curl DOMAIN.TLD. Um also jede IP-Adresse zu isolieren, gebe ich die IP manuell an. Aber viele Websites können auf dem Server gehostet werden, so dass ich immer noch einen Host-Header wie folgt bereitstellen kann: curl IP_ADDRESS -H 'Host: DOMAIN.TLD'. Nach meinem Verständnis erstellen diese beiden Befehle genau die gleiche HTTP-Anfrage. Der einzige Unterschied ist, dass ich im letzteren Fall den DNS-Lookup-Teil von cURL entferne und dies manuell mache (bitte korrigiere mich, wenn ich falsch liege).

Alles gut so weit. Aber jetzt möchte ich das gleiche für eine HTTPS-URL tun. Wieder könnte ich es so testen curl https://DOMAIN.TLD. Aber ich möchte die IP manuell angeben, also laufe ich curl https://IP_ADDRESS -H 'Host: DOMAIN.TLD'. Jetzt bekomme ich einen CURL-Fehler:

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

Ich kann das natürlich umgehen, indem ich cURL sage, dass ich mich nicht um das Zertifikat kümmern soll (die Option "-k"), aber es ist nicht ideal.

Gibt es eine Möglichkeit, die IP-Adresse zu isolieren, die mit dem SSL-zertifizierten Host verbunden ist?


58
2017-10-31 09:10


Ursprung


Ist Ihr Load Balancer der SSL-Endpunkt, oder sind es die einzelnen Instanzen? - rikola


Antworten:


Ich denke, ich habe eine Lösung gefunden, die das cURL-Handbuch durchläuft:

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

Hinzugefügt in [Curl] 7.21.3. Entfernungsunterstützung hinzugefügt in 7.42.0.

von CURLOPT_RESOLVE erklärt


87
2017-10-31 10:32



--Resolve gibt es nicht in Curl ... - JustAGuy
Die Locke an meiner Maschine (7.27.0) hat --resolve. - Theron Luhn
Sie können sehen, wie es funktioniert curl -v und Sie können sehen, dass curl die Auflösungsoption dem temporären DNS-Cache hinzufügt, und fügt die von Ihnen angegebene IP-Adresse hinzu. - CMCDragonkai
CentOS 6.8 curl: Option --resolve: ist unbekannt curl: versuche 'curl --help' oder 'curl --manual' für weitere Informationen 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 Protokolle: tftp ftp telnet dict ldap ldaps http Datei https ftps scp sftp Funktionen: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz - Jose Nobile
Beachten Sie, dass wenn Sie einen Hostnamen für verwenden IP_ADDRESS, wird die Option still ignoriert. - Xiong Chiamiov


Sie können in / etc / hosts ändern, damit der Server denkt, dass sich die Domäne in einer bestimmten IP befindet.

Dies ist die Syntax:

192.168.10.20 www.domain.tld

Dadurch wird cURL die gewünschte IP-Adresse ohne das SSL-Zertifikat verwenden.


10
2017-10-31 09:14



Das funktioniert, aber ich suche nach einer Methode, bei der das Betriebssystem als Ganzes nicht geändert werden muss - Martin
Ich glaube wirklich nicht, dass es einen anderen Weg gibt. Sie müssen cURL abrufen, um auf den korrekten Domänennamen zugreifen zu können, damit das Zertifikat funktioniert, und die Zuordnung einer bestimmten Domäne zu einer IP erfolgt entweder über DNS oder über die hosts-Datei. - miono


Hier ist der man Eintrag für die aktuell am meisten uploaded Antwort, da sie nur eine Verknüpfung mit der programmatischen Komponente enthalten:

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

Aber aufgrund der gegebenen Einschränkung ("Es bedeutet, dass Sie mehrere Einträge benötigen, wenn Sie die Adresse für denselben Host, aber verschiedene Ports angeben möchten."), Würde ich eine andere, neuere Option in Betracht ziehen, die beide gleichzeitig übersetzen kann:

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





Wenn Sie in Windows curl ausführen, verwenden Sie doppelte Anführungszeichen

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

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

Sie können das Schema / Protokoll im Voraus überspringen, aber Sie können die Portnummer in der Zeichenfolge --resolve nicht überspringen.


4
2018-06-21 16:27