失敗
Ubuntu 版の Apache に SSL (Secure Socket Layer) の設定を行い、ブラウザで動作確認したところ、接続エラーになってしまいました。 IE のネットワーク診断には、「ホストが利用可能でないか、セキュリティ保護された接続をサポートしていない可能性があります。」 と表示されます (図 1)。
apache2ctl configtest コマンドで、文法を確認してみるも問題ないようです。それでは、一体何が原因なのでしょうか?
環境
このレポートは、以下の環境について記述したものです。
| OS | Ubuntu 9.10 |
| SSL / TLS | OpenSSL 0.9.8g-16ubuntu3.1 |
| Web サーバ | Apache 2.2.12-1ubuntu2.1 |
原因
SSL 関連の設定ファイルは、次の 3 つが用意されています。
| 設定ファイル | 説明 |
|---|---|
| /etc/apache2/mods-available/ssl.conf |
mod_ssl モジュールの設定。 SSLProtocol、SSLCipherSuite ディレクティブなどが設定されています。 |
| /etc/apache2/mods-available/ssl.load | mod_ssl モジュールの読み込み。 |
| /etc/apache2/sites-available/default-ssl |
SSL の サイト設定ファイル。 SSLEngine、SSLCertificateFile、SSLCertificateKeyFile ディレクティブなどが設定されています。 |
ただし、デフォルトでは、これらのファイルは Apache に読み込まれません。このため、設定が反映されず、SSL 通信がエラーになってしまったのです。
解決策
Ubuntu 版 Apache 2.2 において、自己署名証明書を使用した SSL 通信の設定手順を説明します。 なお、他のディストリビューションの Apache と異なり、SSL 関連の設定ファイルにシンボリックリンクを作成する作業がありますので、注意が必要です。
(1) 秘密鍵の生成
公開鍵暗号方式を利用したセキュリティ技術である SSL では、RSA (Rivest Shamir Adleman) 秘密鍵が必要になります。 秘密鍵は任意のディレクトリ、任意のファイル名で生成して構いません。 本稿では /etc/apache2/ssl ディレクトリに server.key というファイル名で生成します。
~# mkdir ssl
~# cd ssl
秘密鍵は openssl genrsa コマンドで生成します。
デフォルトでは、鍵長 512 ビットの秘密鍵になります。
鍵長を変更するには、引数にビット数を指定します (暗号強度を高めるために 1024 または 2048 ビットに変更することを推奨)。
以下の例では、鍵長 1024 ビットの秘密鍵を作成しています。
生成した秘密鍵は、厳重に管理しなければなりません。よって、root ユーザーだけが読み取れるようにパーミッションを変更します。
(2) 自己署名証明書の生成
(1) で生成した秘密鍵をもとに、自己署名証明書を生成します。 自己署名証明書も任意のディレクトリ、任意のファイル名で生成して構いません。 本稿では /etc/apache2/ssl ディレクトリに server.crt というファイル名で生成します。
自己署名証明書は、openssl req コマンドに -new 、-x509 オプションを付けることで生成できます。
なお、-days オプションで証明書の有効期限を指定することができます。
以下の例では、有効期限が 365 日の自己署名証明書を作成しています。
コマンドを入力後、サイト運営者の身元情報として、以下の情報を要求されます。
| ターミナルの表示内容 | 入力内容 |
|---|---|
| Country Name (2 letter code) [AU] | 国コード [例] JP |
| State or Province Name (full name) [Some-State] | 都道府県名 [例] Saitama |
| Locality Name (eg, city) [] | 市町村名 [例] Kawaguchi |
| Organization Name (eg, company) [Internet Widgits Pty Ltd] | 企業名 [例] Example Co |
| Organization Unit Name (eg, section) [] | 部署名 [例] Sales |
| Common Name (eg, YOUR name) [] | ホストのドメイン名 [例] www.example.com |
| Email Address [] | サイト運営者のメールアドレス [例] info@example.com |
自己署名証明書も秘密鍵と同様、厳重に管理しなければなりません。よって、root ユーザーだけが読み取れるようにパーミッションを変更します。
(3) default-ssl の編集
/etc/apache2/sites-available/default-ssl を次の通りに編集します。
- 3 行目:ServerName ディレクティブを追加し、ホスト名とポート番号を明記します。
- 50 行目付近:SSLCertificateFile ディレクティブに (2) で生成した自己署名証明書のパスを指定します。
- 51 行目付近:SSLCertificateKeyFile ディレクティブ (1) で生成した秘密鍵のパスを指定します。
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerName www.example.com:443 # ホスト名とポート番号 # 省略 SSLCertificateFile /etc/apache2/ssl/server.crt # 証明書のパス SSLCertificateKeyFile /etc/apache2/ssl/server.crt # 秘密鍵のパス # 省略 </VirtualHost> </IfModule>
(4) SSL 設定ファイルへのシンボリックリンクの作成
SSL 関連の設定ファイルは、デフォルトでは読み込まれません。 これらを読み込ませるには、mods-enabled および sites-enabled ディレクトリに SSL 設定ファイルへのシンボリックリンクを作成する必要があります。
~# ln -s ../mods-availables/ssl.conf ssl.conf
~# ln -s ../mods-availables/ssl.load ssl.load
~# ln -s ../sites-available/default-ssl 000-default-ssl
(5) Apache の再起動
Apache を再起動すると、編集した設定ファイルが読み込まれ、SSL が有効になります。
