Yamada-Lab

Apache+SSL+PHPのインストール
−Turbo Linux 環境−

1.概要

(1)Apacheでの暗号化通信

 Apacheで暗号化通信を行うためには、ApacheをSSL(Secure Socket Layer)と連携させる必要があります。そのためには、以下の手順により、OpenSSL、Apache、Apache+SSLの各ソースファイルをコンパイルしインストールします。

(2)OpenSSLのインストール

 OpenSSLをApacheのインストールの前にインストールしておく必要があります。以前はSSLeayか使われていましたが、OpenSSLが新しく、一般にはOpenSSLをインストールします。

(3)ApacheとApache+SSLのインストール

Apacheのソースファイルを入手し、ApacheにSSL用のパッチをあてます。パッチ用のファイルはApache+SSL(Apache-SSLと書く場合もある)と呼ばれます。

(4)PHPのインストール

PHPを使用する場合は、SSL対応のPHPとするために、再インストールします。

(5)サイト証明書の作成

インターネットで暗号化通信を行うには、次の3つの機能が必要になります。

機能名称 機能
認証局(CA:Certification Authority) サイト証明書を発行する。公開暗号鍵も含まれる。
Webサーバ サイト証明書を使って、Webクライアントとの間で、暗号化によるHTTP通信を行う。
Webクライアント サイト証明書を使って、Webサーバとの間で、暗号化によるHTTP通信を行う。
URLはhttp://でなく、https://となります。

正規の暗号化通信では、サイト証明書は公的に認知されたベリサイン社(http://www.verisign.co.jp/)等に発行してもらい、Webサーバにインストールします。ここでは、実験等のために、Webサーバ自身が独自認証局の機能ももつ設定とします。

1)Webサーバ用の秘密鍵を作成します。

2)証明書署名要求(CSR)を作成します。

3)作成したCSRを用いて独自認証局として、サイト証明書を作成します。

(6)httpsd.confファイルの編集

SSL対応のApacheの設定ファイルであるhttpsd.confを編集します。

(7)SSL対応のApacheを起動します。

(8)WebクライアントからWebサーバにアクセスし、サイト証明書を登録します。

 

2.OpenSSLのアンインストール

■OpenSSLをRPMでインストールした場合

(1)RPM系Linuxディストリビューションでは、OpenSSLがインストールされているかどうかは次のコマンドで確認できます。

# rpm -qa | grep -i openssl

たとえば、次のようになります。

[root@igux src]# rpm -qa | grep -i openssl
openssl-0.9.5-1
[root@igux src]#

(2)root権限で以下のrpmコマンドを実行し、openssl関連のパッケージを削除します。

# rpm -qa | grep -i openssl | xargs rpm -e

OpenSSLをmakeでインストールした場合

(1)「/usr/local/ssl」ディレクトリを削除します。

たとえば、次のようになります。

[root@igux local]# rm -rf /usr/local/ssl
[root@igux local]#

rmコマンド
  -r :指定したディレクトリ以下のすべてのファイルおよびサブディレクトリを再帰的に削除します。
  -f :確認メッセージなしに強制的に削除します。

 

3.OpenSSLのインストール

■OpenSSLソースのダウンロード

(1)まず以下のURLにアクセスし、Apache+SSLの最新情報を入手します。

http://www.apache-ssl.org/

2003年2月時点では、Apacheはバージョン1.3.27のapache_1.3.27が最新で、対応するパッチファイルはapache_1.3.27+ssl_1.48です。この場合、OpenSSLはバージョン0.9.6g以上が必要です。

(2)次に、以下のURLにアクセスし、OpenSSLのソースファイルをダウンロードします。

http://www.openssl.org/source/

2003年1月時点では、"openssl-0.9.7.tar.gz "をクリックします。

(3)保存先のディレクトリを指定します。保存先は任意ですが、一般には以下を指定します。

/usr/local/src

(4)「OK」ボタンをクリックし、ダウンロードを開始します。

■OpenSSLソースの展開

(1)ソースファイルのあるディレクトリ「/usr/local/src」に移動して、tarコマンドでダウンロードした圧縮ファイルを展開します。

$ cd /usr/local/src
$ tar xvfz openssl-0.9.7.tar.gz

tarコマンド
  GNUプロジェクトで開発されたファイル圧縮・展開コマンドGNU tarコマンドは、zオプションにより一挙に展開できます。
  x :アーカイブからファイルを取り出す。
  v :処理したファイル名を一覧表示する。
  f :指定したアーカイブファイルを使用する。
  z :gzipを通して処理する。

古いtarコマンドの場合は、gunzipコマンドとのパイプにより次のように記述する。
  gunzip -c
openssl-0.9.7.tar.gz | tar xvf -

gunzipは"gzip -d"と同義なので、次のように記述する場合もある。
  gzip -cd
