SSLの設定

OpenSSL のインストール

既に 0.9.6 がインストール済でしたが、どうせなら新しいものを入れようと 0.9.7 をインストールしようと、rpm でインストール。

[bokupi@pokota i386]$ rpm -i --test openssl-0.9.7d-0vl4.i386.rpm
エラー: 依存性の欠如:
        libc.so.6(GLIBC_2.3)  は openssl-0.9.7d-0vl4 に必要とされています

てなわけで、失敗。素直に、インストールされている openSSL0.9.6 を利用する。

Apache の構築

1.3系を利用すると、mod_ssl を make して、更に Apache を再構築する必要があるが、2.0系の場合は、元々組み込まれているため、普通にインストールするだけで、SSLを使う環境ができる。後は、必要な設定を行なうだけで良い。今回は、2.0系の利用を前提にする。

既にインストール済の場合は、下記のコマンドで、Apache組込み済みモジュールの中に、mod_ssl.so があるか、確認しておく。

# httpd -l

証明書の作成

乱数の種を作成

$ openssl rand -rand /var/adm/messages -out /var/tmp/.rnd 1024

鍵の作成

乱数の種から、鍵を生成する。この鍵は後々も大事に保管する。これらの鍵はどこに作っても良いが、今回はホームディレクトリの下に、適当な場所(~/work/ssl)を作成した。

$ openssl genrsa -des3 -rand /var/tmp/ -out home3-key.pem 1024

CSR(CA証明書発行要求)の作成

鍵から、CSRを生成する。これは、設定時しか利用しない。

$ openssl req -new -key home3-key.pem -out home3-csr.pem

プライベートCAの作成

ここからは、プライベートCA(認証局)の作成に入る。外部の認証機関を利用する場合、ここの作業は不要となる。通信の暗号化だけではなく、サーバの証明も重要な目的である場合は、そうした外部の機関を利用する必要がある。

openssl関連の設定ファイルがどこにあるか、探す。プレインストールの場合は、locateコマンドなどで探してみる。

上記のディレクトリから、必要なファイル類を取り出す。今回は /etc/CA にプライベートCAを作成する。

# mkdir /etc/CA
# mkdir /etc/CA/certs
# mkdir /etc/CA/crl
# mkdir /etc/CA/newcerts
# touch /etc/CA/index.txt
# echo "01" > /etc/CA/serial
# mkdir /etc/CA/private
# chmod 700 /etc/CA/private

ディレクトリ構造の作成が終わったら、openssl.cnf をコピーして、/etc/CA に配置する。中身を編集して、dir = . に書き換える。或いは、 dir = /etc/CA でも良い。

プライベートCAの鍵を生成

これらのコマンドは、/etc/CA にて発行する。

# openssl genrsa -des3 -out private/cakey.pem 1024

プライベートCAのCRT(CA証明書)の作成

# openssl req -new -x509 -key private/cakey.pem -out cacert.pem

ここまでが、プライベートCA の作成になる。

CSRを署名して、CRTへ(home3のCRTを署名)

# openssl ca -config /etc/CA/openssl.cnf -in home3-csr.pem -out home3-cert.pem

ここで作成した home3-cert.pem が、配布用の証明書になる。

Apache の設定

Apache2.0 の設定は、ssl.conf にて行なう。Apache1.3 の設定は、httpd.conf の中にて行なう。下記に例を示すが、環境によっては既に設定済になっているかもしれない。

# 基本設定。自分の環境に合わせて設定する
<VirtualHost 192.168.0.3:443>
DocumentRoot "/usr/local/apache2/htdocs"
ServerName omoshiro-joho.com:443
ServerAdmin webmaster@omoshiro-joho.com
ErrorLog /usr/local/apache2/logs/error_log
TransferLog /usr/local/apache2/logs/access_log

# 元々あるもののコメントを外せばよい
SSLEngine on

# 元々あるもののコメントを外せばよい
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

# 自分が生成した証明書の場所を指定する
SSLCertificateFile /home/bokupi/work/ssl/home3-cert.pem
# 自分が指定した秘密鍵の場所を指定する
SSLCertificateKeyFile /home/bokupi/work/ssl/home3-key.pem

Apache の起動

Apache2.0 の場合、下記コマンドで起動ができる。

$ apachectl startssl

VineLinux2.6 に組込み済の Apache1.3 の場合、起動スクリプト(/etc/rc.d/init.d/httpd)に startssl が存在しない。そこで、起動スクリプトの修正を行なう。下記に表示する start() をベースに、startssl() を作成する。

start() {
        echo -n $"Starting $prog: "
        daemon $httpd `moduleargs` $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/httpd
        return $RETVAL
}

修正内容は、httpd でパスワードを聞かれた際に入力できるように、デーモン指定をなくした点である。

startssl() {
        echo -n $"Starting $prog: "
        $httpd `moduleargs` $OPTIONS
        RETVAL=$?
        [ $RETVAL = 0 ] && touch /var/lock/subsys/httpd
        return $RETVAL
}

なお、SSL に限らず httpd.conf 中で IfDefine指定された各モジュールの組込みは、httpd 起動時の -D オプション指定によって決定する。起動スクリプト内では、module ディレクトリ内を検索して、存在する全てのモジュールを -D オプション指定している。

以下は、SSL と PH4P を有効にして起動する例である。

# httpd -D HAVE_SSL -D HAVE_PHP4 start

Apache をパスワード入力なしで起動

しかし、Apache が自動的に再起動する場合など、パスワード入力ができないシーンは多々ある。そこで、Apache の起動時にパスワード入力を省略する方法がある。ただし、セキュリティ上のリスクは高くなる。

以下のコマンドで、先に作成したサーバの秘密鍵から、パスワード入力を必要としない秘密鍵を作成する。

$ openssl rsa -in home3-key.pem -out home3-key-nopass.pem

なお、作成されたファイルの所有者は root にしておく(セキュリティを考慮してのこと。必須ではない)。

Apache の設定ファイル httpd.conf を修正する。SSLCertificateKeyFile の値を、今作成した秘密鍵ファイルに変更する。

SSLCertificateKeyFile /home/bokupi/work/ssl/home3-key-nopass.pem

以上で、今後 Apache を起動する際は、パスワード入力を聞かれない。


履歴


トップ   編集 凍結解除 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-10-02 (日) 11:38:29