How to build Internet Server with Linux
last update: 29 Sep 2004
home
|index
|previous
|next
|contents
SSL
以下に、apacheのSSL対応について説明します。

ここではRedHat系Linuxの使用を前提とし、rpmパッケージでのインストール方法と、
運用方法を説明します。
6.1 SSL(Secure Socket Layer)
|
SSL(Secure Socket Layer)は、
を目的としたプロトコルで、Netscape社によって開発されました。
現在の仕様はVersion3.0です。Netscape Communicatorをはじめ、ほとんどのブラウザがSSLに対応しています。
RedHat7.0以降のapacheサーバは、デフォルトでSSL機能が組み込まれています。
6.2.1 サーバ認証
SSLのサーバ認証には「証明書」が使われます。
クライアントがサーバに接続する際、サーバは自身を証明する「証明書」を
クライアントに送ります。
一般に使われている「証明書」のフォーマットは、ITUの規格であるX.509です。
これは証明書のバージョン、証明者の情報、証明書の有効期限、
公開キー情報などが含まれています。
証明書には、サーバ運営者自身が発行する自己署名証明書と、
認証局(Certificate Authority: 以下CA)が発行する証明書があります。
自己署名証明書を使う場合は次のようなシーケンスでサーバの認証が行われます。
-
事前に自己署名証明書の作成を作成しておく。
-
クライアントからのアクセスにより、サーバが自己署名証明書を送信する。
-
クライアントが送られてきた自己署名証明書の内容を信用するか否か決定する。
-
認証が完了。
自己署名証明書を使ったサーバ認証
クライアントが送られてきた自己署名証明書を信用するか否かについては、明示的に内容表示を行うことが出来ます([apache03.bmp]図“More Info”参照)。
自己署名証明書を使った認証については、トピック「自己署名証明書を作成するには」も参照してください。
CAの証明書を使ったサーバ認証のシーケンスは、次のようになります。
-
事前にCAから証明書を発行してもらう(通常は有料)。
-
クライアントは、サーバから送られた証明書を信用するか否か決定する。事前にクライアント側のブラウザには複数のCAが登録されている。
-
もし、サーバから送られた証明書が事前に登録されたCAのものであれば、そのサーバを信用する。
-
サーバから送られた証明書が登録されていなければ、CAにアクセスしてサーバが本当に認証を得たサーバか否か確認する。
-
認証が完了。
CA(認証局)の証明書を使ったサーバ認証
以下に、登録済みのCAの証明書を受け取ったブラウザ画面を示します。ここで“OK”を押すと、サーバを信用したことになり、サーバ認証が完了します。
6.2.2 通信の暗号化
通信路の暗号化用共通キーをクライアント-サーバ間で共有するため、鍵交換プロトコルを使って共通キーの交換が行われます。共通キーの交換後は、その共通キーを使って通信路を暗号化します。
以下に、
SSL機能を組み込んだapacheのインストール方法(RedHat6.xバージョン向け)、apacheの設定ファイル:httpd.confの編集について解説します。
なお、RedHat7.xに付属するapacheには、予めSSL機能が組み込まれています。
6.3.1 SSL対応apacheインストール
rpmパッケージを使った、SSL対応apacheのインストール手順を以下に示します。
次に示すrpmパッケージをダウンロードします。
- openssl-0.9.6b-8.src.i386.rpm
- mm-1.1.3-2.src.rpm
- apache-1.3.20-16.src.rpm
rpmパッケージは、例えば、以下のサイトからダウンロードすることができます。
http://rpm.pbone.net/
http://rpmfind.net/
以下の手順でrpmパッケージをコンパイル、インストールします。
- opensslのインストール
% rpm -i openssl-0.9.6b-8.src.i386.rpm
% rpm -bb /usr/src/redhat/SPECS/openssl.spec
% rpm -Uvh /usr/src/redhat/RPMS/i386/openssl-0.9.6b-8.i386.rpm
% rpm -Uvh /usr/src/redhat/RPMS/i386/openssl-devel-0.9.6b-8.i386.rpm
- mmのインストール
% rpm -i mm-1.1.3-2.src.rpm
% rpm -bb /usr/src/redhat/SPECS/mm.spec
% rpm -Uvh /usr/src/redhat/RPMS/i386/mm-1.1.3-2.rpm
% rpm -Uvh /usr/src/redhat/RPMS/i386/mm-devel-1.1.3-2.rpm
- ssl対応apacheのインストール
% rpm -i apache-1.3.20-16.src.rpm
% rpm -bb /usr/src/redhat/SPECS/apache.spec
% rpm -Uvh /usr/src/redhat/RPMS/i386/apache-1.3.20-16.rpm
% rpm -Uvh /usr/src/redhat/RPMS/i386/apache-devel-1.3.20-16.rpm
SSL対応のapacheを運用するには、
httpd.conf設定ファイルの編集、証明書の作成が必要です。
6.4.1 設定ファイル:httpd.confの編集
以下に、SSLに関連するディレクティブについてまとめます。
なお、RedHat7.0以降に付属するapacheには、以下の設定が既になされています。
ディレクティブ | 説明 | デフォルト値 |
SSLEngine | SSLを有効にするか無効にするか。[on|off] | on |
SSLCertificateFile | 自己署名証明書を保存しているファイル | /etc/httpd/conf/ssl.crt/server.crt |
SSLCertificateKeyFile | 自己署名証明書の秘密キーを保存しているファイル | /etc/httpd/conf/ssl.key/server.key |
SSLCACertificatePath | CAの証明書を保存しているディレクトリ | /etc/httpd/conf/ssl.crt |
SSLCACertificateFile | CAの証明書を保存しているファイル | /etc/httpd/conf/ssl.crt/ca-bundle.crt |
SSLVerifyDepth | クライアントの証明書を確認するために必要なCA証明書の数 | 10 |
SSLLogFile | SSL接続のログファイル | /var/log/httpd/ssl_engine_log |
SSLSessionCacheTimeout | SSLセッションのキャッシュの有効期間.単位は秒 | 300 |
SSLMutex | 複数起動しているhttpdプロセス間の排他制御を行う方式を指定.選択肢は別途 | file:logs/ssl_mutex |
SSL関連のディレクティブ
SSLMutexの選択肢は次の通り:
none | 排他制御を行わない |
file: | filenameをロックファイルとして使用 |
sem | SystemV UPCセマフォを使用 |
通常は、デフォルト設定値のままで問題無いでしょう。
なお、RedHat6.xとRedHat7.xでは、DocumentRootディレクティブのデフォルト値が異なります。
バージョン | ディレクティブ |
RedHat6.x | /home/httpd/html |
RedHat7.x | /var/www/html |
DocumentRootディレクティブのデフォルト値
上記の方法でSSL機能を組み込んだapacheをインストールした場合、RedHat7.xのデフォルト値が使われます。適宜、httpd.confファイルのDocumentRootディレクティブと、同時にDirectoryディレクティブを変更してください。
--- 略 ---
## DocumentRoot /var/www/html # Redhat7.x -> Redhat6.x
DocumentRoot /home/htmld/html
--- 略 ---
## <Directory "/var/www/html"> # Redhat7.x -> Redhat6.x
<Directory "/home/htmld/html">
--- 略 ---
|
DocumentRootディレクティブの変更例(/etc/httpd/conf/httpd.conf)
6.4.2 SSLポート
SSLはTCPの443番ポートを利用しますので、外部から443番ポートへのアクセスを許可してください。
6.4.3 証明書の作成
自己署名証明書を生成するか、CAの証明書を取得して設定します。
/etc/httpd/confディレクトリで"make testcert"コマンドを実行すると、自己署名証明書を作成することができます。
以下に、具体的な手順を示します。
- デフォルト証明書の削除
はじめに、デフォルトで準備されているサーバキーファイル:/etc/httpd/conf/ssl.key/server.keyと、サーバ認証ファイル: /etc/httpd/conf/ssl.crt/server.crtを削除します。
% cd /etc/httpd/conf
% rm ssl.key/server.key
% rm ssl.crt/server.crt
- 自己署名証明書作成
次に、"make testcert"コマンドを実行します。
途中でパスフレーズを入力します。このパスフレーズはhttpdサーバを起動するときに使用します。
% make testcert
umask 77 ; \
/usr/bin/openssl genrsa -des3 1024 > /etc/httpd/conf/ssl.key/server.key
Generating RSA private key, 1024 bit long modulus
.......................................................................++++++
----------++++++
e is 65537 (0x1001)
Enter PEM pass phrase: <-パスフレーズ入力
Verifying password - Enter PEM pass phrase: <-パスフレーズ再入力
パスフレーズを入力後、サイト情報:
国名、都道府県名、市町村名、組織名、部署名、サーバ名、e-mailアドレス、
を入力します。
ここで入力したサイト情報は、サーバ認証時にクライアント側のブラウザに表示されます。
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Kanagawa
Locality Name (eg, city) []:Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:TestDomain
Organizational Unit Name (eg, section) []:net
Common Name (eg, your name or your server's hostname) []:localserver
Email Address []:user01@localserver.TestDomain.net
これで自己署名証明書が作成されます。
- httpdの起動
自己署名証明書を作成した後、httpdサーバを起動します。起動時にパスフレーズの入力を要求されますので、自己署名証明書作成時に使用したパスフレーズを入力します。
% /etc/rc.d/init.d/httpd start
httpdを起動中:
Apache/1.3.20 mod_ssl/2.8.4 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide us with the pass phrases.
Server localhost 443 (RSA)
Enter pass phrase: <- パスフレーズ入力
Ok: Pass Phrase Dialog successful.
Ok: Pass Phrase Dialog successful.
[ OK ]
- ブラウザからアクセス
SSLを使ってhttpdサーバにアクセスするには、プロトコルを"https"とします。
実際にhttpsでアクセスしたときのブラウザ表示を、[apache04.bmp]図に示します.ブラウザ側では、サーバを信用するか否か尋ねられます。
ここで"More Info"を押すと、サーバの自己署名証明書作成時のサイト情報が表示されます。
現在、多数のCAが存在します。次に代表的なCAを示します。
各社とも、様々なバリエーションの証明書を発行しています。暗号強度の違い、証明書の利用範囲の違い、などによって価格もサービスも様々です。
次に示すURLにVeriSign社、Thawte社から証明書を購入する手続きについて、詳細な説明があります。
http://www.jp.redhat.com/support/manuals/rhl-rg-ja-7.0/index.html
「第5章 セキュアサーバの証明書を取得する」を参照してください。
mm-1.1.3-2.src.rpmは、バージョン4.0以上のrpmコマンドが必要です(RedHat6.2のrpmコマンドはバージョン3.x)。
rpmコマンドのバージョンアップは、次のように行います。
6.5.1 rpmパッケージのダウンロード
次に示すrpmパッケージをダウンロードします。
db3-3.1.17-4.6x.i386.rpm
db3-devel-3.1.17-4.6x.i386.rpm
tcl-8.0.5-35.i386.rpm
db3-utils-3.1.17-4.6x.i386.rpm
rpm-4.0.2-6x.i386.rpm
rpm-devel-4.0.2-6x.i386.rpm
rpm-build-4.0.2-6x.i386.rpm
rpm-python-4.0.2-6x.i386.rpm
popt-1.6.2-6x.sparc.rpm
6.5.2 パッケージのインストール(アップデート)
次の手順でrpmパッケージをインストール(アップデート)します。
% rpm -Uvh db3-3.1.17-4.6x.i386.rpm
% rpm -Uvh db3-devel-3.1.17-4.6x.i386.rpm
% rpm -Uvh tcl-8.0.5-35.i386.rpm
% rpm -Uvh db3-utils-3.1.17-4.6x.i386.rpm
% rpm -Uvh rpm-4.0.2-6x.i386.rpm
% rpm -Uvh rpm-devel-4.0.2-6x.i386.rpm
% rpm -Uvh rpm-build-4.0.2-6x.i386.rpm
% rpm -Uvh rpm-python-4.0.2-6x.i386.rpm
% rpm -Uvh popt-1.6.2-6x.sparc.rpm
参考:
http://www.zdnet.co.jp/help/tips/linux/l0334.html
home
|index
|previous
|next
|contents
since 04/Oct/2004