2011年10月20日木曜日

Apache を SSL で使用する

おがわです。
今回は、Apache を SSL の環境で使用できるようにしてみようと思います。Apache2.2.21 と OpenSSL1.0.0 を使用します。

■openssl1.0.0 をインストール
-----------------------------------------------------------

# wget http://www.openssl.org/source/openssl-1.0.0e.tar.gz
# tar zxvf openssl-1.0.0e.tar.gz
--prefix オプションをつけてインストール先を指定します。今回はとりあえず、/opt の上にインストールします。
# ./config --prefix=/opt/openssl
# make
# make install
-----------------------------------------------------------

■apache2.2.21 をインストール
-----------------------------------------------------------

# cd /usr/local/src
# wget http://www.apache.org/dist//httpd/httpd-2.2.21.tar.gz
# tar zxvf httpd-2.2.21.tar.gz
# ./configure --prefix=/opt/apache2 --enable-modules=ssl --with-ssl=/opt/openssl
# make
# make install
< apacheユーザー,グループ作成 >
# groupadd apache
クライアントからの要求があったときに、生成される apache の子プロセスに root 権限を持たないようにします。また、生成された子プロセスがアクセスできるファイルシステムを /var/empty/apache に制限します。apache ユーザーはログインできないようにする為、/sbin/nologin を実行します。
# useradd -g apache -d /var/empty/apache -s /sbin/nologin apache
# cd /opt/apache2/conf
証明書置き場を作ります。ここではわかりすいように certs というディレクトリを作成します。
# mkdir certs
# cd certs
自己証明書を発行します。トリプルDES(Data Encription Standard の略)の暗号方式を使用します。どうやら DES という共通鍵暗号方式で 3 回暗号化しているために des3 らしい。鍵の長さは 2048 ビットを使用します。1024ビットはセキュリティの観点から使用しない方がいいみたい。
# openssl genrsa -des3 -out ca.key 2048
# openssl req -new -x509 -days 365 -key ca.key -out ca.crt
※ サーバー証明書と CA 証明書の組織名は異なる必要があるらしいので、適当につけてみます。
Organization Name (eg, company) [Default Company Ltd]:CA
Organizational Unit Name (eg, section) []:CA
サーバー用秘密鍵を作ります。
# openssl genrsa -des3 -out server.key 2048
作成した秘密鍵を利用して、サーバー証明書のCSRを作成します。CSR は Certificate Signing Request の略です。このサーバーにアクセスするときに申請する公開鍵証明書のリクエストのことをいいます。
# openssl req -new -key server.key -out server.csr
シリアルナンバーのファイルを作成します。
# echo 01 > ca.srl
1 年期限のサーバー証明書をつくります。
# openssl x509 -req -days 365 -CA ca.crt -CAkey ca.key -in server.csr -out server.crt
< httpd-ssl.conf >
# vim /opt/apache2/conf/extra/httpd-ssl.conf
■編集項目
-------------------------------------------------------
# 78 行目と 79 行目を変更する。
ServerName www.example.com:443
ServerAdmin y-ogawa@example.com
# 99 行目と 107 行目 (証明書の置き場を指定する。)
SSLCertificateFile "/opt/apache2/conf/certs/server.crt"
SSLCertificateFile "/opt/apache2/conf/certs/server.crt"
-------------------------------------------------------

SSLCertificateFile ディレクティブに証明書が置いてある場所を指定する。

< httpd.conf >
# vim /opt/apache2/conf/httpd.conf

■編集項目
-------------------------------------------------------
# 65 行目と 66 行目
User apache
Group apache

# 406 行目 ( コメントアウトを外して、httpd-ssl.conf ファイルを読み込ませる。)
Include conf/extra/httpd-ssl.conf
-------------------------------------------------------
# /opt/apache2/bin/apachectl start
ここでエラー。
httpd: Could not open configuration file /usr/local/apache2/conf/httpd.conf: No such file or directory
httpd.conf がないって言われる。読みに行ってるディレクトリも httpd.conf の場所と違う...

とりあえず、apachectl コマンドに -f オプションで httpd.conf ファイルの場所を指定すると実行できました!
# /opt/apache2/bin/apachectl -f /opt/apache2/conf/httpd.conf -k start
それか...ディレクトリを作って
# mkdir -p /usr/local/apache2/conf/
シンボリックリンクをはってやる。この方法でも大丈夫でした。
# ln -s /opt/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf


パスワードは証明書を作成したときのものを入力します。
# /opt/apache2/bin/apachectl start
Apache/2.2.21 mod_ssl/2.2.21 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server www.example.com:443 (RSA)
Enter pass phrase:

OK: Pass Phrase Dialog successful.
ちゃんと動いてるか確認、
# ps aux | grep httpd | grep -v grep
root     32446  0.0  0.2   8416  2812 ?        Ss   22:25   0:00 /opt/apache2/bin/httpd -k start
apache   32447  0.0  0.1   8416  1512 ?        S    22:25   0:00 /opt/apache2/bin/httpd -k start
apache   32448  0.0  0.1   8416  1512 ?        S    22:25   0:00 /opt/apache2/bin/httpd -k start
apache   32449  0.0  0.1   8416  1512 ?        S    22:25   0:00 /opt/apache2/bin/httpd -k start
apache   32450  0.0  0.1   8416  1524 ?        S    22:25   0:00 /opt/apache2/bin/httpd -k start
apache   32451  0.0  0.1   8416  1512 ?        S    22:25   0:00 /opt/apache2/bin/httpd -k start
443 番ポートを使用してるプロセスを確認。
# lsof -i:443
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   1380   root    4u  IPv4   9420      0t0  TCP 192.168.11.22:https (LISTEN)
httpd   1381 apache    4u  IPv4   9420      0t0  TCP 192.168.11.22:https (LISTEN)
httpd   1382 apache    4u  IPv4   9420      0t0  TCP 192.168.11.22:https (LISTEN)
httpd   1383 apache    4u  IPv4   9420      0t0  TCP 192.168.11.22:https (LISTEN)
httpd   1384 apache    4u  IPv4   9420      0t0  TCP 192.168.11.22:https (LISTEN)
httpd   1385 apache    4u  IPv4   9420      0t0  TCP 192.168.11.22:https (LISTEN)
httpd   1386 apache    4u  IPv4   9420      0t0  TCP 192.168.11.22:https (LISTEN)


HTTPS でアクセスできました!

0 件のコメント:

コメントを投稿