こんにちは。おおたにです。
先日Tomcat9を最新バージョン(その時点では9.0.33)にアップデートしたところ、WebサーバとのAJP接続がうまくいかなくなったので、今回はその対処法を紹介します。
こちらの脆弱性への対応のため、Tomcat 9.0.31でAJP1.3コネクタ設定が変更されたことが原因でした。具体的な変更点はTomcat 9.0.31のchangelogにありますが、主なものは以下の3点です。
以下、上記変更に対応するための設定方法です。今回はApache HTTP Serverを例に説明しますが、Apache HTTP Serverのバージョンにより設定が若干異なります。
Tomcat側は、
Apache HTTP Server側は、
AJPコネクタのシークレットキーに対応できないため、Tomcat側で
弊社ではLiferayやAlfrescoといったオープンソース製品のカスタマイズ/導入支援を行っておりますが、Tomcat/Apacheを使ってホストすることが多いためさっそくこの問題にあたりました。どうぞご参考まで。
先日Tomcat9を最新バージョン(その時点では9.0.33)にアップデートしたところ、WebサーバとのAJP接続がうまくいかなくなったので、今回はその対処法を紹介します。
原因
こちらの脆弱性への対応のため、Tomcat 9.0.31でAJP1.3コネクタ設定が変更されたことが原因でした。具体的な変更点はTomcat 9.0.31のchangelogにありますが、主なものは以下の3点です。
- AJPコネクタ(8009番ポートのやつ)がデフォルトでdisabledになった
- バインドアドレスのデフォルトがIPv6ループバックアドレス(::1)になった
- 新しい属性
secretRequired
が追加され、デフォルトでtrue
となっている(trueの場合、secret
属性でシークレットキーを指定する必要がある)
以下、上記変更に対応するための設定方法です。今回はApache HTTP Serverを例に説明しますが、Apache HTTP Serverのバージョンにより設定が若干異なります。
Apache HTTP Server 2.4.43以降の場合
Tomcat側は、
<TOMCAT_DIR>/conf/server.xml
でAJPコネクタのコメントアウトを外した後、以下のように設定します。<Connector protocol="AJP/1.3"
address="TomcatサーバのIPアドレス"
port="8009"
secret="シークレットキー"
redirectPort="8443" URIEncoding="UTF-8" />
- address : TomcatサーバのIPアドレス。複数のインタフェースが存在する場合はWebサーバとの通信に利用する方のIPアドレスを指定する。
- secret : AJPコネクタのシークレットキー。
Apache HTTP Server側は、
ProxyPass
設定にsecret
パラメータを追加して先ほどと同じ値を指定します。ProxyPass / ajp://TomcatサーバのIPアドレス/ secret=シークレットキー
Apache HTTP Server 2.4.41以前の場合
AJPコネクタのシークレットキーに対応できないため、Tomcat側で
secretRequired
をfalse
に設定する必要があります。<Connector protocol="AJP/1.3"Apache HTTP Server側は特に設定変更しなくてOKです。
address="TomcatサーバのIPアドレス"
port="8009"
secretRequired="false"
redirectPort="8443" URIEncoding="UTF-8" />
弊社ではLiferayやAlfrescoといったオープンソース製品のカスタマイズ/導入支援を行っておりますが、Tomcat/Apacheを使ってホストすることが多いためさっそくこの問題にあたりました。どうぞご参考まで。