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