2013年2月7日木曜日

JettyでSSLを有効にする方法

あちこちら探して頑張ったけど、混乱したのでメモ

Jettyは最近だと、6、7、8あたりが広く使われていそう。
個人的にはいまだに6なので6でのやりかた。基本的には変化してないことを祈るばかり。
Javaのキーストアとか詳しくない人でもわかるように。


============================================================


◎SSL証明書の導入について

秘密鍵とCSR(CSR = 署名リクエスト)を証明機関に送って。サーバー証明書、中間証明書を受け取る。 証明書と秘密鍵の組がインストールされればSSL通信を行うことができる。
Apacheの場合はmod_sslをインストールして、OPENSSLで作った、秘密鍵とCSRを送れば上記が送られてくるので、インストールしてパスをとおしてあげればいい。


============================================================


◎結局のところJettyではなにをすればいいか?

同様に秘密鍵と、必要な証明書をJettyの参照できる妥当な場所にインストールすればよい。ただし、証明書に関して言うと、以下のようなチェーン構造になってることを認識しておいた方がいい。

ルート証明書 = 中間証明書 = サーバ証明書


============================================================


◎keytoolとkeystoreについて

ではどこにインストールすればよいか? これはJava特有の事情でkeystoreと呼ばれるファイルにインストールしてまとめておく必要がある。Javaにはkeytoolとよばれるツールが存在し。このファイルを作成したり、証明書をインストールしたり、チェックしたりする機能がある。

 keystoreファイルにはパスワードがかかっており、これはJavaの標準では'changeit'。Jettyの場合は特有で 'storepwd'となっている。またこのコマンドをつかって、CSRや秘密鍵を作ることもできるが、OPENSSLで作ったものでもその後の作業は可能なので、両方使ってるのならOPENSSLで作業して証明書と秘密鍵のインストールにkeytoolを使えばいい。


============================================================


◎keystoreへの証明書や秘密鍵のインストールについて

上記が理解できていれば、下記の内容で作業できるはず
https://jp.globalsign.com/support/server/05.html

Jetty6の場合はetc/binにkeystoreが入っているので、まずこれを消す

$(jdk)/binにパスがとおっていると、keytoolコマンドが実行できるはず。
コマンドは上のURLからの引き写しだが以下のとおり。

keytool -import -alias root -keystore ./server.keystore -file rootcacert.cer

ルート⇒中間⇒サーバ(自分)の各ファイルを登録する。


============================================================


◎Jettyの設定とSSLの起動について

Jetty6の場合jetty-ssl.xmlに設定が書いてある。$(jetty)/etc/keystoreを使う場合、キーストアの設定は変更しなくてよい。パスワードの欄には、md5やらOBFで暗号化するのがよいと書いてあるが、とりあえずそのままでも動くのでそのまま書けばよい。


============================================================


◎Jettyにおいて設定ファイルを読み込んでの起動について

jetty.sh startを呼ぶとjetty.xmlが読み込まれて実行されるのでjetty-ssl.xmlの中をコピーしてjetty.xmlに書き込んで、実行するのが結果的には楽。
ただし以下のようなコマンドで複数の設定ファイルを呼び出して起動することもできる。

jetty.sh start jetty jetty-ssl

============================================================

参考サイト :

https://jp.globalsign.com/support/server/05.html
http://d.hatena.ne.jp/yukinkster/20110828/1314563738