openssl-0.9.7.tar.gz | tar xvf -

具体的には、たとえば次のようになります。

[root@igux /root]# cd /usr/local/src
[root@igux src]# tar xvfz openssl-0.9.7.tar.gz
(略)
openssl-0.9.7/VMS/TODO
openssl-0.9.7/VMS/ucx_shr_decc_log.opt
openssl-0.9.7/VMS/ucx_shr_decc.opt
openssl-0.9.7/VMS/ucx_shr_vaxc.opt
openssl-0.9.7/VMS/WISHLIST.TXT
[root@igux src]#

■OpenSSLのインストール

(1)「openssl-0.9.7」というディレクトリができるので、そのディレクトリに移動してconfigを実行します。

$ cd openssl-0.9.7
$ ./config

(2)以下の順で、インストールを実行します。なお、「make install」は必ずroot権限で実行します。

$ make
$ make test
$ su -
# make install
# exit

具体的には、たとえば次のようになります。この例では、最初からroot権限で実行しています。

[root@igux openssl-0.9.7]# ./config
(略)
make[1]: Entering directory `/usr/local/src/openssl-0.9.7/tools'
Makefile => Makefile.ssl
make[1]: Leaving directory `/usr/local/src/openssl-0.9.7/tools'
generating dummy tests (if needed)...
make[1]: Entering directory `/usr/local/src/openssl-0.9.7/test'
make[1]: Nothing to be done for `generate'.
make[1]: Leaving directory `/usr/local/src/openssl-0.9.7/test'
Configured for linux-pentium.
[root@igux openssl-0.9.7]# make
(略)
make[1]: Leaving directory `/usr/local/src/openssl-0.9.7/test'
making all in tools...
make[1]: Entering directory `/usr/local/src/openssl-0.9.7/tools'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/usr/local/src/openssl-0.9.7/tools'
[root@igux openssl-0.9.7]# make test
(略)
compiler: gcc -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DOPENSS
L_NO_KRB5 -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -mcpu=pentium -Wall -DSHA
1_ASM -DMD5_ASM -DRMD160_ASM
OPENSSLDIR: "/usr/local/ssl"
You have new mail in /var/spool/mail/root
[root@igux openssl-0.9.7]#
[root@igux openssl-0.9.7]# make install
(略)
installing tools...
make[1]: Entering directory `/usr/local/src/openssl-0.9.7/tools'
make[1]: Leaving directory `/usr/local/src/openssl-0.9.7/tools'
installing libcrypto.a
installing libssl.a
cp openssl.pc /usr/local/ssl/lib/pkgconfig
[root@igux openssl-0.9.7]#

 

4.Apacheのアンインストール

■ApacheをRPMでインストールした場合

(1)apacheが起動中であれば、以下のコマンドで停止します。

[root@igux /root]# /etc/rc.d/init.d/httpd stop
Shutting down http:

(2)正常に停止すれば、"Shutting down http:"と表示されます。

(3)次のコマンドでインストール済みのapache関連のパッケージがあるかrpmコマンドを使って調べます。
たとえば、TurboLinuxでApacheがプリインストールされている場合は、次のようになります。

[root@igux /root]# rpm -qa | grep apache
apache-1.3.12-5
apache-manual-1.3.12-5
[root@igux /root]#

(4)必ずroot権限で、以下のrpmコマンドを実行し、apache関連のパッケージを削除します。

[root@igux /root]# rpm -qa | grep apache | xargs rpm -e
error: removing these packages would break dependencies:
apache is needed by php-3.0.15_i18n_ja-4jaJP
apache is needed by php-3.0.15_i18n_ja-4jaJP
apache is needed by php-3.0.15_i18n_ja-4jaJP
apache is needed by php-3.0.15_i18n_ja-4jaJP
[root@igux /root]#

(5)php3で使用していて削除できないので、先にphp3を削除します。まず、rpmコマンドでphp関連パッケージのインストールの有無を再確認します。次に、rpmコマンドでphp関連パッケージを削除します。サイドrpmコマンドでphp関連パッケージが削除されたことを確認します。

[root@igux /root]# rpm -qa | grep php
php-3.0.15_i18n_ja-4jaJP
php-ldap-3.0.15_i18n_ja-4jaJP
php-manual-3.0.15_i18n_ja-4jaJP
php-mysql-3.0.15_i18n_ja-4jaJP
php-pgsql-3.0.15_i18n_ja-4jaJP
[root@igux /root]#
[root@igux /root]# rpm -qa | grep php | xargs rpm -e
Can't open /etc/httpd/php3.ini: No such file or directory
Can't open /etc/httpd/php3.ini: No such file or directory
Can't open /etc/httpd/php3.ini: No such file or directory
[root@igux /root]# rpm -qa | grep php
[root@igux /root]#

(6)再度、apache関連パッケージを削除します。

[root@igux /root]# rpm -qa | grep apache | xargs rpm -e
httpd: no process killed
cannot remove /var/log/httpd - directory not empty
cannot remove /etc/httpd/conf - directory not empty
[root@igux /root]#
[root@igux /root]# rpm -qa | grep apache
[root@igux /root]#

(7)今度は、削除されましたが、/var/log/httpd と/etc/httpd/conf のディレクトリとその中のファイルはrpmコマンドで削除できませんでした。そこでrmコマンドを使ってマニュアルでこれらのディレクトリを削除します。

[root@igux httpd]# cd /etc/httpd/conf
[root@igux conf]# ls
access.conf.org cvsweb.conf.org httpd.conf.rpmsave srm.conf.org
cvsweb.conf httpd.conf.org mime.types.org ssl/
[root@igux conf]# rm -rf /etc/httpd/conf
[root@igux conf]#

■Apacheをmakeでインストールした場合

(1)apacheが起動中であれば、root権限に移り以下のコマンドで停止します。

[yamada@igux yamada]$ su -
Password:
[root@igux /root]# /usr/local/apache/bin/apachectl stop
/usr/local/apache/bin/apachectl stop: httpd stopped
[root@igux /root]#

(2)Windowsと違ってレジストリ等の登録がないので、UNIXやLinuxのソフトウェアは単純にアンインストールできます。つまり、インストールしたファイルを削除するだけです。Apacheの場合は、デフォルトのディレクトリは「/usr/local/apache」ですから、このディレクトリとその下のファイルやサブディレクトリ以下を削除すればアンインストールが完了します。

[root@igux /root]# rm -rf /usr/local/apache
[root@igux /root]#

 

5.Apache+SSLのインストール

■Apacheソースのダウンロード

(1)たとえば、以下のURLにアクセスします。

http://www.apache.jp/dist/httpd/

2002年12月時点では、バージョン1.3.27が最新です。"apache_1.3.27.tar.gz"をクリックします。

(2)保存先のディレクトリを指定します。保存先は任意ですが、一般に以下を指定します。

/usr/local/src

(3)「OK」ボタンをクリックし、ダウンロードを開始します。

■Apache+SSLソースのダウンロード

(1)たとえば、以下のURLにアクセスします。

ftp://ftp.ox.ac.uk/pub/crypto/SSL/Apache-SSL/

"apache_1.3.27+ssl_1.48.tar.gz"をクリックします。

(2)保存先のディレクトリを指定します。保存先は任意ですが、一般に以下を指定します。

/usr/local/src

(3)「OK」ボタンをクリックし、ダウンロードを開始します。

■ApacheソースおよびApache+SSLソースの展開

(1)Apacheソースの保存先ディレクトリ「usr/local/src」で、Apacheソースを展開します。

$ tar xvfz apache_1.3.27.tar.gz

zオプションが効かない場合は、次のように2段階で展開します。
    gunzip -c apache_1.3.27.tar.gz | tar xvf - 

たとえば、次のようになります。

[root@igux src]# tar xvfz apache_1.3.27.tar.gz
(略)
apache_1.3.27/src/support/suexec.8
apache_1.3.27/src/support/suexec.c
apache_1.3.27/src/support/suexec.h
apache_1.3.27/src/Configuration
[root@igux src]#

(2)「apache_1.3.27」というディレクトリができるので、そのディレクトリに移動します。

$ cd apache_1.3.27

(3)Apache+SSLソースを展開します。

$ tar xvfz ../apache_1.3.27+ssl_1.48.tar.gz

たとえば、次のようになります。

[root@igux src]# cd apache_1.3.27
[root@igux apache_1.3.27]# tar xvfz ../apache_1.3.27+ssl_1.48.tar.gz
(略)

SSLconf/keynote/cert-issuer-simple
md5sums
md5sums.asc
[root@igux apache_1.3.27]#

(4)ApacheソースにSSLパッチをあてます。

$ patch -p1 < SSLpatch

たとえば、次のようになります。

[root@igux apache_1.3.27]# patch -p1 < SSLpatch
patching file src/os/unix/Makefile.tmpl
patching file src/support/apachectl
patching file src/support/suexec.c
[root@igux apache_1.3.27]#

(5)この場合、「src/Configuration」ファイルの「SSL_*」の各値をOpenSSLのパスに合わせて適宜設定する必要があります。たとえば、次のようになります

#
# SSL Related stuff. N.B. This is set up to use the SSLeay source, NOT an
# installed version.
#
KEYNOTE_BASE=/home/ben/work/KeyNote
SSL_BASE=/usr/local/ssl
SSL_INCLUDE= -I$(SSL_BASE)/include/openssl
SSL_CFLAGS= -DAPACHE_SSL
SSL_LIB_DIR=/usr/local/ssl/lib
SSL_LIBS= -L$(SSL_LIB_DIR) -lssl -lcrypto
SSL_APP_DIR=/usr/local/ssl/bin
SSL_APP=/usr/local/ssl/bin/openssl


「./README.SLL」ファイルの説明によれば、(4)のステップで、./FixPatchを実行する方法もあります。

たとえば、以下のようになりますが、ここでは上記の方法で進めます。

[root@igux apache_1.3.27]# ./FixPatch
Your version of patch is OK.
Searching for a usable OpenSSL installation or source directory
Looks like you are using OpenSSL, adjusting app name
OpenSSL sources were found in: /usr/local/src/openssl-0.9.7
OpenSSL needs updating to include a function to read a specified number of
bytes from EGD - if you haven't applied the patch already and are using
OpenSSL 0.9.5a, then it needs applying
Do you want me to apply the OpenSSL EGD patch for you? [n] n

OK, I won't apply the OpenSSL patch.
OpenSSL installation found in: /usr/local/ssl
Using the source version of OpenSSL found in /usr/local/src/openssl-0.9.7
If this is not what you want stop now and specify the path to OpenSSL
explicitly.
Do you want me to apply the fixed-up Apache-SSL patch for you? [n] y

patching file Makefile.tmpl
patching file configure
patching file src/Configuration
patching file src/Configuration.tmpl
(中略)
patching file src/os/unix/Makefile.tmpl
patching file src/support/apachectl
patching file src/support/suexec.c
[root@igux apache_1.3.27]#

 

 

■Apacheのインストール

(1)「usr/local/src/apache_1.3.27」ディレクトリで、./configureし、makeします。

$ OPTIM="-O2" ./configure --enable-module=so
$ make

たとえば、次のようになります。

[root@igux apache_1.3.27]# OPTIM="-O2" ./configure --enable-module=so
Configuring for Apache, Version 1.3.27
+ using installation path layout: Apache (config.layout)
Creating Makefile
Creating Configuration.apaci in src
Creating Makefile in src
+ configured for Linux platform
+ setting C compiler to gcc
+ setting C pre-processor to gcc -E
+ checking for system header files
+ using custom target name: httpsd
+ adding selected modules
+ using builtin Expat
+ using -ldl for vendor DSO support
+ checking sizeof various data types
+ doing sanity check on compiler and options
Creating Makefile in src/support
Creating Makefile in src/regex
Creating Makefile in src/os/unix
Creating Makefile in src/ap
Creating Makefile in src/main
Creating Makefile in src/lib/expat-lite
Creating Makefile in src/modules/standard
Creating Makefile in src/modules/ssl
[root@igux apache_1.3.27]# make
(略)
make[2]: Leaving directory `/usr/local/src/apache_1.3.27/src/support'
<=== src/support
make[1]: Leaving directory `/usr/local/src/apache_1.3.27'
<=== src
[root@igux apache_1.3.27]#

(2)必ずroot権限になって、次のコマンドを実行します。

$ su -
# make install
# exit

たとえば、次のようになります。なお、ここでは、(1)のステップからroot権限で実行しています。

[root@igux apache_1.3.27]# make install
(略)
make[1]: Leaving directory `/usr/local/src/apache_1.3.27'
+--------------------------------------------------------+
| You now have successfully built and installed the              |
| Apache 1.3 HTTP server. To verify that Apache actually         |
| works correctly you now should first check the               |
| (initially created or preserved) configuration files              |
|                                             |
|   /usr/local/apache/conf/httpsd.conf
|                                             |
| and then you should be able to immediately fire up             |
| Apache the first time by running:                        |
|                                             |
|  /usr/local/apache/bin/httpsdctl start
|                                            |
| Thanks for using Apache.             The Apache Group    |
|                             http://www.apache.org/ |
+--------------------------------------------------------+
[root@igux apache_1.3.27]#

 

