第15回 Apache2+mod_sslによるセキュアなWebサーバ

2003/2/13作成
2003/5/17更新


Webの暗号化はビジネスの場では企業の秘密と顧客の財産を守る上で、かなり有効な手段としていまや常識となっています。
うちのような凡サイトには隠す情報はないので不要ですが、試しにやってみたので成果を報告しておきます。



1.Apache2+mod_sslのインストール

ソースの入手方法や展開方法は他でやったので今回は省略です。
configureするところからいきます。
% ./configure --enable-so --enable-ssl
% make
% su
# make install
個別にmod_sslだけをインストールする方法もあるようですが、今回は割愛します。

2.sslのインストール

最近のLinuxや*BSDではsshが入っているのが常識になっているのであらためてopensslのインストールについては触れません。
もうすでに入っていると思います。
もし入っていなかったらportsなりrpmなりaptなりで入れましょう。もちろんソースからでもOKです。

3.鍵の生成

まずは秘密鍵の生成です。
-randの後に乱数を指定します。自分でファイルを用意してもいいですし、適当なファイルを指定してもいいです。
messagesにしたのはログファイルなので常に書き変わっているというところにあります。
出力ファイル名は特にドメイン名とかにする必要はありません。
# openssl genrsa -des3 -rand /var/log/messages -out www.example.com.pem 1024
続いて認証局に送るCSRを作成します。
CSRは証明書を認証してもらうための情報です。
青文字がコマンドで、赤文字が途中で入力を促される箇所です。適宜置き換えましょう。
特に何も入力しなくても問題ないみたいですが。
# openssl req -new -key www.example.com.pem -out www.example.com.csr
Using configuration from /etc/ssl/openssl.cnf
Enter PEM pass phrase:
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) []:Chiyoda-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Corp.
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:hoge
Email Address []:hogehoge@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
続いて証明書を入手します。
VeriSignなどの外部機関に署名してもらうのがベターなのですが、お金がかかります。
お金が無いので自分で署名して証明書を発行してしまいましょう。
また、検証目的やイントラネットでの利用する場合でも使えると思います。
# openssl x509 -req -in www.example.com.csr -signkey www.example.com.pem -out www.example.com.crt
以上で鍵は全部できました。確認すると。
www.example.com.pem =>秘密鍵
www.example.com.crt =>公開鍵
ということになります。
とりあえず、これらのファイルをわかりやすいところに移動しておきます。
移動するときの注意としては秘密鍵は絶対に他人に見られないところに保管する必要があります。
間違ってもhttpからアクセスできるところに置かないようにしてください。
# mkdir -p /usr/local/apache2/ssl
# mv www.example.com.pem /usr/local/apache2/ssl
# mv www.example.com.crt /usr/local/apache2/ssl

4.ssl.conf

デフォルトのhttpd.confに書かれてありますが、ssl関連の情報はこのディレクティブによって呼び出されます。
もしhttpd.confに書かれていなかったら読み込んでください。
# httpd.conf(抜粋)
<IfModule mod_ssl.c>
Include conf/ssl.conf
</IfModule>
そしてssl.confが読み込まれます。
VirtualHostディレクティブをうまいこと使って書かれています。
# ssl.conf(抜粋)
SSLCertificateFile /usr/local/apache2/ssl/www.example.com.crt
SSLCertificateKeyFile /usr/local/apache2/ssl/www.example.com.pem
とりあえず、この2行が書かれていれば問題ないと思います。
ただ、古いssl.confにはSSLLogディレクティブが書かれているのですが、これが現在の最新である2.0.44で設定してあるとエラーが出てしまいます。
古いssl.confの人はコメントアウトしておきましょう。何事もなく動いた人は気にしなくてもいいです。
もちろんServerName,ServerAdmin,Listenは自分の環境に合わせて変更します。

5.起動

mod_sslの場合は起動コマンドが変わります。
# /usr/local/apache2/bin/apachectl startssl
そうすると、パスフレーズを聞かれます。秘密鍵を作るときに入れたパスフレーズを入れてあげましょう。
でも、このままではrcファイルに書けないので、秘密鍵を加工してパスフレーズを聞かれないようにします。
# mv www.example.com.pem mv www.example.com.pem.buckup
# openssl rsa -in www.yggdrasil.jp.pem.backup -out www.yggdrasil.jp.pem
こうやって秘密鍵を入れ替えてあげればパスフレーズを聞かれなくなります。
あとはrcに登録していた人は変更しておきましょう。

参考文献

SoftwareDesign(技術評論社) 2001/10 Apacheでゼロから作るWebサイト
SoftwareDesign(技術評論社) 2002/8 暗号化技術最前線
日本ベリサイン http://www.verisign.co.jp/
(仮)日本の公式PGPホームページ http://pgp.iijlab.net/
12 さんすう 34 数学 5 Go! http://www.hokuriku.ne.jp/fukiyo/math.html (「お勉強」のところの公開鍵の数学がわかりやすいです)


もどる