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 の場合
最初に証明書についての説明が表示されるので、受け入れるかどうか選択することになる。これは第三者機関による発行人の証明がないためである。テスト目的であれば問題ない。
「次へ」をクリックすると詳細が表示される。
これで、「拒否」「このセッションのみ許可」「有効期限までずっと許可」を選択する。
■Internet Explorer 5.01 SP1 の場合
最初にこのような通知が表示され、「OK」をクリックすると
「証明書の表示」をクリックすれば Netscape 同様、発行者が確認できないということが分かる。
「はい」をクリックすれば、やはり最下段のステータスバーの南京錠がロックされた
状態で表示される。つまり、プライベートCA で運用をするのであれば、クライアント側に毎度この画面が表示されるが、ネットワークを流れるデータそのものは暗号化される。
参考:BSD Magazine No.6 (ASCII出版)