2017-08-29 4 views
1

Ich habe eine Sammlung von Nginx-Dienste arbeiten als Load Balancer für eine einzelne Adresse, sagen wir www.example.com. Ich hätte gerne eine Test-Suite, die auf jede dieser Maschinen isoliert abzielt und nicht den DNS-Lastausgleich durchläuft, sondern direkt zur Adresse geht.Wie teste ich eine bestimmte Load-Balancer-Instanz über HTTPS?

Wenn ich versuche, in curl, so etwas zu tun bekommen I:

$ curl -H "Host: www.example.com" -v https://10.10.10.10/       
* Trying 10.10.10.10... 
* Connected to 10.10.10.10 (10.10.10.10) port 443 (#0) 
* found 173 certificates in /etc/ssl/certs/ca-certificates.crt 
* found 697 certificates in /etc/ssl/certs 
* ALPN, offering http/1.1 
* SSL connection using TLS1.2/ECDHE_RSA_AES_256_GCM_SHA384 
* server certificate verification OK 
* server certificate status verification SKIPPED 
* SSL: certificate subject name (www.example.com) does not match target host name '10.10.10.10' 
* Closing connection 0 
curl: (51) SSL: certificate subject name (www.example.com) does not match target host name '10.10.10.10' 

Ich weiß 10.10.10.10 nicht die gleichen Namen, aber ich möchte das Tool anweisen, zu glauben, es ist (weil ich weiß, Es handelt sich hierbei um Load Balancer, die dieselbe Domäne bedienen.

Gibt es eine Möglichkeit, dies zu tun, die nicht mit DNS-Auflösung zu tun haben wird?

+0

Hat Host-Datei op Arbeit für dich? –

+0

Wie wäre es mit dem Test in einem Andock-Container? –

Antwort

3

Das Problem besteht darin, dass der Host-Header, den Sie festlegen, an den Server gesendet wird, aber nicht von curl für die SSL-Verifizierung verwendet wird.

Sie können dies in der curl Ausgabe sehen, beachten Sie die "Verbunden mit 10.10.10.10":

$ curl -H "Host: www.example.com" -v https://10.10.10.10/       
* Trying 10.10.10.10... 
* Connected to 10.10.10.10 (10.10.10.10) port 443 (#0) 

Sie suchen wahrscheinlich für die --resolve Flagge:

--resolve <host:port:address>

Geben Sie eine benutzerdefinierte Adresse für ein bestimmtes Host- und Portpaar an. Dadurch können Sie festlegen, dass die Curl-Anforderungen eine angegebene Adresse verwenden und verhindern, dass die ansonsten normal aufgelöste Adresse verwendet wird. Betrachten Sie es als eine Art der/etc/hosts-Alternative, die in der Befehlszeile bereitgestellt wird.

See: curl man page

In diesem Sinne, möchten Sie wahrscheinlich versuchen:

curl -v --resolve www.example.com:443:10.10.10.10 https://www.example.com

Welche es offensichtlich in der Ausgabe machen sollte, die jetzt locken wird, um den Host-Namen verwenden, damit , ermöglicht die Validierung des Zertifikats Subjekt Name:

$ curl -v --resolve www.example.com:443:10.10.10.10 https://www.example.com 
* Added www.example.com:443:10.10.10.10 to DNS cache 
* About to connect() to www.example.com port 443 (#0) 
* Trying 10.10.10.10... 
* Connected to www.example.com (10.10.10.10) port 443 (#0) 
+0

Super! das funktioniert! –

Verwandte Themen