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 に存在する名前にする