Jettyメモ

これまでの開発で使ってたJettyをEC2上のステージング環境に反映します。
認証やSSLの設定で諸々いじったので、備忘です。
調べながら、設定変更してるから、結局どこを変更して、出来たかがわかんね
とかならないようにちゃんとまとめないとなー。

start.ini
 →jetty-ssl.xmlのコメント解除
 →jetty-requestlog.xmlのコメント解除

jetty.xml
 →BASIC認証の為のRealmの設定(HashLoginService)
  BASIC認証は、もうやめる予定ですが。

jetty-ssl.xml(デフォルトを残したいので、独自のファイル)
 →SSLの設定。ほぼデフォルトのまま。keyStorePasswordの変更ぐらい。

keystore(デフォルトを残したいので、独自のファイル)
 →SSLのkeystore

realm.properties(デフォルトを残したいので、独自のファイル)
 →BASIC認証のrealmファイル

web.xml
 →security-constraintの設定。
  認証方式、SSL要求、DefaultServletの設定。
  いやー、useFileMappedBufferハマったなー。

あとは、JavaやらScalaやらのclass配置します。
まだサーバが1台(さみしっ)だから、あれだけど、
ここらへん自動デプロイとか考えないとな。Jenkins勉強したい。

あと設定って、jetty.xmlに全て書けそうな気がするんですが、
何を外に出す(外部xml)かとかもちゃんとしないと、分かりづらくなりそうです。

■ポート
Jettyは、80番で起動するには、管理者権限が必要なのですが、
セキュリティ上、rootでは起動したくないので、
サボりですが、iptables使って、80→8080にリダイレクトしてました。
とりあえず、これと同じで、SSLの場合も443を8443にリダイレクトしたいと思います。
(参考:http://blog.fukaoi.org/2010/03/11/jetty-port-80)
実際、何もしないと、
https://hoge.com
にアクセス出来ません。
https://hoge:8443.com
は、OK。

[hoge@ec2]$ sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
[hoge@ec2]$ sudo /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[hoge@ec2]$ sudo /etc/init.d/iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: nat             [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

確認

[hoge@ec2]$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere            tcp dpt:https redir ports 8443
REDIRECT   tcp  --  anywhere             anywhere            tcp dpt:http redir ports 8080

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

確認コマンドを、iptables -Lで、
なんで出ないの?とか思ってしまった。natですよ。nat。
EC2のセキュリティグループも80と443だけにしよう。

確認。証明書のエラーもなし。httpsで443でいける。
復元まではしてないけど、Wiresharkで、SSLの暗号化も確認出来た。