Ubuntu 版 Apache 2.2 - mod_ssl による通信経路の暗号化 (自己署名証明書)

失敗

セキュリティ証明書の名前が無効であるか、またはサイト名と一致しません。
図1 セキュリティ警告

図1 セキュリティ警告

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 というファイル名で生成します。

~#  cd /etc/apache2/
~#  mkdir ssl
~#  cd ssl

秘密鍵は openssl genrsa コマンドで生成します。 デフォルトでは、鍵長 512 ビットの秘密鍵になります。 鍵長を変更するには、引数にビット数を指定します (暗号強度を高めるために 1024 または 2048 ビットに変更することを推奨)。
以下の例では、鍵長 1024 ビットの秘密鍵を作成しています。

~#  openssl genrsa -out server.key 1024

生成した秘密鍵は、厳重に管理しなければなりません。よって、root ユーザーだけが読み取れるようにパーミッションを変更します。

~#  chmod 400 server.key

(2) 自己署名証明書の生成

(1) で生成した秘密鍵をもとに、自己署名証明書を生成します。 自己署名証明書も任意のディレクトリ、任意のファイル名で生成して構いません。 本稿では /etc/apache2/ssl ディレクトリに server.crt というファイル名で生成します。

自己署名証明書は、openssl req コマンドに -new 、-x509 オプションを付けることで生成できます。 なお、-days オプションで証明書の有効期限を指定することができます。
以下の例では、有効期限が 365 日の自己署名証明書を作成しています。

~#  openssl req -new -x509 -days 365 -key server.key -out server.crt

コマンドを入力後、サイト運営者の身元情報として、以下の情報を要求されます。

ターミナルの表示内容 入力内容
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 ユーザーだけが読み取れるようにパーミッションを変更します。

~#  chmod 400 server.crt

(3) default-ssl の編集

/etc/apache2/sites-available/default-ssl を次の通りに編集します。

  1. 3 行目:ServerName ディレクティブを追加し、ホスト名とポート番号を明記します。
  2. 50 行目付近:SSLCertificateFile ディレクティブに (2) で生成した自己署名証明書のパスを指定します。
  3. 51 行目付近:SSLCertificateKeyFile ディレクティブ (1) で生成した秘密鍵のパスを指定します。
[default-ssl - 証明書、秘密鍵のパスを修正する]
<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 設定ファイルへのシンボリックリンクを作成する必要があります。

~#  cd /etc/apache2/mods-enabled/
~#  ln -s ../mods-availables/ssl.conf ssl.conf
~#  ln -s ../mods-availables/ssl.load ssl.load
~#  cd /etc/apache2/sites-enabled/
~#  ln -s ../sites-available/default-ssl 000-default-ssl

(5) Apache の再起動

Apache を再起動すると、編集した設定ファイルが読み込まれ、SSL が有効になります。

~#  apache2ctl restart

関連レポート

参考サイト

コメント

コメント投稿
(非公開)
     « アイコン一覧 »
(必須)

作成日:2010/01/15
更新日:2010/01/15