Ubuntu11.10 + Play framework1.2.4 + Apache2連携(SSL)
-- 環境
-- Ubuntu 11.10
-- Play framework 1.2.4
-- Apache2


前回 play framework1.2.4でSSL通信(X509証明書) の続きとして、
今回は、Apache2とPlay framework1.2.4連携+SSL通信をやってみます。

※Apache2と連携してのSSL通信では、Play framework側では何もしません。
 Apache2の方でSSLの設定をしてVirtualHostの設定を入れれば完了になります。

※Apache2とPlay frameworkの連携や、SSLの連携について検索してもあまり出てこないのは、
 アプリケーションフレームワーク毎にいちいち設定が変わらないからなんでしょうね。

※Apache2+SSLの設定は以下の記事を参考にさせて頂きました。
 Ubuntu 11.04 Apache+SSL « 書きかけの技術書+
 http://kakikake2.wordpress.com/2011/05/14/ubuntu-11-04-apache-ssl/


## Apache2にSSLをインストール
$ sudo a2enmod ssl
※/etc/apache2/mods-enabled ディレクトリに、ssl.confとssl.loadのシンボリックリンクを作成してくれるっぽい


## Apache2にSSLフォルダ作成
$ sudo mkdir /etc/apache2/ssl/


## 証明書、秘密鍵の作成
$ sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem

確認画面にIPアドレスもしくはFQDNを入力
※FQDN(www.hogehoge.co.jpのような省略しないドメイン名)

# make-ssl-cert は、ubuntuやdebianに付いて来る便利なスクリプトのようです。
## 証明書、秘密鍵は前回の記事 play framework1.2.4でSSL通信(X509証明書) で作った物を使うこともできます。
## 最後の方にその設定を追加しました。

## サンプルの設定ファイルをコピーして展開します。
$ sudo cp -p /usr/share/doc/apache2.2-common/examples/apache2/extra/httpd-ssl.conf.gz /etc/apache2/sites-available/
$ sudo gunzip /etc/apache2/sites-available/httpd-ssl.conf.gz
※こんな深いところにサンプルの設定ファイルがあるんですねぇ


## 設定ファイル編集
$ sudo nano /etc/apache2/sites-available/httpd-ssl.conf


## 設定ファイルを以下のように編集します

# コメントアウト
#Listen 443
※よく分からないけど、コメントアウトしないとapache2再起動失敗する


# ↓のディレクティブの中の以下の箇所を修正
<VirtualHost _default_:443>


# play frameworkとの連携に使った設定を追加
ProxyPreserveHost On
ProxyPass /yabee/ http://127.0.0.1:9001/
ProxyPassReverse /yabee/ http://127.0.0.1:9001/
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/


# play frameworkと連携させるのでドキュメントルートはコメントアウト
#DocumentRoot "/usr/share/apache2/default-site/htdocs"


# SSL証明書と秘密鍵に、作成したファイルを設定
# 証明書
SSLCertificateFile /etc/apache2/ssl/apache.pem
# 秘密鍵
SSLCertificateKeyFile /etc/apache2/ssl/apache.pem

※make-ssl-certで作成した証明書には、証明書と秘密鍵が両方記載されているので、
 どちらも同じファイルを設定します。

## 設定ファイル編集ここまで



## default-ssl を登録している場合は解除します。
$ sudo a2dissite default-ssl


## サイトを登録します。
$ sudo a2ensite httpd-ssl.conf
※前回は/etc/apache2/sites-enabled ディレクトリに手動でシンボリックリンクを張っていましたが
 上記のコマンド二種で、シンボリックリンクの作成/削除をしてくれるようです。


## Play frameworkを起動します。
$ play start /home/user/play/yabe
$ play start /home/user/play/yabee


## Apache2を再起動します。
$ sudo service apache2 restart

以下のアドレスにアクセスすると、証明書が不正だと怒られますが
Apache2を通してSSL通信できているようです。
https://192.168.11.6/
https://192.168.11.6/yabee/


## 前回の記事 play framework1.2.4でSSL通信(X509証明書) で作成した証明書と秘密鍵の再利用。

## 設定ファイル編集
$ sudo nano /etc/apache2/sites-available/httpd-ssl.conf

# SSL証明書と秘密鍵に、前回作成したファイルを設定
# 証明書
SSLCertificateFile "/home/user/play/yabe/host.cert"
# 秘密鍵
SSLCertificateKeyFile "/home/user/play/yabe/host.key"

## Apache2を再起動
$ sudo service apache2 restart

## おまけ:Play frameworkの公式ドキュメントによる秘密鍵と証明書の作成コマンド
## 秘密鍵と証明書の作成
$ cd /home/user/play/yabe
$ openssl genrsa 1024 > host.key
$ openssl req -new -x509 -nodes -sha1 -days 365 -key host.key > host.cert