$Id: readme,v 1.8.2.21 2001/07/17 14:07:01 marcsaeg Exp $ リリースノート: ======================= TOMCAT バージョン 3.2.3 ======================= 0. 目次: 1. はじめに 2. Tomact のインストールと実行 3. Tomcat を使用したアプリケーションの開発 4. Tomcat: 過去、現在、そして未来 5. このリリースの新機能 6. 既知のバグと問題点 7. アップデートでの修正と追加 ============================================================================= 1. はじめに Tomcat は、Servletコンテナと JavaServer Pages(tm)の実装の一つです。単独で動作 させたり、以下のような有名な Web サーバと一緒に動作させること ができます。 - Apache, バージョン 1.3 以降 - Microsoft Internet Information Server, バージョン 4.0 以降 - Microsoft Personal Web Server, バージョン 4.0 以降 - Netscape Enterprise Server, バージョン 3.0 以降 使用許諾契約書(トップディレクトリにある LICENSE ファイルです)を読んでください 。これはこのリリースに含まれるすべてのソフトウェアに適用されます。 Tomcat 3.2.3 はセキュリティアップデートリリースです。web.xml 内の で保護されているリソースへのアクセスができる可能性のある セキュリティホールが、このリリースで修正されています。Tomcat 3.2.2 リリース後に 発見されたその他のバグの修正も含まれています。このリリースで修正されたバグは第7 章に書かれています。 以前のバージョンの Tomcat のユーザは、このリリースに更新することを強く推奨しま す。設定ファイルへの変更は何も必要ありません。3.2.x の tomcat/lib ディレクトリ にこのリリースの JAR ファイルを単純にコピーするだけで、現在インストール済みの Tomcat がアップグレードされるでしょう。 ============================================================================= 2. Tomcat のインストールと実行 Tomcat には、JRE 1.1 以降に準拠している Java Runtime Environment が必要です。 これには Java2 プラットフォームシステムも含まれます。アプリケーションを開発し ようとする場合には、Java Development Kit 1.1 以降の環境に含まれるような Java コンパイラが必要です。これには Java2 に準拠した JDK も含まれます。 Tomcat のインストールと実行についての詳しい情報は、Tomcat の配布物を解凍した ディレクトリの下にある "doc/uguide/tomcat_ug.html" をブラウザでご覧ください。 (訳注: 日本語版は、"doc-jp/uguide/tomcat_ug.html"です。) ============================================================================= 3. Tomcat を使用したアプリケーションの開発 Tomcat を使用したServletや JSP ベースのアプリケーションを開発する際の補足情報 は、アプリケーション開発者用のガイドに記されています。Tomcat の配布物を解凍し たディレクトリの下にある "doc/appdev/index.html" をブラウザでご覧ください。 (訳注: 日本語版は、"doc-ja/appdev/index.html"です。) ============================================================================= 4. TOMCAT: 過去、現在、そして未来 - バージョン 3.0 (1999年12月リリース)が Tomcat の最初のリリースでした。Java ServletとJSPの仕様の実装に加え、最小限の Apache コネクタを持っていました。 - Tomcat 3.1 (2000年4月リリース) で、Apache との接続を改善し、Netscape と IIS Webサーバのコネクタをサポートしました。また、WAR ファイルのサポート 、Servletの自動再読込、そして JSP ページを事前にコンパイルしておくためのコ マンドラインツール(jspc)を追加しました。最後に、バージョン 3.1では、コード の再構成にも焦点を当てています。(モジュール化、クリーンアッ プ、コード構成の 見直し、使用されていないコードの削除、J2EE仕様のコード の分離) - Tomcat 3.2 は、まずパフォーマンスのチューンアップをおこないましたが、他にも いくつかの新しい機能を追加されました。 - Tomcat 3.2.1 はセキュリティのための更新でした。詳細は 7.3章を見てください。 - Tomcat 3.2.2 はバグフィックスリリースでした。7.1章にこのバージョンで修正され た問題点が述べられています。 - Tomcat 3.2.3 はセキュリティリリースです。 - Tomcat 4.0 は、Tomcat 3.xとは独立して開発しています。Catalina アーキテクチ ャに基づいており、Tomcat 3.x のアーキテクチャとはかなり違っています。さらに 、Tomcat 4.0 は Servlet 2.3 と JSP 1.2 仕様のリファレンス実装を目指していま す。 ============================================================================= 5. このリリースでの新機能 5.1 Docbase とファイルベースのローカライゼーション Tomcat 3.2.2 は、自動的にクライアントとサーバのロケールに基づいて、要求をロー カライズされたリソースへマッピングする手段をサポートします。ローカライズされ たコンテントは一つのロケールにつき一つのディレクトリを使用する(Docbase)、また は、ロケールを特定するファイル名を付けて一つのディレクトリに入れる(ファイルベ ース)ことにより構成されます。 この機能の詳しい説明は doc/tomcat-localization-how.html にあります。 ============================================================================= 6. 既知のバグと問題点 6.1 Windows 環境下での Document Root としての絶対パスの使用 TOMCAT_HOME/conf/server.xml ファイル内で、docBase 属性に相対パス名か絶対パス 名を宣言することができます。Windows システムで絶対パス名を使用したい場合には 、このプラットフォームでの Java の絶対パス名の定義に従って、ドライブ文字を含 めなければなりません。 良い例: c:\mydirectory\mydocbase 良い例: c:/mydirectory/mydocbase 悪い例: \mydirectory\mydocbase 悪い例: /mydirectory/mydocbase Unix 環境下では、絶対パスはスラッシュ('/')文字で始まらなければなりません。 6.2 コンテナ管理によるセキュリティ Tomcat 3.2 は、Servlet API仕様書 バージョン2.2 の11章で述べているコンテナ管理 によるセキュリティを実装しています。この実装に関しては、以下の記述に目を通し てください。 - BASIC認証とフォームベースの認証は正常に動作するはずです。これに関するバグを 見つけたら に報告してください。 テストアプリケーションは下のURLで定義される保護領域を持っています。 http://localhost:8080/examples/jsp/security/protected これは $TOMCAT_HOME/conf/tomcat-users.xml で適切な権限を与えるように定 義されているユーザであれば、誰でもアクセスできます。デフォルトではフォー ムベースの認証が使われています。 しかし、試してみたいと思う人のために Basic認証の設定もコメントアウトした状態で書かれています。 警告: Basic 認証は、インターネットやその他の安全でないネットワーク間で 使用する一般的なセキュリティとしては適していません。なぜならば、リクエ スト毎にユーザ名とパスワードはエンコードされても暗号化されずに送信され るからです。 - DIGEST 認証や HTTPS クライアント認証(例. SSL)はこのリリースではサポー トされていません。 6.3 Welcome ファイルにおける RequestDispatcher.include() の使用 [Bug Report #160] 下記のやり方が間違った内容のレスポンスを生じさせます: - ドキュメントルート以下にサブディレクトリをつくっている。 (例 "subdir/"). - URL でこのサブディレクトリをリクエストした時に表示 するように設定した welcome ファイルが、このサブデ ィレクトリにある。(例 "index.html") - RequestDispatcher で "/subdir" もしくは "/subdir/" をリクエストし、その中で include() を呼びだす。 "/subdir" もしくは "/subdir/" を で指定した時も、同じ問 題が起こる可能性があります。 回避方法は、RequestDispatcher に "/subdir/index.html" のように、あなた が表示したいファイルの完全な相対コンテキストパスを記述することです。 6.4 Servletの自動リロード Tomcat 3.2 は、( WEB-INF/classes ディレクトリや WEB-INF/lib ディレクト リにある JAR ファイルからロードされた)Servletクラスに対してリクエスト が来た時に、そのクラスが変更されていた場合には、自動的にリロードを行う 機能を含んでいます。この機能は実験的なものであり、完全に機能しないかも 知れません。特にリクエストするServlet以外のクラスを変更しても、クラス をリロードしません。 --これらのクラスの変更を反映させるためには、 Tomcatを再起動する必要があります。 "conf/server.xml" ファイルの 要素に reloadable="true"の属性 を加えることで、リロードを有効にすることができます。ただし、自動リロー ド機能は製品版アプリケーションにはお勧めできないことに注意してください。 なぜならば、これは実験的なものであり、リクエストごとに必要なチェックを 実行するために余計なオーバーヘッドがかかるからです。 6.5 Windows 95/98 での "Out of environment space" エラーの防止 このエラーは、デフォルトの環境変数用の容量が Tomcat を実行するために不 十分な場合によく起こります。ここでは、それを防止するいくつかの方法をい くつか書いておきます。 A. Tomcatを実行するために、MS-DOSプロンプトを使っている場合は、プログ ラム -> MS-DOS プロンプトを実行してください。タイトルバーの左にあ る MS-DOS アイコンを右クリックして、メニューの一番下にあるプロパティ を選択してください。MS-DOS プロンプトのプロパティダイアログで、メ モリータブを選択します。"Initial environment:"フィールドの中に、十 分な大きい数字を入力します。よくわからない場合は、3072 くらいで十 分です。OK をクリックして MS-DOS プロンプトウィンドウを閉じてくだ さい。プログラム -> MS-DOS プロンプトを再び実行して、Tomcat をイン ストールしたディレクトリに移動してください。まだ設定していな い場合は、JAVA_HOME 環境変数を設定してください。これで、"Out of environment space" エラーなしに、"bin\startup" と "bin\shutdown" で、Tomcat の実行と停止ができるはずです。 B. startup.batのようなバッチファイルをダブルクリックすることでTomcat を実行したい場合は、Windows Explorer でお望みのバッチファイルを右 クリックしてからプロパティを選択して、MS-DOS プロンプトのプロパティ ダイアログを開いてください。メモリータブを選んで、"Initial environment:" を上で書いたように設定します。プログラムタブの "Close on exit" も選択したいかもしれません。その後に、OK をクリック してください。これらの設定がおこなわれたショートカットが同じディレ クトリに同じ名前のバッチファイルとして作られるでしょう。これで、 "Out of environment space" エラーなしに、ショートカットやバッチファ イルをダブルクリックすることができるはずです。startup.bat と shutdown.bat をこの方式で実行したい場合には、それぞれのファイルについ て上記の設定を行う必要があります。さらにJAVA_HOMEも設定する必要があり ます。これは、autoexec.bat か startup.bat と shudown.bat ファイル自身に、"SET JAVA_HOME=JDK のパス" を追加すれ ばできます。 6.6 すべてのOS上でURLの大文字・小文字を区別するようになりました。 Tomcat 3.2 から、すべてのOS上でURLの大文字・小文字を区別するようになり ました。これは、大文字・小文字を区別しないファイルシステムを使っている WindowsなどのOSを含んでいます。 "non-portable"なWebアプリケーション、つまり大文字・小文字が一致してい ないアプリケーションは、大文字・小文字を区別しないOS上の Tomcat 3.1で は動作しますが、Tomcat 3.2では移植性に問題があることが明らかになるでしょ う。 これにより、一見正しく見えるURLが、実際には正しくないということが起こ り得ます。Windows Explorer では、MS-DOS 8.3フォーマットに従ったディレ クトリ名は、"フォーマットされた"名前を使用して表示されるかもしれません。 たとえば、"MYDIR"という名のディレクトリを、"Mydir"と表示するかもしれま せん。しかし、"http://localhost/mysite/Mydir/index.jsp" のようなURLで は、"File Not Found" を返すでしょう。なぜならば、正しいURLは "http://localhost/mysite/MYDIR/index.jsp" だからです。"not found"とな るような不思議なURLを見つけたら、大文字・小文字の間違いを確認してくだ さい。Windows Explorer のプロパティダイアログか、MS-DOS ウィンドウで、 ファイルとディレクトリ名の実際の大文字・小文字を確認してください。 IISのような大文字・小文字を区別しないWebサーバと組み合わせて、静的なコ ンテンツを提供するためTomcat を使用している場合には、さらに問題が起こ る可能性があります。Webサーバは、URLの大文字・小文字が間違っているよう な静的なページを提供することができます。しかし、その静的なページが Tomcat が提供するリソースへの相対リンクを含んでいる場合には、リンクを クリックした時に、Tomcatで大文字・小文字が間違っているために、リソース が見つからないというエラーが発生するでしょう。 6.7 生成されたWebコネクタ用の設定ファイル 起動時に、定義されたコンテクストを反映するために Tomcat は普通 "tomcat-apache.conf" のような設定ファイルを生成します。しかし、生成さ れたファイルは、Webアプリケーション配置記述ファイル(web.xml)内部のすべ ての設定を反映するわけではありません。Webサーバの設定ファイルの中に、 直接関連する設定をする必要があります。 これは Tomcat 3.2 のWebコネクタの設計の限界ですが、Tomcat 4.0では MOD_WARP コネクタを導入して対策する予定です。 6.8 フォームベースのログインの限界 で指定したページがセキュリティ制 限によって保護された領域にある場合には、Tomcat 3.2 はそれらを表示でき ません。この問題の影響としては、フォームベースのログインを使用している ときに、Webアプリケーションのすべてを保護するために "/*" というURLパター ンが使用できないことが挙げられます。 解決策としては、フォームログインページとエラーページをWebアプリケーショ ンのルートディレクトリに置き、他のすべてのページを、一つまたは複数のサ ブディレクトリ内に置き、そしてセキュリティ制限をサブディレクトリを保護 するように設定することです。 6.9 ドキュメントベースパスの限界 Tomcat 3.2 は、 ディレクティブ内では、以下のような SMB パスを サポートすることができません。 しかし、この方法はTomcat 3.1はサポートしていましたし、Tomcat 4.0もサポー トしています。回避方法は、"\\machine\share"にネットワークドライブを割 り当ててから、以下のようにコンテキストを定義することです。 "r:"が、shareを指すネットワークドライブです。 6.10 リソースパスが URL エスケープ列を含むことができない問題 javax.servlet.Context.getResource() と javax.servlet.Context.getResourceAsStream() に渡されるパスには %HH の形の URLエ スケープ文字列を含むことができません。URLエスケープ文字列を含むパスに対しては null が返されるでしょう。 6.11 AJP12 と SSL APJ12 プロトコルは安全なトランスポート(例 SSL)によるリクエストを判別する機構を 備えていません。Tomcat は 443 ポートに対するすべてのリクエストを安全なものとみ なし、URL スキームを HTTPS に設定します。他の全てのポートに対するリクエストは安 全でないものとみなし、URLスキーマを HTTP に設定するでしょう。AJP13 プロトコルに はこの問題はありません。 =============================================================================== 7. アップデートでの修正と追加 7.1 リリース 3.2.3 での修正と追加 この章はこのリリースで修正されたバグを明らかにします。 - web app の例への show source リンクが動作していませんでした。 (#372) - サーブレットリロード時のスレッド同期問題。 (#1628) - BufferedServletOutputStream の再利用で usingWriter がリセットされていません でした。 (#1802) - tomcat/lib 内の ZIP ファイルが tomcat.bat により自動的に CLASSPATH に追加さ れていませんでした。 (#1935) - サイン拡張問題により、ServletInputStream が EOF を返すのが早くなっていまし た。 (#1673, #1993) - RFC 2518 用の複数状態のコードがありませんでした。 (#2069) - エラーページが無いことにより、Tomcat が無限ループに入っていました。 (#2327) - JDBCRealm SQL 文が閉じられていませんでした。 (#2149) - AJP13 のメッセージバッファオーバーフローの潜在可能性。 (#1528) 7.2 Tomcat 3.2.3 で解決されたセキュリティの脆弱性 正規化されていない URI、例えば /examples/jsp/security//protected/index.jsp や /examples/jsp/../jsp/security/protected/index.jsp が web.xml 内で指定されたセキ ュリティ制約をバイパスしていました。 URI はコンテナを使用するより前に正規化されるようになりました。サーブレットは HttpServletRequest.getRequestURI() を呼ぶことで正規化されたパスを受け取ることが できるでしょう。これにより Servlet 2.3 仕様で定義された動作になることでしょう。 また、リクエスト URI 内での特殊文字の URL エンコーディングも禁止されるようにな りました。リクエスト URI が %25, %2E, %2F, %5c を含む場合は 404 エラーが返され ます。これにより、URI 正規化プロセスを URL エンコーディングでバイパスすることを 防ぐことができます。 7.3 Tomcat 3.2.2 で解決されたセキュリティの脆弱性 7.3.1 プロトコルなしの HTTP 要求 プロトコルが指定されていない HTTP 要求に対して、JSP ファイルの処理されていない ソースが返されてしまうことがありました。たとえば GET /examples/jsp/num/numguess.jsp は numguess.jsp ファイルのソースを返していました。 7.3.2 Tomcat 3.2.2 ベータ3より前のリリースでは、URIコンポーネントを二度デコードするこ とを許可していました。この問題は JDK 1.3.0 以降を使っている時にのみ発生します。 二重デコード問題は以下のような URL を生成してしまいます。 http://localhost:8080/%252e%252e/%252e%252e/%00.jsp これはウェブアプリケーションの外にあるディレクトリリストを晒してしまいます。同 じ二重デコード問題の他のバージョンでは、ウェブアプリケーションの外にあるファイ ルの中身を見ることができてしまいます。 7.4 Tomcat 3.2.1 で解決されたセキュリティの脆弱性 7.4.1 /WEB-INF と /META-INF ディレクトリにあるリソースの保護 Servlet仕様は、 Webアプリケーションアーカイブの /WEB-INF と /META-INF ディレク トリにあるリソースを、Servletコンテナが直接クライアントに提供することを禁じて います。Tomcat 3.2 では、このことは次のような URLが、展開記述子ではなく、エラ ーページを返すことを意味していました。 http://localhost:8080/examples/WEB-INF/web.xml しかし、Tomcat 3.2には、以下のような URL をクライアントが要求した場合に、この 情報を表示する脆弱性が存在しました。 http://localhost:8080/examples//WEB-INF/web.xml ("WEB-INF" の前に、2重にスラッシュがあることに注意してください) この脆弱性は 、Tomcat 3.2.1で修正しました。 7.4.2 ソースコードを表示する脆弱性 Tomcat 3.2 と共に配布されていたサンプルアプリケーションには、JSP ページの例と してソースコードを表示するメカニズムが含まれていました。このメカニズムを 、WEB-INF と META-INF ディレクトリ内の重要な情報の表示の制限をすり抜けるため に使うことができました。この脆弱性は取り除きました。 [訳注: これは河内 崇が翻訳しました。日本語訳に対するコメントがあれば、 jajakarta-report@nekoyanagi.com に送ってください。]