QA@IT

http_request2でUnable to connect to ssl://xxxx.xxxxxxxx.com:443のエラー

3566 PV

http_request2でUnable to connect to ssl://xxxx.xxxxxxxx.com:443のエラーになってしまいます。

$req = new HTTP_Request2();
@$req->setUrl($url);
$req->setMethod(HTTP_Request2::METHOD_POST);
$req->setConfig('ssl_verify_peer', false);
$req->addPostParameter($data);
$response = $req->send();

$urlはPOST先のURLでhttps://xxxx.xxxxxxxx.com/
$dataはPOST対象データで連想配列になっています。

エラー詳細は以下の通りです。
Unable to connect to ssl://xxxx.xxxxxxxx.com:443. Error: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

$req->setConfig('ssl_verify_peer', false);が必要との情報があったのですが、
既に$req->setConfig('ssl_verify_peer', false);は入っています。

回答

参考情報にしかならないですが、ためしにAzureで新規にクラウドサービスつくって試して、Azureと関係ない外部のhttpsサイトにアクセスしてみました。

http → https でも https → https でも通信できますね。
GETでもPOSTでも大丈夫です。

Azure側は 自己証明書でhttpsアクセスできるようにしてます。 OSはWin2008R2です(Win2008じゃなくてすいません)。
PHPのWebRoleが1個あるだけの簡単なものです。

http_request2はcomposer経由でインストールしてとれたvendorを流用してます。

httpsサイトであってもプログラムが動き始めれば動作は同じだと思ってますので、SSL⇒SSLか非SSL⇒SSLかは関係ないように思います。それよりはhttps環境に通信するためのモジュールが揃っているかとか、相手方サーバーにIPなどではじかれていないかの方が気になりますので、エンドポイント増やすなどして非SSLからの通信できるか試された方が良いかと思います。

以上です。

編集 履歴 (0)

それに加えて

$req->setConfig('ssl_verify_host', false);

も付け足すとどうなりますか?

編集 履歴 (0)
  • ありがとうございます。
    $req->setConfig('ssl_verify_host', false);を付け足しても変わりませんでした。
    ちなみにSSLを使っていないローカル環境だと正常に動きますが、SSLを使用しているサーバ(クラウドのAzureを使用)にアップするとエラーになるので、https⇒httpsのPOSTの場合がうまくいかないような気がしています。
    -
  • AzureのサーバーのOSはなんですか?なにかしらAzure上でhttps以外で実行が確認できますか?
    system関数を使ってcurl(Linuxの場合)やHttp_Request2のみ行うphpファイルを実行などできるといいのですが。
    そもそも対象のサーバーにSSL通信するためのモジュールがそろっているのか確認しておきたいですね。
    -
  • 非SSLからのローカルマシンからは通信できる、かつサーバ(SSL環境)にアップした後も同プログラム内から別の非SSLのドメインへは正常に通信できるため、SSL⇒SSLの場合のみのエラーになります。 -
  • Azureサーバー(非SSLでの実行)から別のSSLドメインへはどうですか?その状況が作れないならそれでもかまいません。 -
  • OSも教えてください(phpが動いているゲストマシンのOS) -
  • OSはwindows2008サーバです。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。