EC-CUBE4.2インストール時のエラー
Windows環境でXAMPPを使用してEC-CUBE4.2のテスト環境を構築しようとした時に遭遇して困りました。
構築環境
・Windows 10
・XAMPP 8.1.17 インストールフォルダ:C:/xampp
・EC-CUBE 4.2
EC-CUBE解凍先にブラウザでアクセスすると下記エラーが表示されインストールできません。
Warning: openssl_pkey_export(): Cannot get key from parameter 1 in [解凍先パス]\app\Plugin\Api42\DependencyInjection\Compiler\ApiCompilerPass.php on line 111
~ 以下略 ~
関数の使用自体や使用方法は間違っていないはずなので、問題があるのは実行環境側です。
openssl_pkey_export() はエクスポート可能な形式でキーを文字列に取得するという関数で、この関数を使用するためには正しい形式の openssl.cnf をインストールする必要があります。
ここが怪しいです。
phpinfo() を表示してみると openssl.cnf が設定されているのは Apache Environment 、openssl 、Additional Modules の Environment の3つで、問題があるのは openssl の設定値でした。
XAMPP環境なのに Openssl default config が何故か C:\Apache24\conf/openssl.cnf となっていて、存在しないファイルを参照し正しくないからエラーが発生した、ということのようです。
エラーの原因は Openssl default config の値ですので「C:\Apache24\conf/openssl.cnf」を有効なものに書き換えると解決できそうです。
どこかにあるのかも知れないですが、自力ではXAMPPで Openssl default config の値を設定するファイルや項目は見つけられませんでした。
そこで苦し紛れにWindowsのシステム環境変数に登録してみたところ、上手くいきました。
[設定]→[システム]→[詳細情報]→[システムの詳細設定]→[環境変数]
システム環境変数を新規作成
変数名:OPENSSL_CONF
変数値:C:/xampp/apache/conf/openssl.cnf
Windowsの環境変数をいじるので、PCは再起動した方が良いです。
設定後、phpinfo() の Openssl default config の値は C:/xampp/apache/conf/openssl.cnf に変わっていました。
実は既にEC-CUBE開発コミュニティのフォーラムで解決策が検討されており、phpinfo() で表示される(php.ini の extension=openssl と extension=php_openssl.dll の有効化が必要です) Openssl default config の値にあるパス C:\Apache24\conf フォルダを作成してそこに C:/xampp/apache/conf/openssl.cnf にある openssl.cnf をコピーして設置する方法が提示されていました。
変数の値を変えるのではなく、値に合わせる方法です。
一度存在を認識させれば仮設した C:\Apache24\conf/openssl.cnf は削除しても問題ないとのことです。
また、今回のエラーの直接的な原因ではなさそうですが、 httpd-xampp.conf のパスの誤り (SetEnv OPENSSL_CONF “C:/xampp/apache/bin/openssl.cnf" → SetEnv OPENSSL_CONF “C:/xampp/apache/conf/openssl.cnf")の訂正も併せて訂正項目として投稿されていましたので、至れり尽くせりです。
openssl.cnfをコピーしたりインストールフォルダとは別にフォルダを用意したりするのに抵抗がある場合は環境変数で対処できます。
環境変数の設定が嫌な場合は、XAMPPでエラーが出ないバージョンを探す旅に出る必要がありそうです。
httpd-xampp.conf のパスの誤りと同じように恐らくXAMPPのバグだと思いますので、将来的には修正されることを期待しています。