6.PHPのアンインストール

■PHPがRPMでプリインストールされている場合

(1)RPM系Linuxディストリビューションでは、PHPがインストールされているかどうかは、次のコマンドで確認できます。

# rpm -qa | grep -i php

(2)この場合の削除は、次のコマンドで行います。

# rpm -qa | grep -i php | xargs rpm -e

■PHPをmakeでインストールした場合

(1)phpのモジュールであるlibphp4.soを削除します。libphp4.soの存在するディレクトリは次のfindコマンドで探します。

# find / -name libphp4.so -print

たとえば、次のようになります。

[root@igux src]# find / -name libphp4.so -print
/usr/local/src/php-4.2.3/libs/libphp4.so
/usr/local/src/php-4.2.3/.libs/libphp4.so
/usr/local/apache/libexec/libphp4.so
find: /proc/6/fd: Permission denied
find: /proc/21810/fd: Permission denied
[root@igux src]#

/usr/local/apache/libexec/libphp4.soがインストールされたPHPモジュールです。

(2)このPHPモジュールをrmコマンドで削除します。

# rm -fr /usr/local/apache/libexec/libphp4.so

 

7.PHPのインストール

ソースのダウンロード

(1)PHPのWebサイトからソースファイルをダウンロードします。以下のURLにアクセスします。

