目的
ApacheによるSSL通信のサポートおよび、代表的なJavaアプリケーションコンテナである
Tomcatの連動方法(のサポート)について検証した際のメモです。
本メモでは
(1)SSL通信およびTomcatとの連動をサポートするためのApacheのビルド方法
(2)実際のSSLプログラムである
OpenSSLでの操作方法
(3)SSL通信を行うための設定
までについて扱います。
またオープンソースのプログラムをソースファイルで取得し、その内容が改竄されていないかどうか?検証する手段についても記述します。
前提環境・ソフトウェアバージョン(OS、Kernel、Apache、OpenSSL)
OS |
Redhat Enterprise Linux ES 4 Update 6 |
Kernel |
2.6.9-67.EL |
Apache |
2.2.8 |
OpenSSL |
0.9.7a |
Apache以外は、OSのRPMパッケージでインストールされる標準のバージョンを使用します。
概要
基本的なApacheの構築およびOpenSSLでの操作、SSL設定の概要は以下の手順になります。
(1)ダウンロードサイトからの入手
(2)ダウンロードしたファイルの妥当性チェック
(3)ビルド設定の決定
(4)ビルド・インストール
(5)OpenSSLによるサーバ証明書、秘密鍵の作成
(6)SSL通信を行うための設定
ダウンロードサイトからの入手
ダウンロードサイトから、ソースファイル(*.tar.gz)、チェックサムファイル(*.md5)、署名ファイル(*.asc)、公開鍵(KEYS)をダウンロードします。
Apacheのダウンロード先は
コチラ。
ダウンロードしたファイルの妥当性チェック
GnuPGPを使い、署名ファイルで検証を行います。
公開鍵をインポートして、署名ファイルの検証を行います。
gpg --import KEYS <ENTER>
gpg httpd-2.2.8.tar.gz.asc <ENTER>
gpg: Signature made Fri Jan 11 01:54:57 2008 JST using DSA key ID 08C975E5
gpg: Good signature from "Jim Jagielski <jim@apache.org>"
gpg: aka "Jim Jagielski <jim@jaguNET.com>"
gpg: aka "Jim Jagielski <jim@jimjag.com>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 8B39 757B 1D8A 994D F243 3ED5 8B3A 601F 08C9 75E5
上記の実行結果(サンプル)は、"Jim Jagielski <
jim@apache.org>" によって著名された
ファイルであることを示しています(もっとも出力結果中には、信用できる機関によって発行された鍵ではない旨の警告も出力されていますが... )。
md5sum httpd-2.2.8.tar.gz <ENTER>
39a755eb0f584c279336387b321e3dfc httpd-2.2.8.tar.gz
上記の実行結果(サンプル)が、一緒にダウンロードしたMD5ファイルと同等結果であればファイルは改竄されていないことになります(もっとも一緒に配布しているMD5ファイルが改竄されていないことが証明されているわけではありませんが... )。
ビルド設定の決定
一般的なオープンソースプログラムをソース形式からビルドを行う場合、必要とする機能、環境などに対応するため、ビルド設定スクリプトを実行する必要があります。
検証目的があくまで、SSL通信やJavaアプリケーションコンテナとの連携のため、本メモでは、FHS(File Hierarchey Standard)には従いません。
実際の運用などを考慮する場合には、FHSに従ったファイルレイアウトの採用が望ましいでしょう。
configure \
--prefix=/opt/apache/2.2 \
--enable-modules=all \
--enable-mods-shared=all \
--enable-so=yes \
--enable-ssl=yes \
--enable-proxy=yes \
--enable-proxy-ajp=yes
ここで指定している各オプションの意味は以下の通りです。
--prefix |
/opt/apache/2.2 |
インストール先のディレクトリを指定します。 |
--enable-modules |
all |
ビルド対象とするモジュールを「全て」指定しています。 |
--enable-mods-shared |
all |
ビルド対象とする共有オブジェクトを「全て」指定しています。 |
--enable-so |
yes |
動的なモジュールの追加を可能に設定しています。 |
--enable-ssl |
yes |
SSLサポートを設定しています。 |
--enable-proxy |
yes |
プロキシサポートを設定しています。 |
--enable-proxy-ajp |
yes |
AJPプロキシ(Tomcatとの連動に必要)サポートを設定しています。 |
その他各オプションのビルド設定については configure --help コマンドで確認するか、Apacheサイトで確認します。
Apacheのバージョンによって、多少ビルド設定内容が異なったりするので、実際にビルドする際は、事前に各オプション設定について確認しておく必要があります。
ビルド・インストール
ビルド設定が正常に終了したら、後は以下のコマンドを実行するのみです。
make <ENTER>
make install <ENTER>
OpenSSLによるサーバ証明書、秘密鍵の作成
(1)サーバ秘密鍵の作成
以下のコマンドを実行して、サーバ秘密鍵を作成します。
openssl genrsa -rand /var/log/maillog -out server.key 1024 [ENTER]
ここでは、ランダム要素として
メールログファイルを -rand オプションで指定します。
作成する秘密鍵の鍵長を 1024 [bit]に指定しています。
(2)サーバ証明書の発行
以下のコマンドを実行して、(1)で作成したサーバ秘密鍵から、サーバ証明書(公開鍵を含む)を発行します。
openssl req -new -x509 -days 365 -key server.key -out server.crt <ENTER>
尚、この際サーバ証明書に表示する各種プロファイル情報の入力が求められます。
公開鍵暗号方式において、秘密鍵から公開鍵は生成できますが、逆に公開鍵から秘密鍵の生成はできません。
本メモにおける方法では、自分を認証局としてサーバ証明書を発行しているため、サーバ秘密鍵から直接サーバ証明書(公開鍵付)を発行しています。
しかし実際には第三者認証局によりサーバ証明書を発行してもらうので、サーバ秘密鍵から直接サーバ証明書を発行することはできません。
サーバ秘密鍵から、サーバ証明書発行要求(CSR)を生成し、それを認証局に送付してサーバ証明書を取得します。
■[今後の課題]
サーバ秘密鍵から、サーバ証明書発行要求(CSR)を生成し
認証局へ送付してサーバ証明書を取得する方法については、別の機会で調査します。
SSL通信を行うための設定
(1)サーバ秘密鍵とサーバ証明書の配置
cp -p server.crt server.key /opt/apache/2.2/conf/extra <ENTER>
※Apacheの実行プログラムから読み取れるディレクトリであれば、どこでもかまいません。
一般的にはconf/extra(拡張設定ファイル)ディレクトリ以下に配置します。
(2)設定ファイルの編集
1. conf/httpd.conf の編集
(125行目)
ServerName HOGE:80
(456行目)
Include conf/extra/httpd-ssl.conf
2. conf/extra/httpd-ssl.conf の編集
(78行目)
ServerName HOGE:443
(99行目) サーバ証明書の指定
SSLCertificateFile "/opt/apache/2.2/conf/extra/server.crt"
(107行目) サーバ秘密鍵の指定
SSLCertificateKeyFile "/opt/apache/2.2/conf/extra/server.key"
... 以上で設定は終了です。
設定を終了したらApacheデーモンを再起動してください。
cd /opt/apache/2.2/bin <ENTER>
./apachectl resart <ENETR>
実際の動作確認
WebブラウザでApacheデーモンを起動したホストにアクセスします。
この時、上記のように証明書に問題があることを警告します。
今回の場合は自己認証局により発行したサーバ証明書なので「信頼する会社から発行されていません」の旨のメッセージが表示されます。
このように(IEの場合)、SSL通信を行っている場合、ステータスバーの右下部に鍵アイコンが表示されます。
具体的に証明書の情報を確認すると、上図のような情報になります。
信頼する会社より発行されていない旨の警告が表示されます。
■[今後の課題]
サーバ証明書の各フィールドが持つ意味や、サーバ証明書の形式などについては、別の機会にて調査します。
最終更新:2011年04月12日 21:22