既に 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 を利用する。
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を生成する。これは、設定時しか利用しない。
$ openssl req -new -key home3-key.pem -out home3-csr.pem
ここからは、プライベート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 でも良い。
これらのコマンドは、/etc/CA にて発行する。
# openssl genrsa -des3 -out private/cakey.pem 1024
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem
ここまでが、プライベートCA の作成になる。
# openssl ca -config /etc/CA/openssl.cnf -in home3-csr.pem -out home3-cert.pem
ここで作成した home3-cert.pem が、配布用の証明書になる。
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
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 の起動時にパスワード入力を省略する方法がある。ただし、セキュリティ上のリスクは高くなる。
以下のコマンドで、先に作成したサーバの秘密鍵から、パスワード入力を必要としない秘密鍵を作成する。
$ 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 を起動する際は、パスワード入力を聞かれない。