http://www.php.net/downloads.php

(2)以下のWebページで、UNIX(あるいはLinux)版のソースコードをクリックします。2003年2月時点では、4.2.3版です。

(3)日本のミラーサイトをクリックします。

(4)保存先のディレクトリを指定します。保存先は任意ですが、一般に以下を指定します。

/usr/local/src

(5)「OK」ボタンをクリックし、ダウンロードを開始します。

ソースファイルの展開

(1)root権限で、ソースファイルのあるディレクトリ/usr/local/srcに移動し、tarコマンドでダウンロードした圧縮ファイルを展開します。

[root@igux conf]# cd /usr/local/src
[root@igux src]# pwd
/usr/local/src
[root@igux src]# tar xvfz php-4.2.3.tar.gz

 

コンパイル

(1)/usr/local/ssl/includeディレクトリ内のopensslディレクトリをディレクトリごと/usr/local/apache/includeの下にコピーします。

[root@igux src]#
[root@igux src]# cd /usr/local/apache/include
[root@igux include]# mkdir openssl
[root@igux include]# cd openssl
[root@igux openssl]# cp /usr/local/ssl/include/openssl *

(1)のコピーをしないで、(3)のmakeコマンドを実行すると、以下のエラーが発生してしまいます。

In file included from /usr/local/apache/include/httpd.h:79,
from sapi_apache.c:32:
/usr/local/apache/include/buff.h:75: openssl/ssl.h: No such file or directory
/usr/local/apache/include/buff.h:78: #error "Don't use OpenSSL/SSLeay versions l
ess than 0.9.2b, they have a serious security problem!"
make[3]: *** [sapi_apache.lo] Error 1
make[3]: Leaving directory `/usr/local/src/php-4.2.3/sapi/apache'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/usr/local/src/php-4.2.3/sapi/apache'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/php-4.2.3/sapi'
make: *** [all-recursive] Error 1
[root@igux php-4.2.3]#

参考:[Apache-Users 3] Apache 1.3.14 + openSSL 0.9.6 + php-4.0.4pl1 コンパイル不可
    (http://mm.apache.or.jp/pipermail/apache-users/2001-February/000002.html

(2)/usr/local/srcディレクトリの下にphp-4.2.3ディレクトリが作成されます。このディレクトリへ移動後、下記のコマンドでコンパイルを実行します。

[root@igux src]# cd php-4.2.3
[root@igux php-4.2.3]# ./configure --with-pgsql --with-apxs=/usr/local/apache/b
in/apxs --enable-versioning --with-mbstring --enable-mbregex
(中略)
Thank you for using PHP.
[root@igux php-4.2.3]#

オプションに--enable-mbstr-enc-transを付加すると、httpsdctl startコマンドを実行したときに次のエラーが発生します。

[root@igux bin]# ./httpsdctl start
Syntax error on line 205 of /usr/local/apache/conf/httpsd.conf:
Cannot load /usr/local/apache/libexec/libphp4.so into server: /usr/local/apache/
libexec/libphp4.so: undefined symbol: mbstr_treat_data
./httpsdctl start: httpsd could not be started

参考:[PHP-dev 463] Re: --enable-enc-trans
    (http://ns1.php.gr.jp/pipermail/php-dev/2002-September/000462.html

(3)makeコマンドを実行します。

[root@igux php-4.2.3]# make
(中略)
Making all in pear
make[1]: Entering directory `/usr/local/src/php-4.2.3/pear'
make[1]: Leaving directory `/usr/local/src/php-4.2.3/pear'
[root@igux php-4.2.3]#

(4)インストールを実行します。

[root@igux php-4.2.3]# make install
(中略)
make[2]: Leaving directory `/usr/local/src/php-4.2.3/pear'
make[1]: Leaving directory `/usr/local/src/php-4.2.3/pear'
[root@igux php-4.2.3]#

 

8.サイト証明書の作成

■Webサーバ用の秘密鍵の作成

(1)opensslで秘密鍵を作成し、/usr/local/ssl/private/key.pemファイルに保存します。

# openssl genrsa -des 1024 > /usr/local/ssl/private/key.pem

たとえば、次のようになります。パスフレーズはアルファベットと数字の組み合わせで10文字前後にします。

[root@igux logs]# cd /usr/local/ssl
[root@igux ssl]# bin/openssl genrsa -des 1024 > private/key.pem
Generating RSA private key, 1024 bit long modulus
..................++++++
................++++++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:(パスフレーズ)

(2)このままでは、Apacheの起動時ごとにパスフレーズの入力を要求されることになるので、簡単のために秘密鍵からパスフレーズを削除します。

# openssl rsa -in /usr/local/ssl/private/key.pem -out /usr/local/ssl/private/key.pem

たとえば、次のようになります。

[root@igux ssl]# bin/openssl rsa -in private/key.pem -out private/key.pem
Enter pass phrase for private/key.pem:
writing RSA key
[root@igux ssl]#

(3)証明書署名要求(CSR)を作成し、/usr/local/ssl/csr.pemファイルに保存します。

# openssl req -new -days 365 -key /usr/local/ssl/private/key.pem -out /usr/local/ssl/csr.pem

たとえば、次のようになります。

[root@igux ssl]# bin/openssl req -new -days 365 -key private/key.pem -out csr.pem
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) [AU]:JP
State or Province Name (full name) [Some-State]:Kanagawa
Locality Name (eg, city) []:Yokohama-shi
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Musashi-tech
Organizational Unit Name (eg, section) []:FEIS
Common Name (eg, YOUR name) []:Yamada_Lab
Email Address []:yamada@yc.musashi-tech.ac.jp

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:(パスフレーズ)
An optional company name []:Musashi-tech

(4)正規には、このCSRをベリサイン社などの公式の認証局に送付しサイト証明書を発行してもらいますが、ここでは自らのWebサーバ自身が独自認証局となりサイト証明書(/usr/local/ssl/certs/cert.pem)を作成します。

# openssl x509 -in /usr/local/ssl/csr.pem \
-out /usr/local/ssl/certs/cert.pem \
-req -signkey /usr/local/ssl/private/key.pem -days 365

[root@igux ssl]# bin/openssl x509 -in csr.pem -out certs/cert.pem -req -signkey
private/key.pem -days 365

Signature ok
subject=/C=JP/ST=Kanagawa/L=Yokohama-shi/O=Musashi-tech/OU=FEIS/CN=Yamada_Lab/emailAddress=yamada@yc.musashi-tech.ac.jp
Getting Private key
[root@igux ssl]#

 

9.Apacheの設定

■SSL関連の設定

(1)SSL対応のApacheの設定ファイルは/usr/local/apache/conf/httpsd.confになります。

[root@igux /root]# cd /usr/local/apache/conf
[root@igux conf]# ls
access.conf       httpsd.conf     magic      mime.types.default
access.conf.default  httpsd.conf.bak   magic.default srm.conf
httpd.conf@       httpsd.conf.default mime.types   srm.conf.default
[root@igux conf]# 

(2)httpsd.confファイルを開き、SSL関連の下記の記述を追加します。

Port 443
Listen 443
Listen 80
ServerType standalone
SSLCacheServerPort logs/gcache_port
SSLCacheServerPath bin/gcache
SSLSessionCacheTimeout 300
SSLCertificateKeyFile /usr/local/ssl/private/key.pem
SSLCertificateFile /usr/local/ssl/certs/cert.pem
SSLVerifyClient 0
SSLVerifyDepth 10
SSLFakeBasicAuth

<VirtualHost _default_:80>
  Port 80
  SSLDisable
</VirtualHost>

<VirtualHost _default_:443>
  Port 443
  SSLCertificateKeyFile /usr/local/ssl/private/key.pem
  SSLCertificateFile /usr/local/ssl/certs/cert.pem
  SSLVerifyClient 0
  SSLVerifyDepth 10
  SSLFakeBasicAuth
  DocumentRoot /usr/local/apache/htdocs
</VirtualHost>

たとえば、Port番号関連の記述は次のようになります。

# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, in addition to the default. See also the <VirtualHost>
# directive.
#
#Listen 3000
#Listen 12.34.56.78:80

#2003/2/3
Port 443
Listen 443
Listen 80

また、VirtualHost関連の記述は次のようになります。

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>

# 2003/2/3
SSLCacheServerPort logs/gcasche_port
SSLCacheServerPath bin/gcache
SSLSessionCacheTimeout 300
SSLCertificateKeyFile /usr/local/ssl/private/key.pem
SSLCertificateFile /usr/local/ssl/certs/cert.pem
SSLVerifyClient 0
SSLVerifyDepth 10
SSLFakeBasicAuth


<VirtualHost _default_:80>
  Port 80
  SSLDisable
</VirtualHost>

<VirtualHost _default_:443>
  Port 443
  SSLCertificateKeyFile /usr/local/ssl/private/key.pem
  SSLCertificateFile /usr/local/ssl/certs/cert.pem
  SSLVerifyClient 0
  SSLVerifyDepth 10
  SSLFakeBasicAuth
  DocumentRoot /usr/local/apache/htdocs
</VirtualHost>

■Apacheの基本的な設定

(1)ServerNameに、インターネット上のサーバ名とテスト用のループバックアドレスを指定します。ループバックアドレスはIPアドレスで127.0.0.1とすることになっています。これはURLでhttp://localhost/と指定するのと同義です。

ServerName igux.mc.yc.musashi-tech.ac.jp
ServerName 127.0.0.1

エディタ画面は次のようになります。

#
# 127.0.0.1 is the TCP/IP local loop-back address, often named localhost. Your
# machine always knows itself by this address. If you use Apache strictly for
# local testing and development, you may use 127.0.0.1 as the server name.
#
# 2003/02/03
ServerName igux.mc.yc.musashi-tech.ac.jp
ServerName 127.0.0.1

#

(2)ドキュメントルートディレクトリを設定します。既定値は"/usr/local/apache/htdocs"です。

DocumentRoot "/usr/local/apache/htdocs"

エディタ画面は次のようになります。

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/usr/local/apache/htdocs"

(3)PHPモジュールをロード可能なように設定するためDynamic Shared Object(DSO) Support セクションで次の行を活かします(行の先頭の#を削除します)。

LoadModule php4_module libexec/libphp4.so

エディタ画面は次のようになります。

# Example:
# LoadModule foo_module libexec/mod_foo.so
LoadModule php4_module libexec/libphp4.so

(4)PHPファイルを自動起動可能なように設定するため、Document Typeセクションで以下の行を活かします

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

たとえば、次のようになります。

#
# AddType allows you to tweak mime.types without actually editing it, or to
# make certain files to be certain types.
#
AddType application/x-tar .tgz
AddType image/x-icon .ico

# 2003/02/03
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

 

10.SSL対応ApacheとPHPの基本動作の確認

■SSL対応Apacheの起動

(1)SSL対応Apacheを起動するために、次のコマンドを実行します。

# /usr/local/apache/bin/httpsdctl start

たとえば、次のようになります。

[root@igux ssl]# /usr/local/apache/bin/httpsdctl start
Reading key for server 127.0.0.1:80
Launching... /usr/local/apache/bin/gcache
pid=22075
/usr/local/apache/bin/httpsdctl start: httpsd started
[root@igux ssl]#

起動を確認するには、/usr/local/apache/logs/httpsd_error_logを見ます。

 

■SSL対応Apacheの再起動

(1)Apacheの起動後、httpsd.confファイルを再編集した場合は、Apacheを再起動する必要があります。Apacheの再起動には次のコマンドを実行します。

# /usr/local/apache/bin/httpsdctl restart

たとえば、次のようになります。

[root@igux apache]# /usr/local/apache/bin/httpsdctl restart
/usr/local/apache/bin/httpsdctl restart: httpsd restarted
[root@igux apache]#

Apacheの基本動作確認

Apacheが正常に動作しているかどうかを確認するために、ホームディレクトリにアクセスしてみます。URLは、下記のいずれかとします。

http://127.0.0.1/

http://localhost/

以下のWebページが表示されれば、htmlファイルの表示機能は正常に動作しています。

今回のアクセスはhttp://でアクセスし、https://でのアクセスではないので、暗号化通信は行われておらず、Netscaspeブラウザの左下の鍵のアイコンはロックされていない状態になっています。

■PHPの動作確認

以下の簡単なphpファイルを作成し、ホームディレクトリに/usr/local/apache/htdocs/phpinfo.phpというファイル名で保存します。

<?php
  echo phpinfo();
?>

URLに以下のいずれかのように記入し、アクセスします。

http://127.0.0.1/phpinfo.php

http://localhost/phpinfo.php

以下のWebページが表示されれば、PHP4は正常に動作しています。

■SSL対応Apacheの動作確認

(1)SSL対応のApacheが正常に動作しているかどうかを確認するために、ホームディレクトリにアクセスしてみます。URLは、下記のいずれかとします。 http://のかわりにhttps://を使います。

https://127.0.0.1/

https://localhost/

次のダイアログボックスが表示されれば、SSL対応のApacheは正常に動作しています。

(2)「次へ>」のボタンをクリックします。

(3)「詳細」ボタンをクリックすると、サイト証明書の詳細を確認できます。

(4)(2)で「次へ>」のボタンをクリックします。

(5)例として「このセッションに対して証明書を受け付ける」をチェックし、「次へ>」のボタンをクリックします。

(6)「次へ>」のボタンをクリックします。

(7)「完了」ボタンをクリックします。

(8)「続ける」ボタンをクリックします。

(9)「確認」ボタンをクリックします。

(9)Netscapeのブラウザの左下に鍵がロックされたアイコンが見えます。このWebページについては暗号化通信中であることを示しています。

■SSL対応PHPの動作確認

(1)上記(9)の状態からブラウザを閉じずに(同一セッションのまま)、以下のURLにアクセスします。

http://localhost/phpinfo.php

(2)Netscapeのブラウザの左下に鍵がロックされたアイコンが見えます。SSL対応のPHPが正常に動作していることがわかります。

なお、ブラウザを一度閉じるとセッションも切断されます。したがって、上記(9)のあと、一度ブラウザを閉じてhttps://localhost/phpinfo.phpにアクセスすると、上記■SSL対応Apacheの動作確認の(1)からやりなおすことになります。

 

11.Apachの設定
   (SSL専用仮想ディレクトリの設定)

■SSL専用仮想ディレクトリの設定

 新たに、/usr/local/apache/secureというディレクトリを作成し、/secureという仮想ディレクトリに設定し、この仮想ディレクトリはhttps://でしかアクセスできないように設定します。

(1)/usr/local/apache/secureというディレクトリを作成します。

# cd /usr/local/apache
# mkdir secure

(2)作成したディレクトリに以下の簡単なPHPプログラムをhttps.phpというファイル名で保存します。

<?php
echo "Now https communication!";
?>

(3)以上の処理はたとえば次のようになります。

[root@igux apache]# mkdir secure
[root@igux apache]# cd secure
[root@igux secure]# ls
https.php
[root@igux secure]# cat https.php
<?php
echo "Now https communication!";
?>
[root@igux secure]#
[root@igux secure]# ls -l
total 4
-rw-r--r-- 1 root root 46 Feb 4 17:43 https.php
[root@igux secure]#

(4)/usr/local/apache/conf/httpsd.confファイルを開きます。Aliasesブロック内に、以下のような記述を追加し、仮想ディレクトリを設定します。

Alias /secure/ "/usr/local/apache/secure/"

(5)設定した仮想ディレクトリ/secure/の属性に、次の行を追加し、SSL対応の暗号化通信しか受け付けないように設定します。

SSLRequireSSL

また、その他最低限必要な属性の設定もあわせて行います。

以上、たとえば、次のようになります。

#
# Aliases: Add here as many aliases as you need (with no limit). The format is
# Alias fakename realname
#
<IfModule mod_alias.c>
(略)

  Alias /secure/ "/usr/local/apache/secure/"

  <Directory "/usr/local/apache/secure">

    SSLRequireSSL

    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
  </Directory>


</IfModule>

 

12.Webクライアントにおけるサイト証明書の登録
   (Internet Explorerの場合)

■http://によるSSL要求ディレクトリへのアクセス

(1)11.で作成したSSL要求仮想ディレクトリ/secure/に、とりあえずhttp://によりリモートのWebクライアントからアクセスしてみます。URLは次のようにします。

http://igux.mc.yc.musashi-tech.ac.jp/secure/https.php

(2)次のように、アクセス不許可のダイアログボックスが表示され、11(5)で設定したとおりhttp://ではアクセスできなくなっています。

■https://によるSSL要求ディレクトリへのアクセス

(1)次に同じ仮想ディレクトリ/secure/にhttps://でアクセスしてみます。URLは次のようにします。

https://igux.mc.yc.musashi-tech.ac.jp/secure/https.php

(2)今度は、次のようなダイアログボックスが表示されます。

(3)「証明書」の表示ボタンをクリックしてみます。

(4)「証明書のインストール」ボタンをクリックします。

(5)「次へ」のボタンをクリックします。

(6)「次へ」のボタンをクリックします。

(7)「完了」ボタンをクリックします。

(8)「はい」ボタンをクリックします。

(9)「OK」ボタンをクリックします。

(10)「OK」ボタンをクリックします。

(11)「はい」ボタンをクリックします。

WebブラウザInternet Explorerの右下に、ロックされた鍵のアイコンが表示され、暗号化通信中であることが分かります。

(12)一度Internet Explorerをすべて閉じ、再度Internet Explore起動し、同じように

https://igux.mc.yc.musashi-tech.ac.jp/secure/https.php

にhttps://でアクセスします。

(2)今度は、「このセキュリティ証明書は、信頼された証明機関から発行されています」のチェックがONの状態でダイアログボックスが表示されます。これは、すでにアクセスしたWebサーバのサイト証明書がWebクライアントであるInternet Explorerに登録済みだからです。

 

参考Webサイト

Linux Square
(http://www.atmarkit.co.jp/flinux/index.html)

Linuxメモ
(http://bitarts.jp/tech/linux/)

FreeBSD でインターネットサーバ構築(http://freebsd.sing.ne.jp/FreeBSD/http://freebsd.sing.ne.jp/FreeBSD/)

WWW サーバーの設定
(http://www.a-yu.com/net/apache.html )

 


作成者:山田豊通
更新日: 2007年08月22日