* SSLの設定 [#j3f119be]

#contents

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

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

 # httpd -l

** 証明書の作成 [#pc02f2d0]
*** 乱数の種を作成 [#rbe2b106]
 $ openssl rand -rand /var/adm/messages -out /var/tmp/.rnd 1024

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

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

*** CSR(CA証明書発行要求)の作成 [#oeeaf140]
鍵から、CSRを生成する。これは、設定時しか利用しない。

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

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

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

- /usr/share/ssl (RedhatLinux9の場合)

上記のディレクトリから、必要なファイル類を取り出す。今回は /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の鍵を生成 [#ree9fe76]
これらのコマンドは、/etc/CA にて発行する。

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

*** プライベートCAのCRT(CA証明書)の作成 [#h115859a]
 # openssl req -new -x509 -key private/cakey.pem -out cacert.pem

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

*** CSRを署名して、CRTへ(home3のCRTを署名) [#k4317f33]
 # openssl ca -config /etc/CA/openssl.cnf -in home3-csr.pem -out home3-cert.pem

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

** Apache の設定 [#xce65b78]
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 の起動 [#i5efc480]
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 をパスワード入力なしで起動 [#w6801f1d]
しかし、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 を起動する際は、パスワード入力を聞かれない。
----
** 履歴 [#md81bb8b]
- パスワードなし起動について追加 2005/10/02

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS