![]() |
![]() |
Gomez Henri <hgomez@slib.fr>著
Tomcatは、SSLを直接 (SSLをサポートしたHTTPコネクタ経由) 、またはmod_jkコネクタと組み合わせてSSL化されたApache(Apache-SSLやapache+mod_ssl)経由で使用することができます。
TomcatをSSLつきで再ビルドしたい場合には、あなたのCLASSPATHに注意してください。 私はJARファイル内のコンフリクトを回避するために、CLASSPATH環境変数をクリアしています。 コンフリクトの一般的な例は、XMLパーザ (xerces & jaxp)です。 TomcatはApacheグループのxerces 1.1.2やSunのjaxp 1.0.1のような最新のXMLパーザが必要です。
(antを使用した)ビルド時には、Tomcatはいくつかのライブラリをチェックして、取り込むオプションを調節しますが、たぶんSSLサポートはこれに含まれます。 あなたが指定したCLASSPATH内にJSSE 1.0.2のJARファイルが存在する場合には、TomcatはSSL (SSLSocketFactory) つきでビルドされます。 Tomcatは、JSSEのJARファイル(jcert.jar, jsse.jar, jnet.jar)を使用します。 ただし、このソフトウェアは、Tomcatに添付することはできません。 jsseのホームページに行って、そこから国内版 (US/カナダ)か、グローバル版のアーカイブをダウンロードしてください。 それから、3つのJARファイルを、Tomcatの実行時のクラスパスであるlibディレクトリ ($TOMCAT_HOME/lib) にコピーしてください。
ApacheをSSL (Apache-SSLか、apache+mod_ssl)つきで使用して、さらにhttpd.conf中にJkExtractSSL指示子が定義されている場合は、Apacheのmod_jkコネクタはTomcatにSSLの情報をフォワードすることができます。
この情報は、以下の通りです。
HTTPS | ApacheがSSL領域からTomcatにリダイレクトする情報 |
SSL_SESSION_ID | SSLのセッションID |
SSL_CIPHER | SSLで使用している暗号 |
SSL_CLIENT_CERT | クライアントのSSLの証明書 |
Apache-SSLとapache+mod_sslは異なる環境変数を使用するので、以下のJK変数を用いてSSL変数を対応させることができます。
以下は、mod_sslと一緒に使用するためにhttpd.conf中に取り込む指示子の例です。
# mod_jkがSSL情報をTomcatに送信するか? (デフォルトはOn) JkExtractSSL On # SSLを何を用いて指定するか? (デフォルトはHTTPS) JkHTTPSIndicator HTTPS # SSLセッションを何を用いて指定するか? (デフォルトはSSL_SESSION_ID) JkSESSIONIndicator SSL_SESSION_ID # クライアントのSSLの暗号を何を用いて指定するか? (デフォルトはSSL_CIPHER) JkCIPHERIndicator SSL_CIPHER # クライアントのSSLの証明書を何を用いて指定するか? (デフォルトはSSL_CLIENT_CERT) JkCERTSIndicator SSL_CLIENT_CERT
Apacheとmod_sslと一緒にmod_jkを仕様する時には、
"SSLOptions +StdEnvVars +ExportCertData"
をhttpd.confファイル中に指定する必要があります。
そうしないと、mod_sslはmod_jkに必要な環境変数を生成しません。
(Tilo Christ <tilo.christ@med.siemens.de>)
警告: mod_jkサポートはajp12 (ApacheJServから受け継いだ古いバージョンです) とajp13の両方をサポートしていますが、ajp13だけがTomcatにSSL情報をフォワードできます。
mod_jkは、ApacheのVirtualHost指示子をサポートしていますが、それはTomcatと一緒にapache+mod_sslを使用する時に特に便利です。
以下の設定は、ApacheのSSLサポートを経由することで、簡単にあなたのWebアプリケーションを保護します。
ただし、これらのJK変数をVirtualHost指示子の外側で設定することに注意してください。
JkLogFile /var/log/httpd/mod_jk.log JkLogLevel warn
jkがリダイレクトする内容は、バーチャルホスト<virtualhost _default_:443>の内で設定します。
<VirtualHost _default_:443>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXP56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL # 他のSSLの設定 Alias /alesia "/var/tomcat/webapps/alesia" <Directory "/var/tomcat/webapps/alesia"> <Directory "/var/tomcat/webapps/alesia"></Directory> <Directory "/var/tomcat/webapps/alesia">Options Indexes FollowSymLinks </Directory> </Directory> JkMount /alesia/servlet/* ajp13 JkMount /alesia/*.jsp ajp13 <Location "/alesia/WEB-INF/"> </Location> <Location "/alesia/WEB-INF/"> AllowOverride None Deny from all </Location> </VirtualHost>
</VirtualHost>
TomcatでHTTP/SSL (https) を直接実行したい場合には、SSL証明書を作成する必要があります。 SSLと証明書の詳しい情報については、OpenSSL (オープンソースのSSL実装) と ModSSL (ApacheのSSLサポート)を見るとよいでしょう。
TomcatのSSLコネクタでHTTPを使用するためには、server.xml中で以下の項目が有効になっているかどうかを確認してください。
<Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.http.HttpConnectionHandler"/> <Parameter name="port" value="8443"/> <Parameter name="socketFactory" value="org.apache.tomcat.net.SSLSocketFactory"/> <Parameter name="keystore" value="/var/tomcat/conf/keystore" /> <Parameter name="keypass" value="changeit"/> <Parameter name="clientAuth" value="true"/> </Connector>この例では、keystoreにファイル/var/tomcat/conf/keystoreを指定しています。 keystoreのパスワードはchangeitで、クライアントは認証が必要です。
(ついに、)私はIBM JDK 1.3で以下のように成功しました。
keytool -genkey -alias tomcat -keyalg RSA
を実行します。 CLASSPATH=$JAVA_HOME/jre/lib/ext/jcert.jar:$CLASSPATH export CLASSPATH=$JAVA_HOME/jre/lib/ext/jnet.jar:$CLASSPATH export CLASSPATH=$JAVA_HOME/jre/lib/ext/jsse.jar:$CLASSPATHTomcatの起動時に自動的にCLASSPATHに追加されるように(tomcat.shの場合)、3つのJARファイルを$TOMCAT_HOME/lib/にコピーすることもできます。
OpenSSLで作成した証明書を登録することができます。 OpenSSLを使って、そのような証明書を生成するために必要な手続きを、以下に示します。
openssl req -new -out REQ.pem -keyout KEY.pem
openssl req -x509 -in REQ.pem -key KEY.pem -out
CERT.pem
openssl req -verify -in REQ.pem
openssl req -verify -in REQ.pem -key KEY.pem
openssl req -text -in REQ.pem
keytool -import -v -trustcacerts -alias tomcat -file
CERT.pem
このドキュメントは、Gomez Henriが書きました。 インポートの情報については、hgopal@cmcltd.comに感謝します。 今後の更新にすいては、気軽に私にコンタクトしてください。
[訳注: これは風間一洋が翻訳しました。 日本語訳に対するコメントは、jajakarta-report@nekoyanagi.com宛に送って下さい。]
Copyright ©1999-2000 The Apache Software Foundation |