Apacheインストール+SSL証明書作成+SSL設定
目次
構成
想定環境
サーバ構成
OSバージョン
CentOS release 5.5 (Final) 32bit
パッケージ一覧
apr-1.2.7-11.el5_3.1.i386.rpm
postgresql-libs-8.1.18-2.el5_4.1.i386.rpm ・・・apr_utilが依存
apr-util-1.2.7-11.el5.i386.rpm
httpd-2.2.3-43.el5.centos.i386.rpm
php-common-5.1.6-27.el5.i386.rpm ・・・PHPの実行に必要、php-mbstringが依存
php-mbstring-5.1.6-27.el5.i386.rpm ・・・PHPの実行に必要
gmp-4.1.4-10.el5.i386.rpm ・・・PHPの実行に必要、phpが依存
php-cli-5.1.6-27.el5.i386.rpm ・・・PHPの実行に必要、phpが依存
php-5.1.6-27.el5.i386.rpm ・・・PHPの実行に必要
distcache-1.4.5-14.1.i386.rpm ・・・SSL対応で必要、mod_sslが依存
mod_ssl-2.2.3-43.el5.centos.i386.rpm ・・・SSL対応で必要
クライアント構成
OSバージョン
Windows XP Professional Service Pack 3
環境構築
インストール
HTTPサーバに必要なパッケージを11個インストールします。
内訳は最低限必要なパッケージ4つとPHPを実行するために必要なパッケージ5つ、
SSL通信に必要なパッケージ2つです。
SSIを有効化するために必要な追加パッケージはありません。
DVDドライブにCentOS 5.5のDVD-ROMをセットし、以下のコマンドを実行します。
# mount /dev/cdrom /media/cdrom # cd /media/cdrom/CentOS/ # rpm -ihv apr-1.2.7-11.el5_3.1.i386.rpm Preparing... ########################################### [100%] 1:apr ########################################### [100%] # rpm -ihv postgresql-libs-8.1.18-2.el5_4.1.i386.rpm Preparing... ########################################### [100%] 1:postgresql-libs ########################################### [100%] # rpm -ihv apr-util-1.2.7-11.el5.i386.rpm Preparing... ########################################### [100%] 1:apr-util ########################################### [100%] # rpm -ihv httpd-2.2.3-43.el5.centos.i386.rpm Preparing... ########################################### [100%] 1:httpd ########################################### [100%] # rpm -ihv php-common-5.1.6-27.el5.i386.rpm Preparing... ########################################### [100%] 1:php-common ########################################### [100%] # rpm -ihv php-mbstring-5.1.6-27.el5.i386.rpm Preparing... ########################################### [100%] 1:php-mbstring ########################################### [100%] # rpm -ihv gmp-4.1.4-10.el5.i386.rpm Preparing... ########################################### [100%] 1:gmp ########################################### [100%] # rpm -ihv php-cli-5.1.6-27.el5.i386.rpm Preparing... ########################################### [100%] 1:php-cli ########################################### [100%] # rpm -ihv php-5.1.6-27.el5.i386.rpm Preparing... ########################################### [100%] 1:php ########################################### [100%] # rpm -ihv distcache-1.4.5-14.1.i386.rpm Preparing... ########################################### [100%] 1:distcache ########################################### [100%] # rpm -ihv mod_ssl-2.2.3-43.el5.centos.i386.rpm Preparing... ########################################### [100%] 1:mod_ssl ########################################### [100%] # cd / # umount /media/cdrom
設定
基本的にはインストールしただけでHTTPサーバとしての機能は果たしますが PerlなどのCGIプログラム、PHP、SSIにも対応できるよう設定します。 また、SSLのサーバ証明書を作成し、HTTPS通信にも対応します。 サーバ証明書は自己署名とします。
HTTPサーバの設定
viエディタで設定ファイル(httpd.conf)を開き、設定を変更します。
# cd /etc/httpd/conf/ # vi httpd.conf
※以下、該当箇所のみ変更※ ServerTokens OS ↓変更 ServerTokens Prod
LoadModule dav_module modules/mod_dav.so
↓変更
#LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
↓変更
#LoadModule dav_fs_module modules/mod_dav_fs.so
ServerAdmin root@localhost
↓変更
ServerAdmin webmaster@ranonet.ne.jp
User apache
Group apache
TraceEnable off ←この行を追加
### Section 2: 'Main' server configuration
#ServerName www.example.com:80 ↓変更 ServerName www.ranonet.ne.jp:80 ←#を消して変更
※コメント行を除外して表示しています※ <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> ↓変更 <Directory "/var/www/html"> Options FollowSymLinks ExecCGI IncludesNOEXEC ←変更 AllowOverride None Order allow,deny Allow from all <Limit GET POST> ←この行を追加 Order allow,deny ←この行を追加 Allow from all ←この行を追加 </Limit> ←この行を追加 <LimitExcept GET POST> ←この行を追加 Order deny,allow ←この行を追加 Deny from all ←この行を追加 </LimitExcept> ←この行を追加 </Directory>
DirectoryIndex index.html index.html.var
↓変更
DirectoryIndex welcome.htm index.shtml index.php index.cgi index.html index.html.var
LogLevel warn
↓変更
LogLevel info
ServerSignature On
↓変更
ServerSignature Off
<IfModule mod_dav_fs.c> # Location of the WebDAV lock database. DAVLockDB /var/lib/dav/lockdb </IfModule> ↓変更 #<IfModule mod_dav_fs.c> ←#を付ける # Location of the WebDAV lock database. # DAVLockDB /var/lib/dav/lockdb ←#を付ける #</IfModule> ←#を付ける
AddDefaultCharset UTF-8
↓変更
AddDefaultCharset Off
#AddHandler cgi-script .cgi ↓変更 AddHandler cgi-script .cgi ←#を消す
AddType text/html .shtml AddOutputFilter INCLUDES .shtml ↓変更 AddType text/html .shtml AddOutputFilter INCLUDES .shtml AddHandler server-parsed .shtml ←この行を追加
perlのシンボリックリンク作成
CentOS 5ではperlのモジュールは /usr/bin/perl にインストールされています。 しかし一般に配布されているサンプルのCGIでは /usr/local/bin/perl を 指定しているものも多いのが実状です。 これらを実行する際にその都度perlのソースを修正するのは手間がかかるので /usr/bin/perl、/usr/local/bin/perlのいずれが指定されていても perlのプログラムを実行できるようにシンボリックリンクを作成します。
# ln -s /usr/bin/perl /usr/local/bin/perl
SSL証明書(自己証明書)の作成
まずは「RSA秘密鍵(server.key)」を作成します。 暗号鍵の鍵長は2048bitとします。 特にこの長さでなければならないということはありませんが、 2009年10月以降は日本ベリサイン社でも1024bit鍵長のCSRは 受付停止になったようなので、世間の流れに乗っておきます。
# cd /etc/pki/tls/certs/ # openssl genrsa -des3 -out server.key 2048 Generating RSA private key, 2048 bit long modulus ....................................................................+++ ........+++ e is 65537 (0x10001) Enter pass phrase for server.key: ←パスフレーズを入力(文字は表示されません) Verifying - Enter pass phrase for server.key: ←パスフレーズを再入力(文字は表示されません)
次に秘密鍵に設定されたパスフレーズを削除します。 これを削除しておかないとSSL通信を行う度にパスフレーズの入力を求められます。 不特定多数の人に公開するサイトでは全く不要です。
# openssl rsa -in server.key -out server.key Enter pass phrase for server.key: writing RSA key
続いて「証明書署名要求(server.csr)」を作成します。 通常はこの署名要求のファイルを日本ベリサイン社等に 送付してSSL証明書を発行してもらいます。
# openssl req -new -key server.key -out server.csr 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) [GB]:JP State or Province Name (full name) [Berkshire]:Tokyo Locality Name (eg, city) [Newbury]:Edogawa-ku Organization Name (eg, company) [My Company Ltd]:ranonet.ne.jp Organizational Unit Name (eg, section) []: ←何も入力せずに[リターン]キーを押す Common Name (eg, your name or your server's hostname) []:www.ranonet.ne.jp Email Address []:webmaster@ranonet.ne.jp Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: ←何も入力せずに[リターン]キーを押す An optional company name []: ←何も入力せずに[リターン]キーを押す
最後に証明書署名要求とRSA秘密鍵を元に「SSL証明書(server.crt)」を作成します。 通常は公的に信頼された第三者(業者)に署名してもらってこそ意味があるのですが、 通信をSSLで暗号化するという目的を果たすだけであれば自分自身で署名しても 効果は同じです。 社内のみで利用する場合、ごく限られた一部の人のみに情報を公開する場合などは このように自己署名の証明書を使うことが多々あります。 頻繁に証明書を再作成するのは手間がかかるので、証明書の有効期間は10年間としています。
# openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650 Signature ok subject=/C=JP/ST=Tokyo/L=Edogawa-ku/O=ranonet.ne.jp/CN=www.ranonet.ne.jp/emailAddress=webmaster@ranonet.ne.jp Getting Private key
以上でSSL証明書の作成は完了ですが、サーバ上の一般ユーザに 鍵の中身を不正に読み取られないようにパーミッションを変更しておきます。 鍵の内容を書き換えることはないため、所有者の読み取り権限のみあれば十分です。 また、デフォルトのディレクトリ構成では秘密鍵だけ別のディレクトリで管理 するような構成になっているので、これに従って作成した秘密鍵を移動します。
# chmod 400 ./server.* # mv ./server.key /etc/pki/tls/private/
mod_sslの設定
SSL証明書を作成したので、Apacheから証明書と秘密鍵を利用できるように ファイルのパスを指定します。
# cd /etc/httpd.con/conf.d/ # vi ssl.conf
※以下、該当箇所のみ変更※ SSLCertificateFile /etc/pki/tls/certs/localhost.crt ↓変更 SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
↓変更
SSLCertificateKeyFile /etc/pki/tls/private/server.key
HTTPサーバの起動ランレベル変更
OSの起動に併せてデーモンを自動起動する設定に変更します。
# chkconfig httpd on
以上で設定が終了しましたのでrcスクリプトを使用してデーモンを起動します。
# /etc/rc.d/init.d/httpd start Starting httpd: [ OK ]
設定ファイル
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.d/ssl.conf
/etc/httpd/conf/httpd.conf
/etc/pki/tls/certs/server.crt
/etc/pki/tls/certs/server.csr
/etc/pki/tls/private/server.key
動作テスト
HTTPサーバのプロセス起動確認
プロセスが起動していることを確認します。
# ps -ef | grep httpd root 2405 1 0 Feb27 ? 00:00:00 /usr/sbin/httpd apache 2458 2405 0 Feb27 ? 00:00:00 /usr/sbin/httpd apache 2459 2405 0 Feb27 ? 00:00:00 /usr/sbin/httpd apache 2460 2405 0 Feb27 ? 00:00:00 /usr/sbin/httpd apache 2461 2405 0 Feb27 ? 00:00:00 /usr/sbin/httpd apache 2462 2405 0 Feb27 ? 00:00:00 /usr/sbin/httpd apache 2463 2405 0 Feb27 ? 00:00:00 /usr/sbin/httpd apache 2464 2405 0 Feb27 ? 00:00:00 /usr/sbin/httpd apache 2465 2405 0 Feb27 ? 00:00:00 /usr/sbin/httpd root 3555 3528 0 00:24 pts/0 00:00:00 grep httpd