07 July 2009

Apache初期設定 (SSLあり) on Ubuntu 8.1

mod_sslがインストール済みか、また自動実行されるようになっているかを念のために確認して、自動実行される設定で無い場合は、自動実行を設定する。


root@localhost:~# ls /etc/apache2/mods-available/
~ 省略 ~
-rw-r--r-- 1 root Root 66 2009-06-11 12:31 speling.load
-rw-r--r-- 1 root Root 2412 2009-06-11 12:31 ssl.conf ← モジュールが存在している
-rw-r--r-- 1 root Root 58 2009-06-11 12:31 ssl.load ← モジュールが存在している
-rw-r--r-- 1 root Root 398 2009-06-11 12:31 status.conf
~ 省略 ~

root@localhost:~# ls -l /etc/apache2/mods-enabled/
~ 省略 ~
lrwxrwxrwx 1 root Root 31 2009-06-14 21:33 setenvif.load -> ../mods-available/setenvif.load
← 有効化されている場合は、ここに表示されるはず
lrwxrwxrwx 1 root Root 29 2009-06-14 21:33 status.conf -> ../mods-available/status.conf
~ 省略 ~

root@localhost:~# a2enmod ssl ← モジュールの有効化
Enabling module ssl.
See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
Run '/etc/init.d/apache2 restart' to activate new configuration!

root@localhost:~# ls -l /etc/apache2/mods-enabled/
~ 省略 ~
lrwxrwxrwx 1 root Root 31 2009-06-14 21:33 setenvif.load -> ../mods-available/setenvif.load
lrwxrwxrwx 1 root Root 26 2009-07-04 20:25 ssl.conf -> ../mods-available/ssl.conf
lrwxrwxrwx 1 root Root 26 2009-07-04 20:25 ssl.load -> ../mods-available/ssl.load

lrwxrwxrwx 1 root Root 29 2009-06-14 21:33 status.conf -> ../mods-available/status.conf
~ 省略 ~

認証機関の鍵ではなく、サーバで作成した『なんちゃって証明書』 鍵を用いるので、公開鍵・秘密鍵・証明書を作成する。


root@localhost:~# cd /etc/apache2/
root@localhost:/etc/apache2# mkdir ssl
root@localhost:/etc/apache2# cd ssl

root@localhost:/etc/apache2/ssl# openssl genrsa -des3 1024 > server.key ← 秘密鍵の作成
Generating RSA private key, 1024 bit long modulus
...........................++++++
...++++++
e is 65537 (0x10001)
Enter pass phrase: ← 適当なパスワードを入力 (次のステップで利用する)
Verifying - Enter pass phrase:

root@localhost:/etc/apache2/ssl# ll
合計 12
drwxr-xr-x 2 root Root 4096 2009-07-04 20:40 .
drwxr-xr-x 8 root Root 4096 2009-07-04 20:39 ..
-rw-r--r-- 1 root Root 963 2009-07-04 20:40 server.key

root@localhost:/etc/apache2/ssl# openssl rsa -in server.key -out server.key ← 秘密鍵のパスワードを解除する
Enter pass phrase for server.key: ← 先ほど入力したパスワード
writing RSA key

root@localhost:/etc/apache2/ssl# ll
合計 12
drwxr-xr-x 2 root Root 4096 2009-07-04 20:40 .
drwxr-xr-x 8 root Root 4096 2009-07-04 20:39 ..
-rw-r--r-- 1 root Root 891 2009-07-04 20:41 server.key

root@localhost:/etc/apache2/ssl# openssl req -utf8 -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) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Sibuyaku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example.com
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:localhost.localdomain
Email Address []:root@localhost.localdomain

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ← 何も入力しない
An optional company name []:

root@localhost:/etc/apache2/ssl# openssl x509 -in server.csr -out server.pem -req -signkey
server.key -days 3650
← 証明書の作成 (自己署名)
Signature ok
subject=/C=JP/ST=Tokyo/L=Sibuyaku/O=Example.com/CN=localhost.localdomain/emailAddress=root@localhost.localdomain
Getting Private key

root@localhost:/etc/apache2/ssl# ll
合計 20
drwxr-xr-x 2 root Root 4096 2009-07-04 20:43 .
drwxr-xr-x 8 root Root 4096 2009-07-04 20:39 ..
-rw-r--r-- 1 root Root 708 2009-07-04 20:43 server.csr
-rw-r--r-- 1 root Root 891 2009-07-04 20:41 server.key
-rw-r--r-- 1 root Root 964 2009-07-04 20:44 server.pem

root@localhost:/etc/apache2/ssl# chmod 400 ./server.* ← rootの読み込み権限のみに変更

root@localhost:/etc/apache2/ssl# ll
合計 20
drwxr-xr-x 2 root Root 4096 2009-07-04 20:43 .
drwxr-xr-x 8 root Root 4096 2009-07-04 20:39 ..
-r-------- 1 root Root 708 2009-07-04 20:43 server.csr
-r-------- 1 root Root 891 2009-07-04 20:41 server.key
-r-------- 1 root Root 964 2009-07-04 20:44 server.pem
root@localhost:/etc/apache2/ssl#

設定ファイルの編集

/etc/apache2/sites-available/default-ssl

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost

DocumentRoot /var/www/

<Directory /var/www/>
# Options Indexes FollowSymLinks MultiViews
Options Includes ExecCGI FollowSymLinks
AllowOverride None
Order allow,deny
allow from all
</Directory>

ErrorLog /var/log/apache2/error-ssl.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/ssl_access.log combined

# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on

# SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateFile /etc/apache2/ssl/server.pem ← 先ほど作成した証明書へのパス
# SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
SSLCertificateKeyFile /etc/apache2/ssl/server.key ← 先ほど作成した秘密鍵へのパス

~ 省略 ~
</VirtualHost>
</IfModule>

default-sslを自動的に読み込むように設定


root@localhost:~# a2ensite default-ssl
Enabling site default-ssl.
Run '/etc/init.d/apache2 reload' to activate new configuration!

root@localhost:~# ls -la /etc/apache2/sites-enabled/
合計 8
drwxr-xr-x 2 root Root 4096 2009-07-04 21:09 .
drwxr-xr-x 8 root Root 4096 2009-07-04 20:39 ..
lrwxrwxrwx 1 root Root 26 2009-06-14 21:33 000-default -> ../sites-available/default
lrwxrwxrwx 1 root Root 30 2009-07-04 21:09 default-ssl -> ../sites-available/default-ssl

待ちうけポートの設定が行われているか、念のために確認。

/etc/apache2/ports.conf

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
Listen 443
</IfModule>

apache2サービスをリスタートすると、次のような警告が出る。 (放っておいても問題ないが…)


root@localhost:~# /etc/init.d/apache2 restart
* Restarting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
...done.

Apache2設定ファイルにサーバ名を強制指定することで、警告を回避できる。

/etc/apache2/apache2.conf

### Section 1: Global Environment
#
# The directives in this section affect the overall operation of Apache,
# such as the number of concurrent requests it can handle or where it
# can find its configuration files.
#

Servername localhost ← /etc/hosts に存在する名前にする