読者です 読者をやめる 読者になる 読者になる

長生村本郷Engineers'Blog

千葉県長生村本郷育ちのエンジニアが書いているブログ

PHP+OpenSSLバージョンアップ

SSL OpenSSL PHP

f:id:kenzo0107:20160222184453j:plain

概要

ベリトランスモジュールのバージョンアップに際して
2016年以内にSSL v3.0/TLS 1.0無効化処理が必須となりました。

世界的なセキュリティ対策の一環として必須事項なので
ベリトランス以外の決済も、また決済以外でもシステムの対策必須です。

http://internet.watch.impress.co.jp/docs/news/20141015_671482.htmlinternet.watch.impress.co.jp

EC-CUBEベリトランスの決済モジュールでは PHPからOpenSSLライブラリを利用して決済へ通信を実施しています。

そのPHPのOpenSSLライブラリを1.0.1i以上(最新が推奨)に
バージョンアップする必要があります。

対応する ToDoとしては以下になります。

TLS1.1以上を利用するには openssl 1.0.1i 以上を利用する必要アリ
→ openssl バージョンアップ (1.0.1i以上)
PHP の再コンパイルし OpenSSLライブラリ(1.0.1i以上)をバージョンアップ

上記対応をまとめました。

ApacheSSL v3.0/TLS1.0利用不可設定は別途
ググればすぐ出てきます♪

環境

  • CentOS release 6.6 (Final)
  • PHP 5.3.9
  • openssl 1.0.1g

手順

PHP で利用している OpenSSL のライブラリバージョン確認

これからPHPコンパイルし直すので
OpenSSL support が disableでも問題ないです。

※今回では既にインストール済みであるというケースを想定しています。

# php -i | grep OpenSSL

OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.1g  28 Jan 2016
OpenSSL Header Version => OpenSSL 1.0.1g  28 Jan 2016
OpenSSL support => enabled

PHPでで利用されるOpenSSL Library, Header Version が 1.0.1g であることが確認できました。

既存openssl バックアップ

既にインストール済みかと思いますので
現行バージョンを一旦退避します。

# openssl version
1.0.1g

# which openssl
/usr/local/bin/openssl

// 名前変更でバックアップとして残す
# mv /usr/local/bin/openssl /usr/local/bin/openssl1.0.1g 

何か不具合が発生した場合にまきもどせるように、念のためバックアップをとりました。

openssl バージョンアップ

ソースからビルドします。

# cd /usr/local/src
# wget http://www.openssl.org/source/openssl-1.0.2f.tar.gz
# tar xzvf openssl-1.0.2f.tar.gz
# cd openssl-1.0.2f
# ./config --prefix=/usr/local shared -fPIC
# make
# make install

-fPIC は 動的共有オブジェクト(DSO)としてmod_sslをビルドし
PHPバイナリ実行ファイルからフックして利用する為に必要、
と言ったところでしょうか。

openssl バージョンアップ確認

正しくバージョンアップされていることを確認しました。

# openssl version

OpenSSL 1.0.2f  28 Jan 2016

PHPコンパイル

  • 既存PHPがどのようにconfigureされているか確認
# php -i | grep config

Configure Command =>  './configure'  '--enable-mbstring' '--enable-zend-multibyte' '--with-mysql' '--with-mysqli' '--enable-mbregex' '--with-gd' '--with-jpeg-dir=/usr/lib' '--with-png-dir=/usr/lib' '--with-freetype-dir=/usr/lib' '--with-zlib-dir' '--with-libdir=lib64' '--enable-soap' '--with-apxs2=/etc/httpd/bin/apxs' '--with-openssl=/usr/local'

--with-openssl がない場合は上記のように追加します。
今回は既に指定済みです。

上記のconigure情報を利用して
--with-opensslがあることを確認した上で
コンパイルします。

# cd /usr/local/src/php-5.3.9
# ./configure --enable-mbstring --enable-zend-multibyte --with-mysql --with-mysqli --enable-mbregex --with-gd --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib --with-freetype-dir=/usr/lib --with-zlib-dir --with-libdir=lib64 --enable-soap --with-apxs2=/etc/httpd/bin/apxs --with-openssl=/usr/local
# make
# make install

以下のようなエラーが出る場合は、手順)「openssl バージョンアップ」をご確認下さい。
新たにopensslをソースからコンパイルしてビルドしたときなどに出るエラーです。

configure: error: Cannot find OpenSSL's <evp.h>

PHPで利用するOpenSSL ライブラリのバージョン確認

# php -i | grep OpenSSL

OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.2f  28 Jan 2016
OpenSSL Header Version => OpenSSL 1.0.2f  28 Jan 2016
OpenSSL support => enabled

OpenSSL Library, Header Version が共に指定通りとなりました。

以上です。