web-dev-qa-db-ja.com

CasperJS / PhantomJSがhttpsページをロードしない

PhantomJS/CasperJSで開くことができない特定のWebページがあることは知っていますが、このページが https://maizepages.umich.ed の1つかどうか疑問に思っていました。 CasperJSがエラーを表示します:PhantomJSはページstatus = failを開くことができませんでした。

Ssl-errorsを無視してユーザーエージェントを変更しようとしましたが、どのエージェントを使用するかを判断する方法がわかりません。

私が今しているのは、casper.start(url, function () { ... })を使用した基本的なキャスパーのセットアップだけです。ここで、url=https://maizepages.umich.edu;

24
Vishaal Kalwani

この問題は、SSLv3脆弱性(POODLE)の最近の発見に関連している可能性があります。 Webサイトの所有者は、WebサイトからSSLv3サポートを削除することを余儀なくされました。 PhantomJS <v1.9.8は デフォルト でSSLv3を使用するため、TLSv1を使用する必要があります。

casperjs --ssl-protocol=tlsv1 yourScript.js

キャッチオールソリューションは、新しいPhantomJSバージョンが他のSSLプロトコルに付属している場合にanyを使用することです。ただし、これにより、SSLv3をまだ無効にしていないサイトでPOODLEの脆弱性が悪用される可能性があります。

casperjs --ssl-protocol=any yourScript.js

別の方法:PhantomJS 1.9.8以降に更新します。 PhantomJS 1.9.8に更新すると 新しいバグ になり、CasperJSにとって特に迷惑なことに注意してください。

確認方法:スクリプトの先頭に resource.error イベントハンドラーを追加します。

casper.on("resource.error", function(resourceError){
    console.log('Unable to load resource (#' + resourceError.id + 'URL:' + resourceError.url + ')');
    console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString);
});

それが実際にSSLv3の問題である場合、エラーは次のようなものになります。

エラーコード:6.説明:SSLハンドシェイクに失敗しました


余談ですが、証明書に問題がある場合は、--ignore-ssl-errors=trueコマンドラインオプションを使用して実行することもできます。

65
Artjom B.