こちらの記事がとても良記事だったので、ビルドの勉強のために自分でやってみました。
自分でソールからビルドしてみると、共有ライブラリ(=ダイナミックリンクライブラリ,シェアードライブラリ)や.so
ファイルの仕組みがよくわかるようになります。
環境
CentOS 6.5
httpd 2.2.29
openssl 1.0.1j
他のディストリビューションでもやり方はほとんど同じだと思います。
ターゲット構成
/opt/openssl/ にopensslをインストール
/opt/httpd/ にApacheをインストール
準備
ビルドに必要なパッケージを入れます。
# コンパイルするのに必要
$ sudo yum install -y gcc make
# opensslをビルドするのに必要
$ sudo yum install perl zlib-devel
opensslをソースからビルドしてインストール
$ wget https://www.openssl.org/source/openssl-1.0.1j.tar.gz
$ tar xvfz openssl-1.0.1j.tar.gz
$ cd openssl-1.0.1j
$ ./config --prefix=/opt/openssl shared zlib
$ make
$ sudo make install
確認
$ /opt/openssl/bin/openssl version
OpenSSL 1.0.1j 15 Oct 2014
$ ldd /opt/openssl/bin/openssl
linux-vdso.so.1 => (0x00007fff236db000)
libssl.so.1.0.0 => /opt/openssl/lib/libssl.so.1.0.0 (0x00007f5237454000)
libcrypto.so.1.0.0 => /opt/openssl/lib/libcrypto.so.1.0.0 (0x00007f5237076000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f5236e6e000)
libz.so.1 => /lib64/libz.so.1 (0x00007f5236c58000)
libc.so.6 => /lib64/libc.so.6 (0x00007f52368c3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f52376bf000)
libssl.soとlibcrypto.soが、自分で入れた/opt/opensslにリンクされていることを確認します。
Apacheをソースからビルドしてインストール
$ wget http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.2.29.tar.gz
$ tar xvfz httpd-2.2.29.tar.gz
$ cd httpd-2.2.29
$ ./configure --prefix=/opt/httpd --enable-mods-shared=all --enable-ssl --with-ssl=/opt/openssl
$ make
$ sudo make install
./configure --with-ssl=/opt/openssl
と、自前でいれたopensslにリンクするように指示するのがポイントです。
mod_ssl.soの動的リンクを確認
mod_ssl.soがちゃんとopensslライブラリにリンクしているか確認します。
$ ldd /opt/httpd/modules/mod_ssl.so
linux-vdso.so.1 => (0x00007fff04d4e000)
libssl.so.1.0.0 => not found
libcrypto.so.1.0.0 => not found
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ffc9b03b000)
libc.so.6 => /lib64/libc.so.6 (0x00007ffc9aca7000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffc9b48c000)
はい、リンクされていません。
このままではmod_sslが動きません。
opensslのライブラリパスを通す
$ export LD_LIBRARY_PATH=/opt/openssl/lib
または
$ sudo sh -c 'echo /opt/openssl/lib > /etc/ld.so.conf.d/openssl.conf'
$ sudo ldconfig
確認
$ ldd /opt/httpd/modules/mod_ssl.so
linux-vdso.so.1 => (0x00007fff94dff000)
libssl.so.1.0.0 => /opt/openssl/lib/libssl.so.1.0.0 (0x00007f830f748000)
libcrypto.so.1.0.0 => /opt/openssl/lib/libcrypto.so.1.0.0 (0x00007f830f36a000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f830f14d000)
libc.so.6 => /lib64/libc.so.6 (0x00007f830edb9000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f830ebb5000)
libz.so.1 => /lib64/libz.so.1 (0x00007f830e99e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f830fbe5000)
できました!
これでApacheを起動すれば、自前ビルドしたopensslを使ってSSL通信ができるようになります。