次の方法でHTTPS Webサイトをカールしようとしています。
$ curl -v https://thepiratebay.se/
ただし、次のエラーで失敗します。
* About to connect() to thepiratebay.se port 443 (#0)
* Trying 173.245.61.146...
* connected
* Connected to thepiratebay.se (173.245.61.146) port 443 (#0)
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS alert, Server hello (2):
* error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
* Closing connection #0
curl: (35) error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
-k
/--insecure
を使用するか、insecure
を~/.curlrc
に追加しても、違いはありません。
curl
コマンドラインを使用して証明書を無視または強制するにはどうすればよいですか?
wget
を使用すると問題なく動作するようです。以下のようにopenssl
でテストするときにも機能します。
$ openssl s_client -connect thepiratebay.se:443
CONNECTED(00000003)
SSL handshake has read 2651 bytes and written 456 bytes
New, TLSv1/SSLv3, Cipher is AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : AES128-SHA
私は:
$ curl --version
curl 7.28.1 (x86_64-Apple-darwin10.8.0) libcurl/7.28.1 OpenSSL/0.9.8| zlib/1.2.5 libidn/1.17
Protocols: dict file ftp ftps Gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp
Features: IDN IPv6 Largefile NTLM NTLM_WB SSL libz
一部のサイトはSSL 3.0のサポートを無効にします(多くのエクスプロイト/脆弱性が原因である可能性があります)。そのため、特定のSSLバージョンを-2
/--sslv2
または-3
/--sslv3
。また-L
リクエストされたページが別の場所に移動された場合、試してみる価値があります。
私の場合、それはcurl
バグ( OpenSSLにあります )だったので、curl
を最新バージョン(> 7.40)にアップグレードする必要があり、正常に動作しました。
以下も参照してください。
Apple TLS/SSLエンジンをOpenSSLから独自のセキュアトランスポートエンジンにApple分散cURLバイナリに切り替え、クライアント証明書の使用を中断させました。自作のcURLバイナリ:
brew install curl
brew link curl --force
間違ったホストヘッダーを送信すると、このエラーが発生しました。
http://127.0.0.1:12345 から https://site.com:44 へのプロキシを開発していました。そのため、ブラウザから送信されたリクエストヘッダーをそのまま送信し、Host:127.0.0.1:12345ヘッダーがありました。問題を解決するために、ブラウザーから送信されたホストヘッダーを削除しました。