mod_sslの設定

SSL暗号化通信に必要なもの

ApacheSSL通信を実現するためには、サーバ上に秘密鍵サーバ証明書を用意する必要がある。
サーバ証明書には以下のものが含まれる。

  • サーバの情報
  • サーバの公開鍵
  • 署名

SSL通信を行う時にこのサーバ証明書をクライアント側に渡し、サーバの秘密鍵とクライアントに渡した公開鍵を用いて暗号化通信を行う。
サーバ証明書に含まれる署名は、認証局認証局秘密鍵で暗号化したものであり、クライアントは認証局の公開鍵で復号することでこの証明書を信頼する。有名な認証局の公開鍵は元からブラウザに入っている。署名を復号できなくてもSSL通信を続けることは可能だがブラウザが警告を出すため、商用サイトなどでは認証局に署名してもらうことが望ましい。
どのように署名するかによってサーバ証明書の作成方法に選択肢がある。

  1. 有名な認証局に署名してもらう。
  2. 自分で認証局を立てて、署名する。
  3. 認証局を立てずに自分で署名する。

2または3の方法で署名した場合、いずれも信頼できない署名なのでブラウザが警告を出すが、2の場合は自分が立てた認証局の公開鍵をクライアントに配布して各々ブラウザにインストールしてもらうことで警告を出さないように出来る。社内での運用など、公開鍵インストールの手間が許される環境では有用。
今回は3の方法で署名する。

秘密鍵サーバ証明書の作成


# mkdir /usr/local/httpd/conf/extra/ssl
# cd /usr/local/httpd/conf/extra/ssl
# /usr/local/openssl/bin/openssl req -new -nodes -keyout server.key -out server.csr
→server.key(サーバの秘密鍵)とserver.csr(署名要求)が作成される。
# /usr/local/openssl/bin/openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
→server.crt(サーバ証明書)が作成される。
秘密鍵と署名要求を作成してから、署名要求に自分で署名をしてサーバ証明書を作成している。
"-nodes"は秘密鍵にパスワードを付けない指定。パスワードがかかっているとApacheを起動するたびにパスワードを要求されて面倒くさい。
ssl設定ファイルを読み込むために、httpd.confの以下の行をコメント解除する。

# Include conf/extra/httpd-ssl.conf

extra/httpd-ssl.confに秘密鍵サーバ証明書の保存場所を指定する。

SSLCertificateFile "/usr/local/httpd-2.2.9/conf/extra/ssl/server.crt"
SSLCertificateKeyFile "/usr/local/httpd-2.2.9/conf/extra/ssl/server.key"