4. FreeBSD 10.4 RELEASE - apache24 - SSL

 
 apache24 には SSL の仕掛けが標準で梱包されていますので、設定を行うだけで SSL を有効にすることが可能です。(ports インストール時のオプションで「SSL」にチェックがはいっていること)
4.1 認証ファイルの作成
4.2 コンフィグレーションファイルの設定
4.3 クライアント用証明書のコピーとインストール
4.4 サーバの再起動

4.1 認証ファイルの作成

 SSL を有効にする手順の最初に認証ファイルを作成します。認証ファイルがないと、SSL の意味がありません。  オープンなサイトでは、認証証明書のファイルを作成して、認証証明書発行機関に署名してもらう必要がありますが、ここでは、プライベートな、SSL サイトを立ち上げる方法について記述します。  以下の手順で進めていくと、クライアントマシンに証明書がなければ、開けないというサイトになります。  クライアント証明書を、手渡しでしか渡さないように決めておけば、仲間内以外には、まず閲覧できないサイトになります。  認証ファイルの作成に関しては「メンテナンス/SSL」の項をご参照ください。  上記の手順のうち、自前で認証ファイルを作成すると /etc/ssl/demoCA の配下に以下のファイルができているはずです。

|-- cacert.pem
|-- cert.pem			← ①CA証明書
|-- crl
|-- index.txt
|-- index.txt.attr
|-- index.txt.old
|-- newcerts
|   |-- 01.pem
|   `-- user.pfx		← ④クライアント認証ファイル
|-- newkey.pem			← ②ホストキー
|-- newreq.pem
|-- nokey.pem			← ③パスワードなしホストキー
|-- private
|   `-- cakey.pem
|-- serial
`-- serial.old

4.2 コンフィグレーションファイルの設定

 /usr/local/etc/apache24/httpd.conf の以下の箇所の先頭の「#」を削除します。それぞれの行の間は省略しています。

#LoadModule ssl_module libexec/apache24/mod_ssl.so

#LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so

#Include etc/apache24/extra/httpd-ssl.conf
 /usr/local/etc/apache24/extra/httpd-ssl.conf を以下のように編集します。

AddType application/x-x509-ca-cert .crt .cer "← .cer を加える"

DocumentRoot "/usr/local/www/apache24/data"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog "/var/log/httpd-error.log"
TransferLog "/var/log/httpd-access.log"
 の内容は、サーバの設定に合わせて適宜変えます。  「4.1 認証ファイルの作成」で作成したもののうち、必要なものを特定のディレクトリにコピーします。

> mkdir /hogehoge
> cp /etc/ssl/demoCA/cert.pem   /hogehoge/cert.pem
> cp /etc/ssl/demoCA/nokey.pem  /hogehoge/nokey.pem
> cp /etc/ssl/demoCA/cacert.pem /hogehoge/cacert.pem
 /usr/local/etc/apache24/extra/httpd-ssl.conf を以下のように編集します。

SSLCertificateFile    "/hogehoge/cert.pem"
SSLCertificateKeyFile "/hogehoge/nokey.pem"
SSLCACertificateFile  "/hogehoge/cacert.pem"
 /usr/local/etc/apache24/Includes/ 配下に適切な名前のコンフィグレーションファイルを作成して、https でアクセスさせたいディレクトリを以下のように記述します。

SSLVerifyClient none
 これは、クライアントに対して何を確認するかを示します。  指定できる数字には、0~3 までの範囲がありそれぞれ下記の意味を持ちます。
0 クライアントに対して何も確認しない。
1 クライアントに対して証明書の提示を要求する。  クライアントは証明書を提示しなくてもサイトを閲覧できる。  もし認証が提示されれば、サーバに、合法的な認証局(CA)が発行した証明書が格納されていなければならない。
2 クライアントに合法的な証明書の提示を要求する。  クライアントは合法的な証明書を提示しなければサイトを閲覧できない。
3 クライアントに対して証明書の提示を要求する。  クライアントは証明書を提示しなくてもサイトを閲覧できる。  もし認証が提示されても、サーバに格納されている証明書は合法的な認証局(CA)が発行した証明書でなくてもよい。
デフォルトは何も確認しないようにしておき、各ディレクトリごとにセキュリティをかける強さによって 1~3 を使い分けるようにします。  以降、仮に /usr/local/www/https 以下を、https のドキュメントルートとすると

<Directory /usr/local/www/https>
    SSLRequireSSL
    SSLVerifyClient require
    AllowOverride None
    Options +Includes -Indexes
    Order allow,deny
    Allow from all
</Directory>
 といった具合に記述します。(ここは、先に編集した、/usr/local/etc/apache24/extra/httpd-ssl.conf のドキュメントルートと合わせる必要があります)

4.3 クライアント用証明書のコピーとインストール

 「4.1 認証ファイルの作成」で作成した「④クライアント認証ファイル」をクライアントのマシンにインストールしておかないと、作成した SSL のサイトを閲覧することはできません。  クライアント用証明書をサーバよりクライアントのマシンにコピーします。  クライアントのマシンにコピーしたら、セキュリティの観念からクライアント証明書ファイルは、サーバ上から削除しておくのが賢明です。  次に、クライアントマシンのブラウザへのインストールです。Mozilla Firefox の場合は以下のようにインストールします。  Firefox を開きます。  「ツール」→「オプション」→「詳細」→「暗号化」→「証明書を表示」→「あなたの証明書」→「インポート」で証明書ファイルを開きます。  パスワード入力画面が表れますので、クライアント証明書用のパスワードを入力してください。  これで、クライアント証明書のインストールは完了です。

4.4 サーバの再起動

 以下のコマンドで設定に誤りがないことを確認したら

> /usr/local/etc/rc.d/apache24 configtest

> /usr/local/etc/rc.d/apache24 restart
 でサーバを再起動します。  SSL のサイトを開くには、https://hogehoge.jp の https を間違えないようにしてください。  SSL が有効になっているかどうかは、Firefox ならば、ロケーションを表示しているバーの先頭に、鍵のマークがついているかどうかでわかります。  鍵マークがついていれば、SSL が有効になっていることを示しており、サーバとクライアントの通信は暗号化されています。  「メンテナンス/SSL」の認証ファイルの作成の手順をを行えば、新しい証明書やキーファイルを作り直すことができます。  そうやって、定期的に証明書やキーを作り変えておけば、万が一クラッカーに解読されても、作り変えた時点でまたクラッカーは解読作業を行わなければなりませんので、セキュリティ上一層強固なものとなるでしょう。