OSS Fan ~OSSでLinuxサーバ構築~

このエントリーをはてなブックマークに追加

Apacheインストール+SSL証明書作成+SSL設定

カテゴリ:OSSセットアップ | ソフトウェア:Apache | タグ:
最終更新日:2020/11/02 | 公開日:2010/06/30

目次

構成

想定環境

サーバ構成

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
ファイル名:/etc/httpd/conf/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
ファイル名:/etc/httpd/conf.d/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