公開日: 2012年8月13日 17:51:18
最終更新: 2019年10月6日 22:32:28

Apache 2.4 + OpenSSL インストール

Apache + OpenSSL のインストール

OpenSSL のインストール

OS: Centos7.7 にて再構築中

セキュリティに関わる部分なのでなるべくバージョンの新しいものを、ということで今回もソースからコンパイル & インストールします。
openssl の最新版については公式サイトを確認のこと。
http://www.openssl.org/source/

$ wget http://www.openssl.org/source/openssl-1.1.0l.tar.gz
$ tar -zxvf openssl-1.1.0l.tar.gz -C /usr/src/
$ cd /usr/src/openssl-1.1.0l

# インストール先を /usr/local/openssl に指定
$ ./config --prefix=/usr/local/openssl ¥
	--openssldir=/usr/local/openssl shared

# コンパイル & インストール
$ make depend
$ make install

openssl の共有ライブラリをシステムに登録します。/etc/ld.so.conf.d/openssl.conf を作成します。

# vi /etc/ld.so.conf.d/openssl.conf
/usr/local/openssl/lib

共有ライブラリを反映させるため、ldconfig します。

$ ldconfig

# 確認
$ ldconfig -p | grep openssl
	…
         libssl.so.1.0.0 (libc6,x86-64) => /usr/local/openssl/lib/libssl.so.1.0.0
         libssl.so (libc6,x86-64) => /usr/local/openssl/lib/libssl.so
         libevent_openssl-2.0.so.5 (libc6,x86-64) => /lib64/libevent_openssl-2.0.so.5
         libcrypto.so.1.0.0 (libc6,x86-64) => /usr/local/openssl/lib/libcrypto.so.1.0.0
         libcrypto.so (libc6,x86-64) => /usr/local/openssl/lib/libcrypto.so

yum で勝手にアップデートされないように、/etc/yum.conf の最後の行に以下の設定を追加します。

exclude=openssl

元の OpenSSL のパスをバックアップしたのち、新しい OpenSSL へのシンボリックリンクを作成します。

# 元の openssl を別名に変更
$ mv /usr/bin/openssl /usr/bin/openssl-org

# 新しい openssl へシンボリックリンクを作成
$ ln -s /usr/local/openssl/bin/openssl /usr/bin/

# 新しいバージョンへパスが通ったことを確認。
$ openssl version
OpenSSL 1.1.0j  20 Nov 2018

ssl サイトにアクセスするたびに Segmentation fault がログに吐かれてなんだかおかしい状態になった。どうやらソースインストールした libssl ではなく、標準インストールされているモジュールを見ているっぽい。

$ ldd /usr/local/httpd/bin/httpd
libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0
試しに ldconfig して Apache2 を再起動してみたところエラーログが吐かれなくなった。
$ ldconfig /usr/local/openssl/lib/libssl.so.1.0.0
$ /etc/init.d/httpd restart
なので /etc/ld.so.conf.d/openssl.conf を作成して再起動。たぶん大丈夫だと思うけど様子を見てみる。
  ## /etc/ld.so.conf.d/openssl.conf 

Apache Web Server のインストール

あらかじめ必要なライブラリをインストールしておきます。

$ yum install apr-util-devel # apr ライブラリ
yum install apr-util-ldap # ※ ldap 認証で必要
$
yum install apr-util-ldap

Apache のビルト&インストール

apache をエラー無く動かすための、最低限の設定をします。

# 公開ディレクトリを作成
$ mkdir -p /var/www/html

# ログファイル格納用のディレクトリを作成
$ mkdir -p /var/log/httpd

# システムに apache ユーザを追加
# uid は デフォルト?の 48 を指定。
$ useradd -d /var/www/ -s /sbin/nologin -u 48 apache
useradd: 警告: ホームディレクトリが既に存在します。
skel ディレクトリからのコピーは行いません。

Apache.org から apache をソースインストールします。

## apache 2.4.18 をダウンロード して解凍
$ wget http://ftp.riken.jp/net/apache/httpd/httpd-2.4.18.tar.gz
$ tar -zxvf httpd-2.4.18.tar.gz -C /usr/src/

