FreeBSD 4.2 と Apache, apache+ssl による Web サーバ構築


個人情報入力など、Web サーバへのアクセスで情報漏えいを防ぐため、通信を暗号化する技術の一つとして事実上の標準になっているSSL を Apache で利用するためのメモである。

今回のマシンは PC-98 で、OS は FreeBSD(98) 4.2R-Rev01 を利用するが、特に PC-98 依存する部分はない。

まず、必要なソフトウェアのソース一式を FTP などにより取得しておく。

・apache-1.3.14 (本家 http://www.apache.org/, 日本 http://www.apache.or.jp/)
・apache-1.3.14+ssl 1.42 (本家 http://www.apache-ssl.org/ 日本 ftp://ftp.win.ne.jp/network/www/Apache-SSL/)
・openssl-0.9.6 (本家 http://www.openssl.org/ 日本では ring サーバなどで入手可能)
また、FreeBSD (PC/AT版、98版とも)4.1R や 4.2R などでは openssl と tcpwrapper の機能が標準で組み込まれているが、openssl については標準搭載されているバージョンが古い場合があるのでソースからコンパイルするほうが望ましい。

まず openssl のソースを適当なディレクトリに展開する。(ここでは /usr/local/src )

% cd /usr/local/src/openssl-0.9.6
% ./config (/usr/local 以外の場所にインストールしたいのなら、 --prefix=パス を追加する)
% make
% make test
% su
# make install

これで完了した。次に設定だが、まず最初に CA (証明書)を作成する。CA を置くディレクトリを作り、openssl.cnf と CA.sh をコピーする。

% mkdir /usr/local/ssl/www2-CA
% cd /usr/local/ssl/www2-CA
% cp ../openssl.cnf .
% cp -p ../misc/CA.sh .

そして、openssl.cnf を自サイトに適した設定に変更する。

% vi openssl.cnf

今回は単純に demoCA というテスト用の CA を作成する。

また CA.sh には次のパッチをあてておく。環境によってパッチの + 行の中身を変更することになる。

--- CA.sh.org Mon Jan 15 18:12:48 2001
+++ CA.sh Tue Jan 16 11:03:43 2001
@@ -29,7 +29,7 @@

# default openssl.cnf file has setup as per the following
# demoCA ... where everything is stored
-
+SSLEAY_CONFIG="-config /usr/local/ssl/www2_CA/openssl.cnf"
DAYS="-days 365"
REQ="openssl req $SSLEAY_CONFIG"
CA="openssl ca $SSLEAY_CONFIG"
@@ -55,7 +55,7 @@
;;
-newreq)
# create a certificate request
- $REQ -new -keyout newreq.pem -out newreq.pem $DAYS
+ $REQ -nodes -new -keyout newreq.pem -out newreq.pem $DAYS
RET=$?
echo "Request (and private key) is in newreq.pem"
;;

ここまでできれば、

% ./CA.sh -newca

として CA と公開鍵・秘密鍵を実際に生成する。すると
「CA certificate filename (or enter to create)」
と言われるのでそのまま Enter キーをたたくと、パスフレーズの入力になる。

続いて、Country Name を尋ねられるので
http://digitalid.verisign.co.jp/server/enroll/s2.html などを参考にパラメータを入力する。
Verisign でサーバIDを取得する場合には、「E-mail アドレスは入力してはいけない」ということになっているので、空のまま Enter を叩くと入力が終了する。

これにより、/usr/local/ssl/www2_CA/demoCA の下に
cacert.pem (CAの自己証明書)
newcerts/ (今後発行する新しい証明書類)
private/ (CAの秘密鍵)
serial (次に発行する証明書のシリアル番号)
などのファイルが生成される。

次に CSR を作成する。

# ./CA.sh -newreq

さきほどと同じような、証明書に取り込む情報の入力を求められる。
このときやはり、Verisign でサーバIDを取得する場合には challange-password は設定してはいけないとされている。

これでnewreq.pem というファイルができあがり、ユーザ用の秘密鍵と CSR が1ファイルにくっついている。一応はこれでできあがりだが、電子署名をしておくとよいだろう。

# ./CA.sh -sign

とすると、さきほどのパスフレーズを入力するよう促されるので、間違いなく入力する。

ここまでで openssl の作業はひとまず完了である。



次に、Apache に SSL モジュールを組み込んでみる。

まずソースを展開する。/usr/local/src で
% tar xvzf apache_1.3.14.tar.gz
% cd apache_1.3.14
% tar xvzf ../apache_1.3.14+ssl_1.42.tar.gz
% ./FixPatch

ここで
「Do you want me to apply the OpenSSL EGD patch for you? [n]」

と聞かれるが、これは y を入力する。するとソースにパッチがあたる。もとのパッチは openssl-0.9.5a用なので若干オフセットがでるが rej ファイルがなければOKである。

ここで、このディレクトリに SSLpatch.fixup ができているので、

% patch -p < SSLpatch.fixup

としてパッチ全体を適用する。

いよいよ apache を make する。

% ./configure (必要なら --enable-module=so など適切なオプションを設定する)
% make
% su
# make install

そしてさきほど作った SSL 関係のファイルから、Apache に組み込むための証明書と鍵を切り出しておこう。

% /usr/local/ssl/bin/openssl rsa -in newreq.pem -out httpsd.key
% /usr/local/ssl/bin/openssl x509 -in newcert.pem -out httpsd.cer

必要なファイルを /usr/local/apache/certs にでも置いておく。

% cp httpsd* /usr/local/apache/certs
% cp cacert.pem /usr/local/apache/certs/ca.cer



ここからは、apache の設定作業に入る。
今回は話を単純にするため、この apache では SSL ポートのみアクセスを受け付けるようにする。もちろん設定次第で普通の HTTP ポートを使いつつ、必要な場面だけ SSL を使うことも可能だ。

今回は SSLpatch を適用すれば自動的に /usr/local/apache/conf に作成される httpsd.conf をそのまま利用している。

クライアント側からは
https://(ホスト名) でアクセスする。指が http: と覚えている人は要注意(私のことです)。

■Netscape Communicator 4.73 の場合

最初に証明書についての説明が表示されるので、受け入れるかどうか選択することになる。これは第三者機関による発行人の証明がないためである。テスト目的であれば問題ない。

Netscape で開いた場合1

「次へ」をクリックすると詳細が表示される。

Netscape で開いた場合2

これで、「拒否」「このセッションのみ許可」「有効期限までずっと許可」を選択する。


■Internet Explorer 5.01 SP1 の場合

IEで見た場合1

最初にこのような通知が表示され、「OK」をクリックすると
IEで見た場合2

「証明書の表示」をクリックすれば Netscape 同様、発行者が確認できないということが分かる。

「はい」をクリックすれば、やはり最下段のステータスバーの南京錠がロックされた
状態で表示される。つまり、プライベートCA で運用をするのであれば、クライアント側に毎度この画面が表示されるが、ネットワークを流れるデータそのものは暗号化される。

参考:BSD Magazine No.6 (ASCII出版)


FreeBSD 目次に戻る