質問
- PHPでhttpsのページを読み込めません
-
本文:
file_get_contentsでhttpsのページを読み込もうとしたのですが、エラーを吐いてしまい(@を付けてエラーを消しても読み込めない状態)curlも使ったのですが、どちらも
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
となって読み込めません。
httpのページは読み込めました。
httpsのページを読み込む事はできませんか? - 緊急度:通常投稿者:mcpeさん投稿時間:2015/10/06 12:47
回答 No.3913
-
本文:
たとえば、
https://www.google.co.jp/
というページも読み込めないのでしょうか?
- 投稿者:k-tanさん 投稿時間:2015/10/06 13:13
質問者からのコメント
すみません…
書き忘れていたのですが、Google等の一部のページは読み込めました
回答 No.3915
-
本文:
> error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
どういうプログラムを書いていて、どこにアクセスしているのかわからないと、断定はしにくいですが、最近は、SSLV3 でのアクセスは禁止していて、TLSでのアクセスしか受け付けないところが多いですよ。
( 勿論、SSLv3の暗号化は、弱過ぎて危険だからという理由ですが )
- 投稿者:ジョバンニさん 投稿時間:2015/10/07 06:52
回答 No.3922
-
本文:
> curlも使ったのですが、
curl -v https://... とか
curl -v --tlsv1.0 https://... とか
curl -v --sslv3 https://... とかの結果はどうなりますかね?
- 投稿者:ジョバンニさん 投稿時間:2015/10/08 15:41
質問者からのコメント
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_HEADER, false );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, "TLSv1");
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch,CURLOPT_MAXREDIRS,10);
curl_setopt($ch,CURLOPT_AUTOREFERER,true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout );
$result = curl_exec( $ch );
var_dump(curl_error($ch));
curl_close( $ch );
のようにしてもエラーを吐きました
回答 No.3923
-
本文:
日本語が通じない人なのかな?
> のようにしてもエラーを吐きました
エラーになることは最初から判っているので、
『どういうエラーなのか?』
を聞いているんですけどね。
3パターンについてそれそれどうなるか?
まあ、どのみち、
curl_setopt($ch,CURLOPT_VERBOSE,true);
を指定しないと、まともな記録は取れませんが。。
curl_setopt($ch,URLOPT_SSLVERSION,CURL_SSLVERSION_SSLv3);
をつけた場合と、
curl_setopt($ch,URLOPT_SSLVERSION,CURL_SSLVERSION_TLSv1_0);
を付けた場合に、それぞれどうなりますか?
ログを「正確にかつ省略せず」引用してごらん。
# ま、OSのバージョンとか、phpのバージョンとか、opensslの
# バージョンとかも書いた方がいいですよ。 - 投稿者:ジョバンニさん 投稿時間:2015/10/08 21:19
質問者からのコメント
Warning: curl_setopt() expects parameter 2 to be long, string given in /home/mcpe/mcpe.firebird.jp/public_html/test/me.php on line 48
string(80) "error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure" NULL
どちらを書いてもこのようなエラーになりました。
PHPのバージョンは5.3.3
OSはfirebirdの物でCentOS release 5.11 (Final)です
回答 No.3925
この回答がベストアンサーです
>まあ、どのみち、
>curl_setopt($ch,CURLOPT_VERBOSE,true);
>を指定しないと、まともな記録は取れませんが。。
と書いたのに、このオプションを付けてないでしょう?
> PHPのバージョンは5.3.3
> OSはfirebirdの物でCentOS release 5.11 (Final)です
それは、古すぎです。
その頃の php / openssl は。
SSLv3 で失敗したときに、TLSに切り替えるロジックにバグがあります。
php は、5.5以上に、opensslは最新のものでお試しあれ。
質問者からのコメント
curl_setopt($ch,CURLOPT_VERBOSE,true);
は書きましたが表示が変わりませんでした
PHPは5.5にしましたが、表示は変わりませんでした
opensslはバージョンを変えることができないので、
別の方法を使う事にします…
ありがとうございました。