Home Update クッキー及びWeb ビーコンについて



Postfixによるメールサーバーの構築

mod_ssl によるSSL暗号化

 ここでは、Apache2.0の新モジュールであるmod_ssl を使ってSSLによる暗号化について解説していきます。なお、mod_ssl とApache-SSLは別物であることに注意してください。




■OpenSSLのダウンロード

Version openssl-0.9.7d
Homepage http://www.openssl.org/
Download http://www.openssl.org/source
Install openssl-0.9.7d.tar.gz

■OpenSSLのインストール

 OpenSSLはデフォルトでは、/usr/local/ssl にインストールされます。デフォルトのインストール先を変更する場合は、--openssldir で指定します。ここでは、オプションを指定せずにインストールを行います。



$ cd /usr/local/src
$ tar xzvf openssl-0.9.7d.tar.gz
$ cd openssl-0.9.7d.tar.gz
$ ./config
$ make
$ make test
$ su
# make install



■mod_ssl の組み込み

 mod_ssl を組み込むにはApache のソースパッケージが置いてあるディレクトリに移動し、再コンパイルします。configure オプションには、SSLが使えるように、--enable-ssl を付け加えます。その他、必要なモジュールがあれば各自追加してください。なお、mod_ssl をモジュールとして組み込むだけならば、--enable-ssl だけで構いません。

$ ./configure --with-mpm=worker \
                         --enable-dav \
                         --enable-ssl \
                         --with-ssl=/usr/local/ssl
$ make
$ su
# make install

 インストールが終了したら、実際にmod_ssl が組み込まれたかどうか確認します。以下のように、mod_ssl.cが表示されれば正常に組み込まれたことが確認できます。

# /usr/local/apache2/bin/httpd -l
Compiled in modules:
mod_ssl.c



■CA用秘密鍵/証明書の作成

 SSL証明書の作成については、詳しくは OpenSSLのインストールとSSL証明書の作成 を参照してください。まず、前準備としてCA用秘密鍵を作成するにあたって、乱数データファイルを作成しておきます。/var/log/messages はリアルタイムに変動するファイルなので乱数データの元として利用することができます。

# /usr/local/ssl/bin/openssl dgst -md5 /var/log/messages > rand.dat
# more rand.dat
MD5(/var/log/messages)= 61781da3ada4542d72205d9ac9cf1bb4

 次に、証明書を格納するための適当なディレクトリを作成しておきます。openssl コマンドを使って先ほどの乱数データファイル(rand.dat)からCA用秘密鍵を作成します。途中、パスフレーズの入力が求められますので予め考えておいてください。パスフレーズには空白も含める事ができます。

$ mkdir /usr/local/apache2/certs
$ cd cert
$ su
# /usr/local/ssl/bin/openssl genrsa -des3 -rand rand.dat 1024 -out ca.key
0 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
.......++++++
..............................++++++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:

 上記で作成した秘密鍵を、/usr/local/apache2/conf/ssl.key 以下に保存します。また、root しか読み書きできないようにパーミッションを600 とします。

# mkdir /usr/local/apache2/conf/ssl.key
# cp ca.key /usr/local/apache2/conf/ssl.key/server.key
# chmod 600 /usr/local/apache2/conf/ssl.key/server.key

 次にCA用の証明書を作成します。有効期限は365日とします。

# /usr/local/ssl/bin/openssl req -new -x509 -key ca.key -out ca.crt -days 365

0 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
.......++++++
..............................++++++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
[root@ns1 cert]# /usr/local/ssl/bin/openssl req -new -x509 -key ca.key > ca.crt
Enter pass phrase for ca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Setagaya
Organization Name (eg, company) [Internet Widgits Pty Ltd]:none
Organizational Unit Name (eg, section) []:none
Common Name (eg, YOUR name) []:linux.kororo.jp
Email Address []:root@kororo.jp

 上記で作成した証明書を、/usr/local/apache2/conf/ssl.crt 以下に保存します。また、root しか読み書きできないようにパーミッションを600 とします。

# mkdir /usr/local/apache2/conf/ssl.crt
# cp ca.key /usr/local/apache2/conf/ssl.crt/server.crt
# chmod 600 /usr/local/apache2/conf/ssl.crt/server.crt

 SSL用の設定ファイルである、ssl.conf を開いて秘密鍵と証明書の書格納場所が、上記で説明したPATH と同じであることを確認しておいてください。