# コンパイル & インストール
$ cd /usr/src/httpd-2.4.18
$ ./configure \
    --prefix=/usr/local/httpd \
    --enable-so \
    --enable-headers \
    --enable-dav \
    --enable-deflate \
    --enable-rewrite=shared \
    --enable-ssl \
    --with-ssl=/usr/local/openssl \
    --enable-suexec \
    --with-suexec-caller=apache \
    --with-suexec-docroot=/home \
    --with-suexec-logfile=/var/log/httpd/suexec_log \
    --with-ldap \
    --enable-ldap=shared \
    --enable-authnz-ldap=shared \
    --enable-mods-shared=all \
    --enable-mpms-shared=all \
    --with-mpm=prefork
$ make && make install

インストールオプション

・ –prefix=/usr/local/httpd
httpd をインストールする場所の指定です。

・ –enable-so
モジュールを有効化します。

・ –enable-headers
HTTP リクエスト/応答ヘッダの追加・置換・削除が可能となります。

・ –enable-dav
WebDAV を有効化します。http/https 経由でファイル・フォルダを共有することができます。

・ –enable-deflate
mod_deflate を有効にします。データを送信する前に圧縮してデータ転送の効率化を図ります。

・ –enable-rewrite
リクエストされた URL の動的書き換えを行うモジュールです。=shared としてコンパイルすることで、DSO モジュールとして読み込みます。

・ –with-ssl=/usr/local/openssl
SSLを有効化します。ソースインストールしたOpenSSL のパスを指定します 。

・ –with-suexec-caller=apache
suexec によって CGI などのスクリプトを第三者に不正に実行されないようにします。(ユーザーサイト、VirtualHost 利用時)
ここでは httpdの実行ユーザ(「apache」)がユーザの代わりにスクリプトを実行しますので「apache」を指定します。

・ –with-suexec-docroot=/home
suexecが適用されるディレクトリを指定します。ユーザーディレクトリの格納されている /home を指定、/home 以下にある実行可能なスクリプトが suexec の影響を受けます。

・ –with-suexec-logfile=/var/log/httpd/suexec_log
suexec のログを出力するパスの指定です。access_log 等と同じ場所を指定しておきます。

・ –with-ldap
–enable-ldap=shared
–enable-authnz-ldap=shared
ldap 認証を有効にします。(LDAP によるアカウント管理を行っている場合のみ)

インストール後の設定

apache の設定ファイル(httpd.conf)を編集します。

apache を起動するユーザの設定。

User apache
Group apache

apache を起動するたびに警告が出るのも鬱陶しいので、適当な ServerName を設定。

ServerName www.example.com:80

# ログファイルの格納場所を /var/log/httpd に合わせます。
ErrorLog "/var/log/httpd/error_log"

CustomLog "/var/log/httpd/access_log" common

自動起動とログローテート

サーバ起動時に apache が実行されるよう、起動スクリプトを設定します。
参考: https://blog.apar.jp/linux/3798/

本来なら systemd 対応にしたいところですが、mod_systemd のソースが見つからず…エロい人が何か考えてくれるまでは chkconfig でお茶を濁そうかと(^_^;)

スクリプトのサンプルはソースディレクトリの build/rpm/ 以下にあります。

$ cp /usr/src/httpd-2.4.3/build/rpm/httpd.init /etc/rc.d/init.d/httpd

起動スクリプトの以下の個所をインストールした apache へのパスに修正します。

httpd=${HTTPD-/usr/local/httpd/bin/apachectl}
pidfile=${PIDFILE-/usr/local/httpd/logs/${prog}.pid}
lockfile=${LOCKFILE-/var/lock/subsys/${prog}}
RETVAL=0

# check for 1.3 configuration
check13 () {
CONFFILE=/usr/local/httpd/conf/httpd.conf

修正できたら chkconfig コマンドで起動スクリプトとして登録します。

# 起動スクリプトを登録
$ chkconfig --add httpd
$ chkconfig httpd on

# 起動設定を確認
$ chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

ログの出力先ディレクトリを作成します。
また、ログが肥大化しないようローテートの設定をします。

# ログディレクトリ作成
$ mkdir /var/log/httpd

# ログローテート設定ファイルをコピー
$ cp build/rpm/httpd.logrotate /etc/logrotate.d/httpd

こちらも実行ファイルへのパスを編集しておきます。

/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
#/sbin/service httpd graceful 2> /dev/null || true
/usr/local/httpd/bin/apachectl graceful 2> /dev/null || true
endscript
}


  • クライアント証明書の発行
  • クライアント証明書のインストール(Windows)