web-dev-qa-db-ja.com

curlはhttpsリクエストで成功しますが、wgetはしません

コマンドラインからcurlを実行すると

_curl "https://example.com"
_

すぐに成功し、リクエストの結果を返します。

同じwgetコマンドを実行すると

_wget https://example.com
_

最終的には、「SSL接続を確立できません」でタイムアウトします。特定のエラーメッセージはありません。接続しますが、SSLハンドシェイクを実行できません。私は_--no-check-certificate_を試しましたが、違いはありませんでした-タイムアウトに関連しているようです。

しかしながら:

_wget http://example.com
_

正常に動作します(HTTPとHTTPS)。

これは PHPの "file()" メソッド呼び出しにも影響します。

私の質問は、curlが(ドメイン内のすべてのサイトの)ページを取得するのに、wgetまたはphpインタープリターを取得しないのはなぜですか?これは週末の新しい問題で、サーバーは以前は問題ありませんでした。

(オペレーティングシステムはRed Hat Enterprise Linux 6.4です)

9
Resorath

これは、SSLプロトコルの選択に関する問題のようです。何らかの理由で、サーバーはプロトコルにうるさいです。一部のクライアントはたまたま正しい推測をしますが、そうでないクライアントもあります。

wgetを使用して、たとえば、 --secure-protocol=tlsv1または--secure-protocol=sslv3。詳細については、GNU Wget man pageを参照してください。

PHPについては、SOに関するこの質問を参照してください。

6
tuomassalo

Red Hat Enterprise Linux 6.x以前のメジャーバージョンでは、wgetServer Name Indication をサポートしません。これは、増え続けるTLS/SSLで保護されたWebサイトに正しくアクセスするために必要です。おそらくあなたのものも含まれます。一方、RHEL 6のcurlはSNIをサポートしています。

Red Hatはこの問題を認識しています および RHEL 6.6で修正をリリース 。この問題はRHEL 7.0でも修正されています。

4
Michael Hampton

その表面上、これは確かにあまり意味がありません。最初のステップは、sslでwgetが機能することを確認することです(wgetで他のsslサイトにアクセスできますか?)。

そうでない場合:wgetの問題として追跡する

(注:4つのdiff sslサイトw wgetを試しても2つが壊れた場合でも、それはwgetの問題です)

別の診断:ブラウザはhttps URLに対して何をしますか? (クロムとffox)-警告を出しますか、それとも正常に接続しますか?