INDEX
Apache Tomcat
Apacheソフトウェア財団による、Apache Software License の Javaサーブレット・JSP アプリケーションサーバ。
SSL暗号化通信
Tomcat でセキュア通信(SSLの暗号化通信)を行うためには、tomcat の設定ファイル server.xml を編集し、コネクターの設定でセキュア通信を有効にする。
Tomcatの設定ファイル
インストールした状態では、以下のようにコメントアウトされ例が記述されている。
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<!--
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
鍵と証明書の作成
必要な鍵と証明書を収めたキーストアは、Java の keytool を使って作成する。キーストアの種類やアルゴリズムは、デフォルト("JKS"と"SunX509")でよい。
主な作成手順としては、鍵ペアを作成し、証明書署名要求(CSR)の作成。CSRを認証局に提出し、証明書を発行してもらう。発行された証明書をインポートする。
サーバ証明書の指定
特に指定をしないとデフォルトの設定でキーストアが読まれる。個別に指定する場合は、Connector タグの属性 keystoreFile, keystorePass, keyAlias を指定する。
- keystoreFile
- キーストアファイルの場所。デフォルトは、実行ユーザのホームディレクトリの ".keystore" となる。絶対パスか、環境変数($CATALINA_BASE)からの相対パスで指定する。
Windows版でサービスとして起動している場合は、キーストアファイルは "%SystemDrive%/Documents and Settings/NetworkService/.keystore" を参照する。
- keystorePass
- キーストアのパスワード。デフォルトは、"changeit" となる。
- keystoreType
- キーストアの種類。デフォルトは、"JKS" となる。
- keyAlias
- 読み込む鍵のalias名。指定がない場合は、最初の鍵が読み込まれる。※ 5.5以降から
クライアント認証
Connector タグの属性 clientAuth を "true" にすることでクライアント認証が行われる。
- clientAuth
- クライアント認証するか(クライアントに証明書を提示させるか)。
- truststoreFile
- クライアント認証で使用するキーストアの場所。
- truststorePass
- キーストアのパスワード。
- truststoreType
- キーストアの種類。
サンプル
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="C:/WORK/keystore"
keystorePass="password"
keyAlias="tomcat"
truststoreFile="C:/WORK/keystore"
truststorePass="password"
/>
catalina.out のローテート
サーブレット等が標準出力・エラーに出力した内容が保存される catalina.out だが、ローテートされず常に追記されているので、出力が多かったり稼働させている時間が長くなると次第に大きなファイルになっていく。
UNIX版の場合、catalina.out は $TOMCAT_HOME/bin/catalina.sh でリダイレクトされているだけなので、rotatelogs を使用してローテートするようにする。$TOMCAT_HOME/logs/catalina.2009-01-27.out の様に日付が付いたファイルが出力される。
1 |
*** /usr/tomcat/bin/catalina.sh.org 2006-04-15 03:09:44.000000000 +0900
--- /usr/tomcat/bin/catalina.sh 2009-01-27 11:30:37.346765731 +0900
***************
*** 237,243 ****
elif [ "$1" = "start" ] ; then
shift
! touch "$CATALINA_BASE"/logs/catalina.out
if [ "$1" = "-security" ] ; then
echo "Using Security Manager"
shift
--- 237,243 ----
elif [ "$1" = "start" ] ; then
shift
! #touch "$CATALINA_BASE"/logs/catalina.out
if [ "$1" = "-security" ] ; then
echo "Using Security Manager"
shift
***************
*** 249,255 ****
-Dcatalina.home="$CATALINA_HOME" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
org.apache.catalina.startup.Bootstrap "$@" start \
! >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &
if [ ! -z "$CATALINA_PID" ]; then
echo $! > $CATALINA_PID
--- 249,256 ----
-Dcatalina.home="$CATALINA_HOME" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
org.apache.catalina.startup.Bootstrap "$@" start \
! 2>&1 | /usr/sbin/rotatelogs "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out 86400 &
! #>> "$CATALINA_BASE"/logs/catalina.out 2>&1 &
if [ ! -z "$CATALINA_PID" ]; then
echo $! > $CATALINA_PID
***************
*** 261,267 ****
-Dcatalina.home="$CATALINA_HOME" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
org.apache.catalina.startup.Bootstrap "$@" start \
! >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &
if [ ! -z "$CATALINA_PID" ]; then
echo $! > $CATALINA_PID
--- 262,269 ----
-Dcatalina.home="$CATALINA_HOME" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
org.apache.catalina.startup.Bootstrap "$@" start \
! 2>&1 | /usr/sbin/rotatelogs "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out 86400 &
! #>> "$CATALINA_BASE"/logs/catalina.out 2>&1 &
if [ ! -z "$CATALINA_PID" ]; then
echo $! > $CATALINA_PID
|
※Windows版は、catalina.bat でリダイレクトしてる訳じゃないけど、どうしてるんだろう…
TomcatでCGIを使う
デフォルトでは無効になっているが、Tomcat でもCGIの実行自体はサポートされている。ので、設定を行えばTomcat上でCGIを走らせることが出来る。
TomcatでCGIを有効にする
先ずは、CGIを実行する為のライブラリの配置。$TOMCAT_HOME/server/lib 下にある servlet-cgi.renametojar と言うファイルを servlet-cgi.jar へ名前を変更する。
続いて、CGIを利用するWebアプリケーションの web.xml にCGIサーブレットの定義を追加する。
1 |
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>CGIServlet</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi</param-value>
</init-param>
<init-param>
<param-name>clientInputTimeout</param-name>
<param-value>100</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>executable</param-name>
<param-value>/usr/bin/perl</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CGIServlet</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>
</web-app>
|
CGIServlet の設定可能なパラメータは以下の通り。デフォルト値で問題なければ特に記述も不要。
| パラメータ名 | 説明 | デフォルト値 |
|---|---|---|
| cgiPathPrefix | CGIプログラムの置かれる場所。先頭の'/'を除いたアプリケーションのルートからの絶対パス。 | 「WEB-INF/cgi」 |
| clientInputTimeout | ブラウザからの入力がないと判定するまでの時間(単位はミリ秒)。 | 100ミリ秒 |
| debug | ログへ出力させるデバッグ情報の表示レベル。 | 0 |
| executable | スクリプトの実行コマンド。パスが通っていない場合は「/usr/bin/perl」の様に絶対パスで指定する。 | 「perl」 |
| parameterEncoding | ||
| passShellEnvironment | false |
このCGI利用の記述は、$TOMCAT_HOME/conf/web.xml にもコメントアウトされた形で記述されている。しかし、ここで有効にするとすべてのWebアプリケーションでCGIが有効になってしまうため、個別に web.xml でCGIの設定を行う方が無難かな。
CGIプログラムの動作確認
実際にTomcat上でCGIプログラムが動作するかを確認する。
Webアプリケーションの /WEB-INF/cgi 下に test.cgi を以下の内容で配置する。
1 |
#!/usr/bin/perl print "Content-Type: text/html\n\n"; print "<html><body>"; print "test.cgi with Perl $]"; print "</body></html>" |
http://localhost:8080/sample/cgi-bin/test.cgi でアクセスし表示されればOK。
最終更新時間:2010年09月06日 16時59分07秒 指摘や意見などあればSandBoxのBBSへ。