Belirli bir IP adresiyle HTTPS URL’si nasıl test edilir


77

Bir web sitesinin birkaç sunucu arasında yük dengeli olduğunu varsayalım. Bunun işe yarayıp yaramadığını test etmek için bir komut çalıştırmak istiyorum curl DOMAIN.TLD. Bu nedenle, her IP adresini izole etmek için IP'yi manuel olarak belirtirim. Fakat birçok web sitesi sunucu üzerinde barındırılan edilebilir, bu yüzden hala bu gibi bir konak başlık sağlamayı: curl IP_ADDRESS -H 'Host: DOMAIN.TLD'. Anladığım kadarıyla, bu iki komut tam olarak aynı HTTP isteğini yaratıyor. Tek fark, sonuncusunda cURL'den DNS arama bölümünü çıkardım ve bunu manuel olarak yaptım (lütfen hatalıysam beni düzeltin).

Her şey yolunda. Ancak şimdi aynı HTTPS URL'si için de yapmak istiyorum. Yine, böyle test edebilirim curl https://DOMAIN.TLD. Fakat IP'yi manuel olarak belirlemek istiyorum, bu yüzden çalıştırıyorum curl https://IP_ADDRESS -H 'Host: DOMAIN.TLD'. Şimdi bir cURL hatası alıyorum:

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

Elbette cURL'ye sertifikayı önemsememesini ("-k" seçeneği) söyleyerek halledebilirim ancak bu ideal değildir.

Bağlanan IP adresini, SSL tarafından onaylanan ana bilgisayardan izole etmenin bir yolu var mı?


Yük dengeleyiciniz SSL sonlandırma noktası mı, yoksa tek tek örnekler mi?
rikola

Birisi neden Host başlığının HTTPS için arka uçta doğru VHost'u ve sertifikayı seçmediğini açıklayabilir mi, ancak bu HTTP için tek başına uygundur. IP kullanılmış veya etki alanı kullanılmışsa, istemci bilgileri arka uçta (HTTPS protokolü kullanarak) aktarıyor mu?
NeverEndingQueue

@NeverEndingQueue Bunu anlamak için TLS ile HTTP arasındaki ilişkiyi bilmeniz gerekir. Sunucunun, Hostüstbilgiye erişmeden önce sertifikayı göstermesi gerekir , bu nedenle --resolvebir IP adresini sabitlemenin doğru yolu budur.
Franklin Yu

Yanıtlar:


117

CURL kılavuzundan geçen bir çözüm bulduğumu düşünüyorum:

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

[Kıvrılma] 7.21.3'te eklendi. Kaldırma desteği 7.42.0'da eklendi.

dan CURLOPT_RESOLVE açıkladı


1
--olol doe curl yok ...
JustAGuy

7
Makinemdeki kıvrılma (7.27.0) - çözüldü.
Theron Luhn,

Kullanarak çalıştığını curl -vgörebiliyor ve curl'ın DNS önbellek geçici çözümüne çözümleme seçeneğini eklediğini ve belirttiğiniz IP adresini kullandığını görebilirsiniz.
CMCDragonkai

CentOS 6.8 kıvrılma: seçenek - çözülme: bilinmeyen kıvrılma: daha fazla bilgi için 'curl --help' veya 'curl --manual' komutunu deneyin @ server3 [~] # curl -V curl 7.19.7 (x86_64-redhat-linux -gnu) libcurl / 7.19.7 NSS / 3.21 Temel ECC zlib / 1.2.3 libidn / 1.18 libssh2 / 1.4.2 Protokoller: tftp ftp telnet dikte ldap ldaps http dosyası https ftps scp sftp Özellikler: GSS-IDN IPv6 Büyük Dosya NTLM SSL libz
Jose Nobile,

Ana bilgisayar adı kullanırsanız IP_ADDRESS, seçeneğin sessizce yoksayılacağını unutmayın.
Xiong Chiamiov,

11

Sunucunun etki alanının belirli bir IP'de bulunduğunu düşünmesini sağlamak için / etc / hosts dosyasında değişiklik yapabilirsiniz.

Bu sözdizimi:

192.168.10.20 www.domain.tld

Bu, cURL'nin kırmak için SSL sertifikası olmadan istediğiniz IP adresini kullanmasını sağlar.


4
Bu işe yarar, ancak işletim sistemini bir bütün olarak değiştirmeyi gerektirmeyen bazı yöntemlere bakıyorum
Martin,

Açıkçası başka bir yol olduğunu sanmıyorum. Sertifikanın çalışması için doğru etki alanı adına erişmek için cURL'ye sahip olmanız ve belirli bir etki alanını bir IP ile eşlemenin yolu, DNS veya ana bilgisayar dosyasıdır.
miono

7

İşte manşu anda en çok oy alan yanıtın girişi, çünkü yalnızca programatik bileşene bir bağlantı içerdiklerinden:

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

Ancak verilen sınırlama nedeniyle ("Aynı ana bilgisayara, ancak farklı bağlantı noktalarına adres vermek istiyorsanız, birkaç girişe ihtiyacınız var demektir."), İkisini aynı anda çevirebilecek başka bir daha yeni seçenek düşünürdüm:

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

4

Windows'ta kıvrılıyorsa, çift tırnak işareti kullanın.

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

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

Düzeni / protokolü önden atlayabilirsiniz, ancak --resolve dizesindeki port numarasını atlayamazsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.