「また……やっちゃった?」
ということで、今回は Apache 2.2 における自己署名証明書の作成&設定手順をレポートします。
「また……やっちゃった?」
ということで、今回は Apache 2.2 における自己署名証明書の作成&設定手順をレポートします。
このレポートは、以下の環境について記述したものです。
|
自サイトを CA (Certification Authority : 認証局) とする自己署名証明書を作成する場合も、 第三者機関の CA に証明書を作成してもらう場合と同じ様に、サイト運営者の身元情報が要求されます。
この身元情報の一部として要求された「ホストのドメイン名」を誤って入力してしまったことが、警告の原因でした。 こっそり修正して、もみ消したくなるような失敗ですが、恥を忍んでレポートします。
Apache 2.2 において、自己署名証明書を使用した SSL 通信の設定手順を説明します。
本稿では、OS に openSUSE (SUSE Linux のオープンソース版) を使用しています。 管理ツールやコマンドのパスに関する部分は、ご使用中の環境に合わせて適宜読み替えてください。
SSL (Secure Socket Layer) / TLS (Transport Layer Security) の実装には OpenSSL を使用します。
openSUSE 10.2 には、OpenSSL のランタイムである openssl パッケージが標準インストールされています。 ただし、開発ライブラリである openssl-devel パッケージはインストールされていません。 Apache で SSL 通信するには、この開発ライブラリが必要となります。 YaST (Yet Another Setup Tool : ヤスト) のソフトウェア管理機能などを使い、openssl-devel パッケージをインストールしてください。
なお、標準インストールされている openssl コマンドのパスは /usr/bin/openssl です。

Apache において、SSL / TLS の処理は mod_ssl モジュールが担当します。 mod_ssl モジュールは、バージョン 2.0 以降、Apache 本体に組み込まれるようになりました。 よって、configure のオプションに --enable-ssl を指定するだけでインストールは完了します。
tar zxvf httpd-2.2.4.tar.gz
cd httpd-2.2.4
./configure --enable-ssl
make
make install
公開鍵暗号方式を利用したセキュリティ技術である SSL では、 RSA (Rivest Shamir Adleman) 秘密鍵が必要になります。
RSA 秘密鍵は任意のディレクトリに、任意のファイル名で作成して構いません (ただし、アクセス権には要注意) 。
本稿では、mod_ssl の 設定ファイルである httpd-ssl.conf に定義されているディレクトリ (/usr/local/apache2/conf) 、ファイル名 (server.key) を使用します。
cd /usr/local/apache2/conf
openssl genrsa コマンドで、RSA 秘密鍵を作成します。
デフォルトでは、鍵長 512 ビットの RSA 秘密鍵が作成されます。
鍵長を変更するには、引数にビット数を指定します (暗号強度を高めるために 1024 または 2048 ビットに変更することを推奨)。
以下の例では、鍵長 1024 ビットの RSA 秘密鍵を作成しています。
/usr/bin/openssl genrsa -out server.key 1024
作成した RSA 秘密鍵は、極秘にしなければなりません。
openssl rsa コマンドで、RSA 秘密鍵自体を暗号化しておくことをお勧めします。
以下の例では、RSA 秘密鍵を AES (Advanced Encryption Standard) 256 ビットで暗号化しています (暗号の種類は 補足 を参照) 。
コマンド入力後、パスフレーズの入力を要求されます。
ここで入力するパスフレーズは忘れないように、控えて置いてください。
/usr/bin/openssl rsa -aes256 -in server.key -out server.key
【注意】
RSA 秘密鍵自体の暗号化は、セキュリティ強度の面でメリットがあります。
その一方、Apache の自動起動や、Apache の起動コマンドが含まれるシェルスクリプトの動作に影響を与えるデメリットもあります (Apache 起動時にパスフレーズの入力が要求されるため) 。
(3) で作成した秘密鍵を元に、自己署名証明書を作成します。
自己署名証明書も任意のディレクトリに、任意のファイル名で作成して構いません。
本稿では、httpd-ssl.conf に定義されているディレクトリ (/usr/local/apache2/conf) 、ファイル名 (server.crt) を使用します。
openssl req コマンドに -new 、-x509 オプションを付けることにより、自己署名証明書を作成します。
なお、-days オプションで証明書の有効期限を指定することができます。
以下の例では、有効期限が 365 日の自己署名証明書を作成しています。
/usr/bin/openssl req -new -x509 -days 365 -key server.key -out server.crt
コマンドを入力すると、-key オプションで指定した RSA 秘密鍵のパスフレーズを要求されます (秘密鍵自体を暗号化している場合のみ) 。 その後、サイト運営者の身元情報として、以下の情報を要求されます。
|
Apache 2.2 では、mod_ssl の 設定ファイルとして httpd-ssl.conf が用意されています。 httpd-ssl.conf を読み込めるように、httpd.conf を修正しましょう。
|
VirtualHost ディレクティブの中に、SSL 通信時の設定が定義されています。 ドキュメントルートやサーバ名、ログなどの設定を、各自の環境に合わせて修正してください。
RSA 秘密鍵や自己署名証明書のファイル名、または配置先ディレクトリを変更した場合は、SSLCertificateFile ディレクティブ、 SSLCertificateKeyFile ディレクティブに指定されているパスを修正しなければなりません。
|
以上で、SSL 通信を行うための設定は完了です。
Apache 2.0 以前において、SSL 通信を開始するには apachectl startssl コマンドで起動する必要がありました。 しかし、Apache 2.2 では apachectl start コマンドで HTTP 通信、SSL 通信ともに開始されるように変更されています。 旧バージョンをお使いになっていた方は、ご注意ください。
/usr/local/apache2/bin/apachectl start
openssl res コマンドで RSA 秘密鍵を暗号化することができます。
『解決策』で示した例では AES で暗号化しましたが、使用できる暗号は他にもあります。
以下に、その一部を挙げます。
|