1999/5/7
バージョン Apache-SSL 1.3.2
OS Slackware 3.6 (Linux 2.0.35)
RedHat 5.2J (Linux 2.0.36)
ホームページ http://www.apache-ssl.org/ (Apache-SSL公式ページ)
http://www.openssl.org/ (OpenSSL公式ページ)
ダウンロード ftp://ftp.infoscience.co.jp/pub/Crypto/SSL/Apache-SSL/ (Apache-SSL)
ftp://ftp.openssl.org/source/ (OpenSSL)
備考 Apache 1.3.6
OpenSSL 0.9.2b

ApacheのフリーのSSLパッチです。SSLeayがベースになりますので、まずそれからインストールする必要があります。ところが最新のSSLeay 0.9.0b + Apache-SSL 1.3.2でApacheをコンパイルしたところ、途中で#error "Don't use OpenSSL versions less than 0.9.2b, they have a serious security problem!"という警告とともにコンパイルが中断されてしまいました。そこで今回はSSLeayではなく、OpenSSLを使用しました。OpenSSLは、SSLeayから派生したフリーのSSL実装です。使い方はSSLeayと、ほぼ同じようです。

2001/11/24
ApacheのSSLについては、Apache-SSLのほかに、mod_sslという選択肢もあります。mod_sslについては、こちらに書きましたので参照してください。
2001/11/24
サイト証明書の作成手順を別ページに移しました。
1999/10/26
1.サイト証明書の作成手順を修正しました。 2.APACIでのインストール手順に変更しました。

OpenSSLのインストール

INSTALLの手順通りコンパイルします。

$ tar xvfz openssl-0.9.2b.tar.gz

$ cd openssl-0.9.2b
$ ./config

$ make

$ make rehash

$ make test

rootになってインストールします。

$ su

# make install

SSLeayのインストール

以下は参考です。SSLeay 0.9.0b + Apache-SSL 1.3.2でApacheをコンパイルしたところ、途中で#error "Don't use OpenSSL versions less than 0.9.2b, they have a serious security problem!"という警告とともにコンパイルが中断されてしまいました。今回はOpenSSLを使用します。もし両方をインストールする場合、デフォルトのインストール先がどちらも/usr/local/ssl/なので注意してください。

適当なディレクトリでアーカイブを展開して、SSLeay-0.9.0bへ移動します。

$ tar xvfz SSLeay-0.9.0b.tar.gz

$ cd SSLeay-0.9.0b

まずデフォルトでは/usr/local/bin/perlを使うようになっていますが、今回のシステムでは/usr/bin/perlなので、これを変更するため、以下のようにします。

$ perl util/perlpath.pl /usr/bin

ソースツリーのシンボリックリンクを張るため、以下のようにします。

$ make -f Makefile.ssl links

Configureを実行します。システムタイプにはlinux-elfを指定します。

$ ./Configure linux-elf

makedependコマンドがインストールされている場合は、make dependを実行します。続いてコンパイル、テストを実行します。make rehashでエラーが出たけど、多分問題ないでしょう。

$ make clean

$ make depend

$ make

$ make rehash

$ make test

suでroot権限になってからインストールを行います。

$ su

# make install

Apache-SSLのインストール

Apacheのアーカイブを展開し、展開先ツリー上にApache-SSLのアーカイブを展開します。

$ tar xvfz apache_1.3.6.tar.gz

$ cd apache_1.3.6

$ tar xvfz ../apache_1.3.6+ssl_1.32.tar.gz

ApacheにSSLパッチをあてます。

$ patch -p1 < SSLpatch

src/Configuration.tmplの以下の部分をOpenSSLのパスに合わせて編集します。

#
# SSL Related stuff. N.B. This is set up to use the SSLeay source, NOT an
# installed version.
#
SSL_BASE=/usr/local/ssl
SSL_INCLUDE= -I$(SSL_BASE)/include
SSL_CFLAGS= -DAPACHE_SSL
SSL_LIB_DIR= $(SSL_BASE)/lib
SSL_LIBS= -L$(SSL_LIB_DIR) -lssl -lcrypto
SSL_APP_DIR= $(SSL_BASE)/bin
SSL_APP=$(SSL_APP_DIR=)/openssl

