LoginSignup
0
1

More than 5 years have passed since last update.

PHP5.6からHTTPS通信を行う(Mac, XAMPP)

Posted at

背景

PHPからプログラムでAPIを扱う際に、ところどころ重要な情報を通信する必要があり、どう考えても平文でやり取りするのは危険なのでHTTPSを使うことにする。Google先生で調べながら、XAMPPでPHPのSSL設定を行ったが、エラーが出て苦戦した。エラーの修復も含めて、PHP5.6、XAMPPでHTTPS通信を行う方法を書く。

環境

PHP:5.6
OS :Mac OS X
WEBサーバー: Apache(XAMPP)

PHP,HTTPSでGoogle検索すると・・・大抵以下の設定についてでてきます。

php.iniで以下の文を記述する

(▼以下の文を新規追加、もしくは頭のセミコロンをはずす)
extension=php_openssl.dll 
...
...
...
(▼新規追加、もしくは頭のセミコロンをはずす)
allow_url_fopen = On

上記の2行をアクティブにしてください。そうするとHTTPSが許可されるはずです。
具体的な行の意味等は以下を参考にしてください。
→ http://hhelibex.hatenablog.jp/entry/20111225/1324794331

しかし、上記設定ではエラーが起こります。

実行したHTTPS通信のプログラムは以下の通りです。

require_once('./util/phpQuery-onefile.php');

$html = file_get_contents('https://www.google.co.jp');
$doc = phpQuery::newDocument($html);
echo $doc["title"]->text();

コードはスクレイピングをするためのもので、
こちらを参考にしています。

このコードを実行すると、
ERROR:certificate verify failed 
というSSL証明書のエラーが発生しました。

SSL証明書を別途用意する必要がある

SSL証明書は、Macの私の環境では、
/xamppfiles/etc/ssl.crt/server.crt に置いてありました。
このファイルが有効期限切れかどうか確かめたかったのですが、確かめ方がよく分からなかったので、断念。
新たに別のところから用意することに。

SSL証明書の用意

curl https://curl.haxx.se/ca/cacert.pem

上記を実行すると、証明書の中身がターミナルに表示されるので、
それを新たなテキストファイルにコピペして、ca-bundle-curl.crtというファイル名にしました。

元の証明書があった/xamppfiles/etc/ssl.crt/にca-bundle-curl.crtを格納し、
php.iniに以下を追記します。

curl.cainfo = /Applications/XAMPP/xamppfiles/etc/ssl.crt/ca-bundle-curl.crt
openssl.cafile = /Applications/XAMPP/xamppfiles/etc/ssl.crt/ca-bundle-curl.crt

これで有効なSSL証明書が更新されました。
上述のプログラムを実行するとしっかりとGoogleのタイトルが表示されます。

証明書の取得で参考にしたページは
ComposerからLaravelを導入しようとしてOpenSSL周りのエラーで困った件です。

今回の症状はPHP5.5以下だと起こらないようですね。
5.6以上の話になるようです。細かい要因等は割愛。

以上。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1