4. Apache Server の設定
SSL をサポートするためには、Apache は追加の API モジュールを使うように設定される必要があります。多くの SSL ソフトウェアパッケージが利用できます。私の例では、ModSSL と OpenSSL 用に設定された Apache を元にしています。これらのプロダクトをサポートする数え切れないくらいのメーリングリストやニュースグループがあります。 Apache ウェブサーバを元にしているいくつかの商用 SSL パッケージにも、これらの手引きが有用だと思うかもしれません。
いくつか頭に入れておくべきことがあります - 同じサーバに複数のヴァーチャルホストをたてることができます。同じ IP アドレスで、名前ベースのヴァーチャルホストを多数たてることができます。同じ IP アドレスで、名前ベースのヴァーチャルホストを多数と、セキュアなヴァーチャルホストを 1 つたてることもできます。ただし - 同じ IP アドレスで、複数のセキュアなヴァーチャルホストをたてることはできません。多くの人がこう訊ねるでしょう- 何故? と。答えはこうです - SSL はアプリケーション層の下で機能します。名前ベースのホストは、アプリケーション層までは定義されていません。
特に、同じ SOCKET (IP アドレス + ポート) について、複数のセキュアなヴァーチャルホストをたてることはできません。デフォルトでは、セキュアなホストはポート 443 を使います。ヴァーチャルホストが同じ IP アドレスで異なるポート番号を使うことで、別のソケットを作成するように設定を変更することはできます。この方法には数多くの不都合があります。一番明確な不都合は、デフォルトポートを使っていない場合、セキュアサイトへのアクセスにおいて、URL にポート番号を含めなくてはならないことです。
例えば:
* デフォルトポートを使うサイト、www.something.com は、https://www.something.com でアクセスできます
* ポート 8888 を使うサイトでは、https://www.something.com:8888 でアクセスできます。
もう一つの不都合は、たくさんのポートを使うと、ポートを嗅ぎまわるハッカーにより機会を与えることになる、ということです。最後に、選んだポートが何か他で使われていると、衝突問題が発生することになります。
4.1 セキュアなヴァーチャルホストの定義
ヴァーチャルホストの設置は、全く簡単です。セキュアなヴァーチャルホストを設定する基本を、検討していきます。
これらの例において、.crt と .key ファイル拡張子を使います。これは、様々なファイルとの混乱を避ける、個人的な方法です。Apache を使うなら、好きな拡張子を使えますし、あるいは拡張子なしにもできます。
セキュアなヴァーチャルホストは全て、通常は httpd.conf ファイルの末尾に配置される、<IfDefine SSL> と </IfDefine> に包含される必要があります。
セキュアなヴァーチャルホストの例です -
<VirtualHost 172.18.116.42:443>
DocumentRoot /etc/httpd/htdocs
ServerName www.somewhere.com
ServerAdmin someone@somewhere.com
ErrorLog /etc/httpd/logs/error_log
TransferLog /etc/httpd/logs/access_log
SSLEngine on
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
SSLCACertificateFile /etc/httpd/conf/ssl.crt/ca-bundle.crt
<Files ~ ".(cgi|shtml)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/etc/httpd/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog /etc/httpd/logs/ssl_request_log
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"
</VirtualHost>
SSL について最も重要なディレクティブは、SSLEngine on, SSLCertificateFile, SSLCertificateKeyFile, それから多くの場合で SSLCACertificateFile です。
SSL Engine
"SSLEngine on"- これは、SSL を開始するための ModSSL コマンドです。
SSLCertificateFile
SSLCertificateFile は、Apache に証明書ファイルの在処と、それがなんという名前なのかを指示します。上の例では、"server.crt" が証明書ファイル名として示されています。これは、Apache と一緒に ModSSL を設定した時に追加されるデフォルトです。個人的には、デフォルトの名前を使うことはお勧めしません。面倒なのをこらえて、証明書にサーバ名.crt (ドメイン名.crt) と名付けてください。同じように、デフォルトの /etc/httpd/conf/ssl.crt や /usr/local/apache/conf/ssl.crt とは別のディレクトリを使うこともできます。
SSLCertificateKeyFile
SSLCertificateKeyFile は、Apache に秘密鍵の名前とその在処を指示します。ここで指定されたディレクトリは root のみが読み/書き権限を持っている必要があります。他には誰もこのディレクトリにアクセスするべきではありません。
SSLCACertificateFile
SSLCACertificateFile ディレクティブは、Apache に中間証明書の場所を指示します。このディレクティブは、使用している CA によって必要だったり不必要だったりします。この証明書が本質的に信頼の輪となります。
中間証明書 - 証明書発行機関は、あなたとほとんど同じ方法で証明書を得ます。これは、中間証明書として知られています。これは、基本的には中間証明書の所持者が、いうものです。 ウェブブラウザは、各リリースごとに更新される、"信頼できる" 証明発行機関のリストを持っています。証明書発行機関が全く新しいなら、その中間証明書は、ブラウザの信頼できる CA リストには入っていないでしょう。ほとんどの人が自分のブラウザをそう頻繁にアップデートしたりしないという事実をこれと合わせると、こうなります- CA が自動的に信頼できるものとして認識されるには、数年かかります。解決策は、SSLCACertificateFile ディレクティブを使って、サーバに中間証明書をインストールすることです。たいてい、"信頼された" CA は中間証明書を発行しています。もしそうでなければ、SSLCertificateChainFile ディレクティブを使わねばならないかも知れませんが、これはまずないことです。
SSL をサポートするためには、Apache は追加の API モジュールを使うように設定される必要があります。多くの SSL ソフトウェアパッケージが利用できます。私の例では、ModSSL と OpenSSL 用に設定された Apache を元にしています。これらのプロダクトをサポートする数え切れないくらいのメーリングリストやニュースグループがあります。 Apache ウェブサーバを元にしているいくつかの商用 SSL パッケージにも、これらの手引きが有用だと思うかもしれません。
いくつか頭に入れておくべきことがあります - 同じサーバに複数のヴァーチャルホストをたてることができます。同じ IP アドレスで、名前ベースのヴァーチャルホストを多数たてることができます。同じ IP アドレスで、名前ベースのヴァーチャルホストを多数と、セキュアなヴァーチャルホストを 1 つたてることもできます。ただし - 同じ IP アドレスで、複数のセキュアなヴァーチャルホストをたてることはできません。多くの人がこう訊ねるでしょう- 何故? と。答えはこうです - SSL はアプリケーション層の下で機能します。名前ベースのホストは、アプリケーション層までは定義されていません。
特に、同じ SOCKET (IP アドレス + ポート) について、複数のセキュアなヴァーチャルホストをたてることはできません。デフォルトでは、セキュアなホストはポート 443 を使います。ヴァーチャルホストが同じ IP アドレスで異なるポート番号を使うことで、別のソケットを作成するように設定を変更することはできます。この方法には数多くの不都合があります。一番明確な不都合は、デフォルトポートを使っていない場合、セキュアサイトへのアクセスにおいて、URL にポート番号を含めなくてはならないことです。
例えば:
* デフォルトポートを使うサイト、www.something.com は、https://www.something.com でアクセスできます
* ポート 8888 を使うサイトでは、https://www.something.com:8888 でアクセスできます。
もう一つの不都合は、たくさんのポートを使うと、ポートを嗅ぎまわるハッカーにより機会を与えることになる、ということです。最後に、選んだポートが何か他で使われていると、衝突問題が発生することになります。
4.1 セキュアなヴァーチャルホストの定義
ヴァーチャルホストの設置は、全く簡単です。セキュアなヴァーチャルホストを設定する基本を、検討していきます。
これらの例において、.crt と .key ファイル拡張子を使います。これは、様々なファイルとの混乱を避ける、個人的な方法です。Apache を使うなら、好きな拡張子を使えますし、あるいは拡張子なしにもできます。
セキュアなヴァーチャルホストは全て、通常は httpd.conf ファイルの末尾に配置される、<IfDefine SSL> と </IfDefine> に包含される必要があります。
セキュアなヴァーチャルホストの例です -
<VirtualHost 172.18.116.42:443>
DocumentRoot /etc/httpd/htdocs
ServerName www.somewhere.com
ServerAdmin someone@somewhere.com
ErrorLog /etc/httpd/logs/error_log
TransferLog /etc/httpd/logs/access_log
SSLEngine on
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
SSLCACertificateFile /etc/httpd/conf/ssl.crt/ca-bundle.crt
<Files ~ ".(cgi|shtml)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/etc/httpd/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog /etc/httpd/logs/ssl_request_log
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"
</VirtualHost>
SSL について最も重要なディレクティブは、SSLEngine on, SSLCertificateFile, SSLCertificateKeyFile, それから多くの場合で SSLCACertificateFile です。
SSL Engine
"SSLEngine on"- これは、SSL を開始するための ModSSL コマンドです。
SSLCertificateFile
SSLCertificateFile は、Apache に証明書ファイルの在処と、それがなんという名前なのかを指示します。上の例では、"server.crt" が証明書ファイル名として示されています。これは、Apache と一緒に ModSSL を設定した時に追加されるデフォルトです。個人的には、デフォルトの名前を使うことはお勧めしません。面倒なのをこらえて、証明書にサーバ名.crt (ドメイン名.crt) と名付けてください。同じように、デフォルトの /etc/httpd/conf/ssl.crt や /usr/local/apache/conf/ssl.crt とは別のディレクトリを使うこともできます。
SSLCertificateKeyFile
SSLCertificateKeyFile は、Apache に秘密鍵の名前とその在処を指示します。ここで指定されたディレクトリは root のみが読み/書き権限を持っている必要があります。他には誰もこのディレクトリにアクセスするべきではありません。
SSLCACertificateFile
SSLCACertificateFile ディレクティブは、Apache に中間証明書の場所を指示します。このディレクティブは、使用している CA によって必要だったり不必要だったりします。この証明書が本質的に信頼の輪となります。
中間証明書 - 証明書発行機関は、あなたとほとんど同じ方法で証明書を得ます。これは、中間証明書として知られています。これは、基本的には中間証明書の所持者が、いうものです。 ウェブブラウザは、各リリースごとに更新される、"信頼できる" 証明発行機関のリストを持っています。証明書発行機関が全く新しいなら、その中間証明書は、ブラウザの信頼できる CA リストには入っていないでしょう。ほとんどの人が自分のブラウザをそう頻繁にアップデートしたりしないという事実をこれと合わせると、こうなります- CA が自動的に信頼できるものとして認識されるには、数年かかります。解決策は、SSLCACertificateFile ディレクティブを使って、サーバに中間証明書をインストールすることです。たいてい、"信頼された" CA は中間証明書を発行しています。もしそうでなければ、SSLCertificateChainFile ディレクティブを使わねばならないかも知れませんが、これはまずないことです。