あとは通常のApacheのAPACI手順に従い、configureしてmakeします。(注:REDME.SSLには、APACIを使わないインストール手順が書かれています)

$ ./configure

$ make

rootになってインストールします。

$ su

# make install

gcacheはmake installでインストールされないので、手動でコピーします。

% cp src/modules/ssl/gcache /usr/local/apache/bin/

(1999/9/30:apache_1.3.9+ssl_1.37では自動的にコピーされるようになっていました)

鍵の作成とサイト証明書の発行

サイト証明書を作ります。以下のページを参照してください。

Apacheの設定

以下の設定(httpsd.conf)は、ポートによってSSLの使用/未使用を切り換える設定です。ブラウザのでhttps:ではじまるURLを指定すると自動的にSSLが使われます。この設定は元のhttpd.confの設定とマージして使用します。

Port 443
Listen 443
Listen 80
ServerType standalone
SSLCacheServerPort logs/gcache_port
SSLCacheServerPath bin/gcache
SSLSessionCacheTimeout 300
SSLCertificateKeyFile /usr/local/ssl/private/key.pem
SSLCertificateFile /usr/local/ssl/certs/cert.pem
SSLVerifyClient 0
SSLVerifyDepth 10
SSLFakeBasicAuth

<VirtualHost _default_:80>
Port 80
SSLDisable
</VirtualHost>

<VirtualHost _default_:443>
Port 443
SSLCertificateKeyFile /usr/local/ssl/private/key.pem
SSLCertificateFile /usr/local/ssl/certs/cert.pem
SSLVerifyClient 0
SSLVerifyDepth 10
SSLFakeBasicAuth
DocumentRoot /usr/local/apache/htdocs
</VirtualHost>

以下のようにように設定ファイルを指定してApacheを起動します。

# /usr/local/apache/bin/httpsd -f /usr/local/apache/etc/httpsd.conf

自動起動の設定

OSブート時に自動的に起動するように設定します。この設定方法はOSによって異なります。ここではSlackware Linuxでの例です。

/etc/rc.d/rc.localに以下を追加します。

# Start Apache-SSL
/usr/local/apache/bin/httpsd -f /usr/local/apache/etc/httpsd.conf

自動起動の設定(RedHat)

RedHat系の場合は、Slackwareと同じやり方でもいいのですが、以下のようにするのが標準です。

起動用スクリプトはhttpsdctrlが使用できるはずなのですが、なぜかhttpdを見に行こうとしてうまく動かないので、自分で作ります。

起動用スクリプト/etc/rc.d/init.d/apacheを作成します。パーミッションを755に設定します。内容は以下の通りです。

#!/bin/sh

. /etc/rc.d/init.d/functions

[ -f /usr/local/apache/bin/httpsd ] || exit 0

case "$1" in
  start)
        echo -n "Starting Apache-SSL server: "
        /usr/local/apache/bin/httpsd
        echo
        ;;
  stop)
        echo -n "Stopping Apache-SSL server: "
        killproc httpsd
        echo
        ;;
  status)
        status httpsd
        ;;
  *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
esac

このスクリプトを自動起動するように各ランレベル用のディレクトリにシンボリックリンクを設定します。

# cd /etc/rc.d/rc0.d
# ln -s ../init.d/apache K110apache
# cd /etc/rc.d/rc1.d
# ln -s ../init.d/apache K110apache
# cd /etc/rc.d/rc2.d
# ln -s ../init.d/apache S110apache
# cd /etc/rc.d/rc3.d
# ln -s ../init.d/apache S110apache
# cd /etc/rc.d/rc4.d
# ln -s ../init.d/apache S110apache
# cd /etc/rc.d/rc5.d
# ln -s ../init.d/apache S110apache
# cd /etc/rc.d/rc6.d
# ln -s ../init.d/apache K110apache