コマンドラインから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です)
これは、SSLプロトコルの選択に関する問題のようです。何らかの理由で、サーバーはプロトコルにうるさいです。一部のクライアントはたまたま正しい推測をしますが、そうでないクライアントもあります。
wget
を使用して、たとえば、 --secure-protocol=tlsv1
または--secure-protocol=sslv3
。詳細については、GNU Wget man pageを参照してください。
PHPについては、SOに関するこの質問を参照してください。
Red Hat Enterprise Linux 6.x以前のメジャーバージョンでは、wget
は Server Name Indication をサポートしません。これは、増え続けるTLS/SSLで保護されたWebサイトに正しくアクセスするために必要です。おそらくあなたのものも含まれます。一方、RHEL 6のcurl
はSNIをサポートしています。
Red Hatはこの問題を認識しています および RHEL 6.6で修正をリリース 。この問題はRHEL 7.0でも修正されています。
その表面上、これは確かにあまり意味がありません。最初のステップは、sslでwgetが機能することを確認することです(wgetで他のsslサイトにアクセスできますか?)。
そうでない場合:wgetの問題として追跡する
(注:4つのdiff sslサイトw wgetを試しても2つが壊れた場合でも、それはwgetの問題です)
別の診断:ブラウザはhttps URLに対して何をしますか? (クロムとffox)-警告を出しますか、それとも正常に接続しますか?