Categories
SugiBlog ホームページ制作・システム開発

OpenSSL バージョンアップ TLS1.1以降に対応

OpenSSL0.9.8zgではSSL2、3、TLS1.0までしか対応していません。
TLS1.1、1.2に対応させるため、OpenSSL1.0.1uにバージョンアップしました。

まずはソースを公式サイトからダウンロードします。
https://www.openssl.org/source/old/1.0.1/

ソースを/usr/local/srcに保存します。
/usr/local/srcに移動して該当ファイルを解凍します。

cd /usr/local/src
tar -xvzf openssl-1.0.1u.tar.gz

解凍したディレクトリに移動し、コンパイルしてインストールします。

cd openssl-1.0.1u
./config
make
make install

デフォルトは「/usr/local/ssl」にインストールされます。

バージョンを確認してみましょう。

/usr/local/ssl/openssl version

バージョン情報が出力されますので、バージョンアップされていればOKです。

TLS1.1、1.2が使えるかどうか確認してみましょう。

/usr/local/ssl/openssl s_client -connect example.jp:443 -tls1_1 < dev/null
/usr/local/ssl/openssl s_client -connect example.jp:443 -tls1_2 < dev/null

通信可能かどうかが表示されます。
もしも使えない場合はunknown optionと言われます。

しかし、ここで問題が発生しました。
Apacheから見るとOpenSSLのバージョンは0.9.8zgのままです。
なぜ?と思って調べてみると、ディストリビューションでインストールされているOpenSSLが原因でした。

Apacheが参照しているのは、このOpenSSLを元に作成された共有ライブラリを参照していたのです。

注意点1: ディストリビューションのOpenSSL

ここで絶対やってはいけないことは、ディストリビューションでインストールされているOpenSSLのアンインストールです。
アンインストールしてしまうと、それに依存するパッケージもアンインストールするよう促されます。
もしもそれに従いアンインストールしてしまうと…それはそれは恐ろしいことになります。
というのも、OpenSSLに依存しているパッケージはかなり数多くあり、シェルまでもがアンインストールされてしまいます。
そうなってしまったら復旧は非常に困難です。
絶対にやらないように注意してください。

注意点2: 共有ライブラリの未更新

色々調べていると、mod_sslを更新しないといけないというブログ記事を発見して参考に実行してみました。
実行したコマンドがこちら
*Apacheのソースを解凍したディレクトリで実行
*インストールしてあるのは/usr/local/apache2

cd /usr/local/src/httpd-2.*.*/ # 解凍したディレクトリ
cd ./modules/ssl/
/usr/local/apache2/bin/apxs -c -i -a -D HAVE_OPENSSL=1 *.c -lssl -lcrypto -ldl -lz -export-symbols-regex ssl_module
ldd /usr/local/apache2/modules/mod_ssl.so
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start

すると、ライブラリがないとエラーが発生します。

httpd: Syntax error on line 80 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_ssl.so into server: libssl.so.1.0.0: cannot open shared object file: No such file or directory

Apacheを再ビルドしようとしてもエラーが発生します。

configure error: ...Error, SSL/TLS libraries were missing or unusable

困り果て、とりあえずSSLなしでビルドし起動。
解決法を探索。

解決法: 共有ライブラリの再作成

解決法は新しい1.0.1uで共有ライブラリを再作成します。
config時にsharedオプションを追加してビルドします。

./config shared
make
make install

次にApacheを再ビルド。
configureが通りました!
そしてSSLを有効にし、起動…エラー!
またライブラリがないと言われます。
lddコマンドで確認すると「not found」のライブラリがあります。

ldd /usr/local/apache2/modules/mod_ssl.so

解決法は以下のコマンドを起動前に入力します。

env LD_LIBRARY_PATH=/usr/local/ssl/lib ldd /usr/local/apache2/modules/mod_ssl.so

但し、この方法だと毎回実行する必要があるようなので、設定ファイルに書き込みます。
/usr/local/apache2/bin/envversファイルのLD_LIBRARY_PATHに「/usr/local/ssl/lib」を追加。

これで正常に起動することができました。

ちなみに現状ではTLS1.1、1.2が推奨されており、SSL3以降に対応していれば問題ないと思いますので、SSL2は無効化しても大丈夫でしょう。
無効化するにはApacheのSSL設定ファイルに記述します。
/usr/local/apache2/conf/extra/ssl.confのSSLProtocolという行を以下のように設定します。

SSLProtocol all -SSLv2
437 views

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*