LoginSignup
4
5

More than 5 years have passed since last update.

[PHP]composer diagnose 実行時に OpenSSL のエラーが起きたら PHP のバージョンの問題かも

Last updated at Posted at 2018-08-24

Composer とは

PHPのパッケージ管理システムです。
詳しくはこちらの記事がわかりやすいです。
https://qiita.com/atwata/items/d6f1cf95ce96ebe58010

Composer本家サイト
https://getcomposer.org/

composer diagnose とは

ざっくり説明すると診断用コマンドです。
https://getcomposer.org/doc/03-cli.md#diagnose

環境

Windows7 Professional SP1

経緯

ちょっと別件で必要になったので手元のパソコンに composer をインストールしました。
その後、composer diagnose コマンドを composer のインストール確認として実行してみたところ下記のようなメッセージが出力されました。

GitBash
$ composer diagnose
Checking composer.json: WARNING
No license specified, it is recommended to do so. For closed-source software you may use "proprietary" as license.
Checking platform settings: WARNING
The OpenSSL library (0.9.8zb) used by PHP does not support TLSv1.2 or TLSv1.1.
If possible you should upgrade OpenSSL to version 1.0.1 or above.

Checking git settings: OK
Checking http connectivity to packagist: OK
Checking https connectivity to packagist: OK
Checking github.com rate limit: FAIL
[Composer\Downloader\TransportException] The "https://api.github.com/rate_limit" file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages:
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
Failed to enable crypto
failed to open stream: operation failed
Checking disk free space: OK
Checking pubkeys:
Tags Public Key Fingerprint: ******* ******** ********
Dev Public Key Fingerprint: ******* ******** ********
OK
Checking composer version: OK
Composer version: 1.7.2
PHP version: 5.3.29

エラー抜粋

The OpenSSL library (0.9.8zb) used by PHP does not support TLSv1.2 or TLSv1.1.
If possible you should upgrade OpenSSL to version 1.0.1 or above.

(省略)

[Composer\Downloader\TransportException] The "https://api.github.com/rate_limit" file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages:
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
Failed to enable crypto
failed to open stream: operation failed

原因

2018年2月以降、github.com, api.github.com への接続が TLSv1/ TLSv1.1 ではできなくなったらしいです。
https://blog.github.com/2018-02-02-weak-cryptographic-standards-removal-notice/

なので https://api.github.com/rate_limit からファイルのダウンロードができんよ!って怒られているものと思われます。

OpenSSLのバージョンが古いのかな?

と思ったので確認してみます。

$ openssl version
OpenSSL 1.0.2o  27 Mar 2018

OpenSSL のバージョンは足りているようです。The OpenSSL library (0.9.8zb) used by PHP ってエラーに書いてあるので PHP が使っている openssl のバイナリが古いって話ですかね、もしかして。

PHP のバージョン

コマンド打つまでもなく composer diagnose 時のメッセージの最後に既にPHPのバージョンが出力されてました。

PHP version: 5.3.29

まさかの 5.3w
特に 5.3 にこだわっているわけではないのでこの際PHPのバージョンを上げてみることにします。

古いPHPのアンインストール

まず 5.3.29 の PHP はアンインストールします。
当方の環境ではインストーラで入れていたので、 コントロール パネル > すべてのコントロール パネル項目 > プログラムと機能 からphp-5.3.29 をアンインストールしてサクッと終わりました。

なお、万が一 5.3.29 の環境を復活させたい場合は
こちらから php-5.3.29-win32-VC9-x86.msi をダウンロードして実行すれば可能です。
https://windows.php.net/downloads/releases/archives/

新しいPHPのインストール

世間では既に7系がリリースされていますが、ローカルのPHPは一応まだ5系にしておきたかったのでひとまず5.6を入れてみることします。
こちらから VC11 x64 Thread Safe の zip をダウンロードしました。
https://windows.php.net/download#php-5.6

当方の端末の場合はCドライブ直下に解凍し、システム環境変数にパスを通しました。
php -v コマンドで確認したところ、うまくいってました。

$ php -v
PHP 5.6.37 (cli) (built: Jul 19 2018 18:17:53)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

php.ini の準備

phpのインストールはできたので拡張機能の設定を行います。
php.ini-production をコピーして、php.ini にリネームします。

php.ini を編集してまず extension_dir の指定を行います。
パスはphpの場所に合わせて変更してください。

extension_dir = "C:\php-5.6.37\ext"

次に php_openssl.dll のコメントを解除して有効化します。

extension=php_openssl.dll

これから composer を実際に使う上で必要になると思われるので curl もついでにコメント解除して有効化しておきます。

extension=php_curl.dll

ちなみに

php.ini を設定しないと composer diagnose でこんなエラーが出ます。(出ました)

$ composer diagnose
[Composer\Exception\NoSslException]
  The openssl extension is required for SSL/TLS protection but is not available. If you can not enable the openssl extension, you can disable this error, at your own risk, by setting
   the 'disable-tls' option to true.

再度 composer diagnose 実行

$ composer diagnose
Checking platform settings: OK
Checking git settings: OK
Checking http connectivity to packagist: OK
Checking https connectivity to packagist: OK
Checking github.com rate limit: OK
Checking disk free space: OK
Checking pubkeys:
Tags Public Key Fingerprint: ******* ******** ********
Dev Public Key Fingerprint: ******* ******** ********
OK
Checking composer version: OK
Composer version: 1.7.2
PHP version: 5.6.37
PHP binary path: C:\php-5.6.37\php.exe

ようやくうまく動いてくれました。ということはやはりPHPのバージョンの問題だったということですかね。
なんとなく php 5.6.37 のフォルダから php_openssl.dll だけ持ってくれば5.3のままでも動きそう?な気はしますがなんとも言えないです。変なバグが出ても困るのでこれでよしとします。

残された疑問

あれ、ということは Composer は事実上動作要件が 5.3 では足りないってことなんですかね。
公式では PHP 5.3.2 以上推奨 とされていますが、どうなんでしょう。

もしかしたら Windows に限った話かもしれないのでまだ断定はできないですね。これはまた別の機会にちょっと検証してみたいなと思います。

4
5
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
4
5