特定のIPアドレスでHTTPS URLをテストする方法


77

Webサイトが複数のサーバー間で負荷分散されているとします。など、コマンドが動作しているかどうかをテストするコマンドを実行したいcurl DOMAIN.TLD。したがって、各IPアドレスを分離するには、IPを手動で指定します。ただし、多くのWebサイトがサーバーでホストされている可能性があるため、次のようにホストヘッダーを提供していますcurl IP_ADDRESS -H 'Host: DOMAIN.TLD'。私の理解では、これらの2つのコマンドはまったく同じHTTP要求を作成します。唯一の違いは、後者ではcURLからDNSルックアップ部分を取り出して手動で実行することです(間違っている場合は修正してください)。

これまでのところすべて。しかし、今はHTTPS URLについても同じことをしたいと思っています。繰り返しますが、このようにテストできcurl https://DOMAIN.TLDます。しかし、IPを手動で指定したいので、を実行しcurl https://IP_ADDRESS -H 'Host: DOMAIN.TLD'ます。今、私はcURLエラーを受け取ります:

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

もちろん、証明書を気にしないようにcURLに指示することでこれを回避できます(「-k」オプション)が、これは理想的ではありません。

接続されているIPアドレスを、SSLによって認証されているホストから分離する方法はありますか?


ロードバランサーはSSLターミネーションポイントですか、それとも個々のインスタンスですか?
rikola

ホストヘッダーがHTTPSのバックエンドで正しいVHostと証明書を選択しない理由を誰かが説明できますが、HTTPの場合はこれだけで問題ありません。クライアントは、IPが使用された場合でもドメインが使用された場合でも、(HTTPSプロトコルを使用して)バックエンドに情報を渡しますか?
NeverEndingQueue

@NeverEndingQueueこれを理解するには、TLSとHTTPの関係を知る必要があります。サーバーはHostヘッダーにアクセスする前に証明書を表示する必要があるため--resolve、IPアドレスを固定する正しい方法です。
フランクリンユ

回答:


118

私はcURLマニュアルを介して解決策を見つけたと思う:

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

[curl] 7.21.3で追加されました。7.42.0で追加された削除サポート。

CURLOPT_RESOLVEからの説明


1
解決

7
私のマシン(7.27.0)のカールには--resolveがあります。
セロン・ルー

使用するcurl -vと動作することがわかり、curlはDNSキャッシュの一時に解決オプションを追加し、指定したIPアドレスを使用することを確認できます。
CMCDragonkai

CentOS 6.8 curl:オプション--resolve:は不明curl:詳細については、 'curl --help'または 'curl --manual'を試してくださいroot @ server3 [〜]#curl -V curl 7.19.7(x86_64-redhat-linux -gnu)libcurl / 7.19.7 NSS / 3.21 Basic ECC zlib / 1.2.3 libidn / 1.18 libssh2 / 1.4.2 Protocols:tftp ftp telnet dict ldap ldaps http file https ftps scp sftp Features:GSS-Negotiate IDN IPv6 Largefile NTLM SSL libzを
ホセノビル

にホスト名を使用する場合IP_ADDRESS、オプションを静かに無視することに注意してください。
Xiong Chiamiov

11

/ etc / hostsを変更して、ドメインが特定のIPにあるとサーバーに認識させることができます。

これは構文です:

192.168.10.20 www.domain.tld

これにより、cURLは、SSL証明書が破損することなく、必要なIPアドレスを使用します。


4
それは機能しますが、OS全体を変更する必要のない方法を探しています。
マーティン

私は正直に別の方法があるとは思わない。証明書が機能するためには、cURLを取得して正しいドメイン名にアクセスする必要があります。特定のドメインをIPにマップする方法は、DNSまたはホストファイルのいずれかです。
みおの

7

以下は、manプログラムコンポーネントへのリンクのみが含まれているため、現在最も支持されている回答のエントリです。

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

しかし、与えられた制限のため(「同じホストで異なるポートにアドレスを提供する場合、いくつかのエントリが必要です」)、両方を同時に変換できる別の新しいオプションを検討します。

--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でcurlを実行している場合は、二重引用符を使用します

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

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

前もってスキーム/プロトコルをスキップできますが、-resolve文字列のポート番号はスキップできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.