Angenommen, eine Website ist auf mehrere Server verteilt. Ich möchte einen Befehl ausführen, um zu testen, ob er funktioniert, z curl DOMAIN.TLD
. Um jede IP-Adresse zu isolieren, gebe ich die IP manuell an. Aber viele Websites auf dem Server gehostet werden, so biete ich noch einen Host - Header, wie folgt aus : curl IP_ADDRESS -H 'Host: DOMAIN.TLD'
. Nach meinem Verständnis erzeugen diese beiden Befehle genau dieselbe HTTP-Anforderung. Der einzige Unterschied ist, dass ich in letzterem den DNS-Lookup-Teil aus cURL herausnehme und dies manuell mache (bitte korrigieren Sie mich, wenn ich falsch liege).
Alles soweit gut. Aber jetzt möchte ich dasselbe für eine HTTPS-URL tun. Wieder konnte ich es so testen curl https://DOMAIN.TLD
. Aber ich möchte die IP manuell angeben, also starte 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 das Zertifikat nicht wichtig ist (die Option "-k"), aber es ist nicht ideal.
Gibt es eine Möglichkeit, die IP-Adresse, mit der die Verbindung hergestellt wird, von dem durch SSL zertifizierten Host zu trennen?
Host
anzeigen, bevor er auf den Header zugreifen kann. Dies--resolve
ist der richtige Weg, um eine IP-Adresse zu fixieren.Antworten:
Ich glaube, ich habe eine Lösung gefunden, die das cURL-Handbuch durchgreift:
von CURLOPT_RESOLVE erklärt
quelle
curl -v
und Sie können sehen, dass curl die Auflösungsoption zur temporären DNS-Cache-Speicherung hinzufügt und die von Ihnen angegebene IP-Adresse verwendet.IP_ADDRESS
diese Option unbemerkt ignoriert wird.Sie können in / etc / hosts ändern, um den Server glauben zu lassen, dass sich die Domain auf einer bestimmten IP befindet.
Dies ist die Syntax:
Dadurch verwendet cURL die gewünschte IP-Adresse, ohne dass das SSL-Zertifikat beschädigt wird.
quelle
Hier ist der
man
Eintrag für die aktuell am besten bewertete Antwort, da sie nur einen Link zur Programmkomponente enthielt:Aufgrund der angegebenen Einschränkung ("Es bedeutet, dass Sie mehrere Einträge benötigen, wenn Sie die Adresse für denselben Host, aber für verschiedene Ports angeben möchten.") Würde ich eine andere, neuere Option in Betracht ziehen, mit der beide gleichzeitig übersetzt werden können:
quelle
Wenn Sie unter Windows curl ausführen, verwenden Sie doppelte Anführungszeichen
Sie können das Schema / Protokoll im Voraus überspringen, die Portnummer in der Zeichenfolge --resolve jedoch nicht.
quelle