# vi /usr/local/apache2/conf/ssl.conf
SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.key

 最後に、Virtual Host 用の設定を行っておきます。<VirtualHost _default_:443>の箇所は、IPアドレス指定しないと、正常にhttps://〜で始まるページが表示されなかった(空白で表示されてしまう)ので、サーバーのIPアドレス:443 の書式で記述するようにしてください。

# vi /usr/local/apache2/conf/ssl.conf
<VirtualHost 172.16.50.2:443>
DocumentRoot "/home/kororo/public_html"
ServerName linux.kororo.jp:443
ServerAdmin root@kororo.jp
ErrorLog /usr/local/apache2/logs/error_log
TransferLog /usr/local/apache2/logs/access_log

■秘密鍵のパスフレーズを削除

 秘密鍵のパスフレーズがあると、システム再起動後、パスフレーズを入力しないとApacheが起動してきてくれません。セキュリティ的には好ましくはありませんが、ここでは、パスフレーズを削除する方法について説明します

# cd /usr/local/apache2/conf/ssl.key
# cp server.key server.key.bak
# openssl rsa -in server.key.bak -out server.key

■Apache の起動

 以上の編集を終えたらApache を起動させますが、注意したいのは、通常のapachectl start ではなく、apachectl startssl となります。

# /usr/local/apache/bin/apachectl startssl



■Apache の自動起動設定

 自動起動設定ファイルもSSLでApache が起動できるように書き直さなくてはなりません。ここでは、Fedora Core1 についていた起動ファイルをコピーして編集していきます。おそらく、大抵のシステムでは以下のような設定で問題ないでしょう。もし、自分の環境と異なる箇所があれば適宜修正してください。テキストファイルこちら

#!/bin/bash
#
# Startup script for the Apache Web Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server. It is used to serve \
# HTML files and CGI.
# processname: httpd
# pidfile: /usr/local/apache2/logs/httpd.pid
# config: /usr/local/apache2/conf/httpd.conf

# Source function library.
. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache2/bin/apachectl
httpd=${HTTPD-/usr/local/apache2/bin/httpd}
prog=httpd
RETVAL=0

# check for 1.3 configuration
check13 () {
CONFFILE=/usr/local/apache2/conf/httpd.conf
GONE="(ServerType|BindAddress|Port|AddModule|ClearModuleList|"
GONE="${GONE}AgentLog|RefererLog|RefererIgnore|FancyIndexing|"
GONE="${GONE}AccessConfig|ResourceConfig)"
if grep -Eiq "^[[:space:]]*($GONE)" $CONFFILE; then
echo
echo 1>&2 " Apache 1.3 configuration directives found"
echo 1>&2 " please read /usr/share/doc/httpd-2.0.48/migration.html"
failure "Apache 1.3 config directives test"
echo
exit 1
fi
}

# The semantics of these two functions differ from the way apachectl does
# things -- attempting to start while running is a failure, and shutdown
# when not running is also a failure. So we just do it the way init scripts
# are expected to behave here.
start() {
echo -n $"Starting $prog: "
check13 || exit 1
daemon $httpd -D SSL $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /usr/local/apache2/logs/httpd.lock
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc $httpd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f
/usr/local/apache2/logs/httpd.lock /usr/local/apache2/logs/httpd.pid

}
reload() {
echo -n $"Reloading $prog: "
check13 || exit 1
killproc $httpd -HUP
RETVAL=$?
echo
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $httpd
RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if [ -f /usr/local/apache2/logs/httpd.pid ] ; then
stop
start
fi
;;
reload)
reload
;;
graceful|help|configtest|fullstatus)
$apachectl $@
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|grac
eful|help|configtest}"
exit 1
esac

exit $RETVAL








TOPに戻る

Sponcerd Link


Search
 
Web サイト内
Rental Server

【レンタルサーバのXbit】 低価格・高品質のビジネスクオリティー。300メガ1,050円〜30分で サービススタート可能!


容量300MB、月額125円、高性能なサーバが日本最大級のバックボーンに直結。
さくらのレンタルサーバ



当サイトはLinux自宅サーバーの構築を目的としたサイトです。
当サイトに関するご意見、ご要望等は、こちらのメールアドレスよりお願いします。
Beginning | Introduction | Installation | Server |
Security | Tips | Guest Book | Related-Sites
Copyright©2003-2006 KORO All Rights Reserved.
総計:
今日:
昨日: