しいしせねっとわーく
[Javaのセキュリティ] [SSL/PKI]
[Tomcat] [Tomcat 5.5のインストール] [mod_jk2]

TomcatでSSL/TLSを使う

SSLを使うには、Apacheと連携する場合はTomcat側は何もしなくていいです。Tomcat単体でSSL/TLSを使う場合には、鍵と証明書から用意します。デフォルトではTLSを使います。IBMのJDKの場合はSSLにした方がいいようです。

ポートはデフォルトで8443になっていますが、443で動かすにはroot で動かしたりいろいろと必要です。

鍵の生成

SSLを使うには、鍵のペアを生成します。鍵は私有鍵(秘密鍵)、公開鍵(自己署名証明書)共にJava のkeystoreに保存されます。Tomcatで使う鍵は、alias名をtomcatにします。KeyStoreと鍵のパスワードを両方changeitにすると、Tomcat側でほとんど設定が不要です。

$ keytool -genkey -alias tomcat -keyalg RSA
キーストアのパスワードを入力してください: changeit
姓名を入力してください。
[Unknown]: siisise.net

姓名と書かれているが、Common Name(CN)として登録される SSL/TLSで使うドメイン名を入力する。

組織単位名を入力してください。
[Unknown]: any

Organization Unit (OU) 組織単位名。なんでもよい。部署名とか。複数サーバで同じサーバ名を使う場合は、それぞれ別の名前にする。

組織名を入力してください。
[Unknown]: Siisise Net

Organization Name (O) として登録される。 CAに認証してもらうときはドメインのwhoisに登録されている所有者の組織名と同じにする。個人の場合は個人名にする。

都市名または地域名を入力してください。
[Unknown]: Shibuya-ku

L 市区町村

州名または地方名を入力してください。
[Unknown]: 東京都

ST 州、都道府県

この単位に該当する 2 文字の国番号を入力してください。
[Unknown]: JP

C 国番号

こんな感じでしょうか。ここでは漢字など使ってみていますが、申請するときは英数字だけにしてください。確認が終わると、keystoreの中に秘密鍵と自己署名証明書ができています。

$ keytool -certreq -alias tomcat -file server.csr

などとすると、server.csr に署名要求ファイル(CSR)ができあがります。-keyalg RSAも付けた方がいいのかな? OpenSSLで生成するCSRとは改行位置がちょっと違うので、だめなようなら変換、という手もあるかもしれません。まぁ、大丈夫でしょう。変換する場合は

$ openssl req -in server.csr -out new.csr

でいいかもしれません。

参考

Tomcatの設定

server.xml の SSLの設定の<Connector>のコメントを外すだけです。port 8443 で使えるようになります。port 443で使うには、rootでTomcatを・・・とかいう制限に注意です。

参考

SSLをApache経由で使う

この場合は、Tomcat側ではmod_jkやmod_jk2用のajp13を使わなければなりません。WARPプロトコルは使えないかも。ajp12ももちろん駄目です。