今回は待った無しになっているATS対応の話です。
そもそもATS対応って何じゃい?という方は、こちらをご参照下さい。
簡単に言うと、AppleさんとこのIOSアプリからAppleさんが言うセキュリティに
準拠していないサイトは片っ端から弾きまっせ。覚悟しとき。
という宣告です。
ATSに対応する為には
-------------------
・ TLS ver 1.2以上であること
・ 以下のcipherに対応している事
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
・サーバ証明書はsha256でキーは2048bit長以上にする事
-------------------
というルールがあるらしい。
何が困ったってCentOS5系を運用しているサイトやゲームですね。
特に側ネイティブでやっているアプリなんて季節的にもCentOS5があったりするのでは?
CentOS5でATS対応するには、
・opensslをsrcからコンパイル
・apacheの最新版をsrcからコンパイル
しなければ対応出来ません。
(対応出来たよ!という方は教えて下さい・・・)
ちなみにopensslをsrcコンパイルしてmod_ssl作ればええやん的な安易な発想でしたが、
SSLCompressionの設定、ECDHEに対応していない等の罠があり結論無理でした。
yumの環境だと相当難儀な作業になります。
モジュール類、特にphpもソースコンパイルして対応となると、
もうね、それだけで面倒な作業。
という訳で、出来る限りyumでインストールされている現況を崩す事なく、
何とかATS対応出来ないかという事でやってみました。
aprを変更せずに、prefix指定でソースコンパイルすれば、
そのままyumで入れた同じモジュールを使えるのではないか説が沸きあがり、
実際にやってみたら使えたのでご紹介します。
(実際にやっても自己責任でお願いしますね・・・)
1.作業ディレクトリ作成
解りやすく作業する為に作業ディレクトリを作ります。
mkdir /root/src
cd /root/src
2.ソースゲット
最新版のソースをゲットします。
元々2.2系だったので、2.2系の最新とopensslの1.0.1の最新を入れます。
wget http://ftp.jaist.ac.jp/pub/apache/httpd/httpd-2.2.31.tar.gz
wget https://www.openssl.org/source/openssl-1.0.1u.tar.gz
3.opensslのインストール
あくまでmod_sslを作るためだけのopensslにしたいので、
prefixを指定してインストールします。
#config時の"-fPIC"は入れても入れなくても大丈夫です。入れた場合、ソースの書き換えが一部必要になります。
tar xzvf openssl-1.0.1u.tar.gz
cd openssl-1.0.1u
./config --prefix=/usr/local/openssl1.0.1 shared
make
make install
cd ..
4.apache
apacheについても既存環境を汚さないようにprefixを指定してインストールします。
ちなみにenable類は無くても大丈夫だと思います。何か、念のためやりました。
tar xzvf httpd-2.2.31.tar.gz
cd httpd-2.2.31
./configure --prefix=/usr/local/httpd-2.2.31 \
--enable-dav=shared \
--enable-dav-fs=shared \
--enable-dav-lock=shared \
--enable-proxy=shared \
--enable-proxy-connect=shared \
--enable-proxy-ftp=shared \
--enable-proxy-http=shared \
--enable-proxy-balancer=shared \
--enable-proxy-ajp=shared \
--enable-rewrite=shared \
--enable-ssl=shared \
--enable-mem-cache=shared \
--enable-so \
--enable-modules=all \
--enable-mods-shared=all \
--with-ssl=/usr/local/openssl1.0.1
make
make install
cd ..
ここまで出来れば後はapacheのmoduleと起動スクリプト類を入れ替えるだけです。
ちなみに同じようなCentOS5が他にもある場合、ここで作ったディレクトリを配布すれば、
いちからコンパイルする必要は無いです。
/usr/local配下にopenssl1.0.1とhttpd-2.2.31ディレクトリを置いてやればokです。
適用作業はこんな感じでやりました。
5.初期コンフィグのバックアップ
戻せるようにしておきましょう。
mv /usr/local/httpd-2.2.31/conf /usr/local/httpd-2.2.31/conf.org
mv /usr/local/httpd-2.2.31/modules /usr/local/httpd-2.2.31/modules.org
6.既存モジュールのcopy
yumで入れたモジュールをコピーします。
#パスは64bitの場合です。
cp -rp /usr/lib64/httpd/modules /usr/local/httpd-2.2.31/
7.既存コンフィグのコピー
既存のコンフィグを適用させましょう。
cp -rp /etc/httpd/conf /usr/local/httpd-2.2.31/
cp -rp /etc/httpd/conf.d /usr/local/httpd-2.2.31/
cp -rp /etc/httpd/common /usr/local/httpd-2.2.31/
8.設定ファイル類のディレクトリ構成設定
運用性を考えて同じディレクトリ構成にしておきましょう。
mv /etc/httpd /etc/httpd.org
ln -s /usr/local/httpd-2.2.31 /etc/httpd
9.起動ファイルの変更
戻せるようにしておくのと、tab効きするようにしておきましょう。
mv /etc/init.d/httpd /etc/init.d/httpd.org
chmod -x /etc/init.d/httpd.org
ln -s /usr/local/httpd-2.2.31/bin/apachectl /etc/init.d/httpd
mv /usr/sbin/httpd /usr/sbin/httpd.org
chmod -x /usr/sbin/httpd.org
ln -s /usr/local/httpd-2.2.31/bin/httpd /usr/sbin/httpd
10.mod_sslのモジュールのみコピー
mod_sslは今回コンパイルしたものを使います。
cp -pi /usr/local/httpd-2.2.31/modules.org/mod_ssl.so /usr/local/httpd-2.2.31/modules/
11.logやrunフォルダの設定
logフォルダは引き継ぐようにしておきます。
mkdir /etc/httpd/run
mv /etc/httpd/logs /etc/httpd/logs.org
ln -s /var/log/httpd /etc/httpd/logs
12.アップデートしたopensslをmod_sslが読みに行く為の設定
最後にmod_sslがprefixしたopensslを読みに行けるようにしておきます。
echo "/usr/local/openssl1.0.1/lib" >> /etc/ld.so.conf
ldconfig
以上で完了。
古いapacheが上がっていればpkill httpdで落としてやれば、
普通に新しいapacheを上げられる筈。
これで構築したサイトを以下で見てみるとATS対応している筈。
https://www.ssllabs.com/ssltest/
ここまででとりあえず一時しのぎ的にATS対応出来たとしましょう。
でもね、そもそも論としてCentOS5を使い続けるってどうなのよ?
という疑問を投げかけざるを得ない。
という訳で、取り急ぎ時間が出来たという事で、
しっかりと計画してリプレースしましょう。
それではよいクラウド構築を。
一応、、、、もとにもどす手順も置いときます。
rm /etc/httpd
mv /etc/httpd.org /etc/httpd
rm /etc/init.d/httpd
mv /etc/init.d/httpd.org /etc/init.d/httpd
chmod +x /etc/init.d/httpd
rm /usr/sbin/httpd
mv /usr/sbin/httpd.org /usr/sbin/httpd
chmod +x /usr/sbin/httpd
一応、、、、もとにもどす手順も置いときます。
rm /etc/httpd
mv /etc/httpd.org /etc/httpd
rm /etc/init.d/httpd
mv /etc/init.d/httpd.org /etc/init.d/httpd
chmod +x /etc/init.d/httpd
rm /usr/sbin/httpd
mv /usr/sbin/httpd.org /usr/sbin/httpd
chmod +x /usr/sbin/httpd