SSL を利用して Jira と Apache を統合する方法
アトラシアン アプリケーションの製品内でリバース プロキシを使用できますが、アトラシアン サポートはその設定についての支援は行いません。つまり、アトラシアンではリバース プロキシに関するあらゆるサポートの提供が保証されません。
設定でサポートが必要な場合、アトラシアン コミュニティに質問を登録してください。
Apache Tomcat の “Ghostcat” 脆弱性について
このガイドに従うと、ご利用の Jira インスタンスが Apache Tomcat で最近見つかったリスクの高い脆弱性にさらされる可能性があります。
これは、複数の SSL 証明書および/あるいは Webアプリケーションを抱えたネットワーク等、全て一つのロケーション(Apache) 内で管理する場合の一般的な設定です。
さらに複雑なソリューションが要求された場合は、「Apache HTTP サーバーのバージョンドキュメント」をご参照または、勤務先のApache SME にご相談下さい。必要な場合は、「アトラシアン回答コーナー」へご質問、または「アトラシアンエキスパート」にご相談下さい。
はじめる前に
SSL 証明書は CA によって署名され、Apache を設定する前に PEM フォーマットになっている事が想定されます。SSL 証明書の準備および生成のサポートに関しては、SSL ベンダー (GoDaddy、Verisign、RapidSSL 等) まで問い合わせて下さい。
ドメイン、サブドメインあるいはコンテキストパスを利用するかの決定は、主として提供される SSL 証明書の種類、およびウェブサイト設定にまつわるあらゆる業務規定によって左右されます。SSL がエラー無く機能するには、ドメインが証明書の Common Name (CN) と一致しなくてはいけません。
アスタリスク(*) を有する CN を持つ証明書は ワイルドカード証明書 であり、そのドメインのあらゆるサブドメインをサポートできます。どの URL を使用するべきか分からない場合は、その証明書を提供した担当のシステムアドミニストレーターと SSL ベンダーに問い合わせて下さい。
ステップ 1: Tomcat を設定する
- Jira を停止します。
(オプション: Jira にコンテキスト パスが不要な場合、このステップを飛ばします)
Tomcat の
server.xml
を編集して必要な Jira コンテキスト パスを追加します。以下の例では、path="jira"
を使用しています。これは、既定の Jira ポートが使用されている場合、Jira にhttp://jiraserver:8080/jira
でアクセスできることを意味します。<Engine defaultHost="localhost" name="Catalina"> <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <Context docBase="${catalina.home}/atlassian-jira" path="/jira" reloadable="false" useHttpOnly="true"> <!-- ==================================================================================== Note, you no longer configure your database driver or connection parameters here. These are configured through the UI during application setup. ==================================================================================== --> <Resource auth="Container" factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60" name="UserTransaction" type="javax.transaction.UserTransaction"/> <Manager pathname=""/> </Context> </Host>
path
の値がスラッシュ (/
) がを使用して設定されていることを確認します。例えば、path="jira"
ではなくpath="/jira"
と指定します。Tomcat の
server.xml
ファイルを編集して、リクエストをプロキシするための別のコネクタを含めます。これにはscheme
属性、proxyName
属性、およびproxyPort
属性が必要です。以下の例のように、これらをプロキシの適切なドメインおよびポートで置き替えます。<Service name="Catalina"> <!-- Apache Proxy Connector with values for scheme, proxyName and proxyPort --> <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" port="8080" protocol="HTTP/1.1" relaxedQueryChars="[]|{}^c;`"<>" redirectPort="8443" useBodyEncodingForURI="true" scheme="https" proxyName="jira.atlassian.com" proxyPort="443"/> <!-- Standard HTTP Connector --> <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" port="8081" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>
- Tomcat から HTTPS へのリダイレクトが有効になっている場合、すべて無効にします。例えば、「SSL または HTTPS を通じて Jira を実行する」における
WEB-INF/web.xml
への変更は、Apache を使用する際にエラーを発生させます。 - Jira を起動します。
- 必要に応じてコンテキスト パスを使用して、Jira に通常のコネクタ上でアクセス可能かどうかをテストします。例:
http://jiraserver:8081/jira
。 - 適切なプロキシ コネクタ上で Jira にアクセスして、新しいコネクタの有効性をテストします。コネクタの動作は、コンテキスト パスによって異なります。
- コンテキスト パスが空またはルート (
/
) の場合、プロキシ コネクタ (例:http://jiraserver:8080/
) 経由で Jira にアクセスすると画面に警告が表示されます。 - コンテキスト パスが空もしくはルート (
/
) 以外の場合 (例:/jira
)、プロキシ コネクタ (例:http://jiraserver:8080/jira
) 経由で Jira にアクセスすると、設定されたプロキシ (例:https://jira.atlassian.com/jira
) にリダイレクトされます。
- コンテキスト パスが空またはルート (
2 つの異なる Tomcat コネクタを利用して、Jira でのテストを可能にしました。必要に応じたプロキシのバイパスは、トラブルシューティングの際に便利です。標準コネクタは、ネットワーク外からの外部アクセスが認められない (ファイアウォールはポートへの転送を行わない) 事を想定しています。
ステップ 2: Apache HTTP サーバを設定する
Apache のインストールおよび DNS の構成に関しては、本ドキュメントでは扱っていません。また、Apache 2.2 がインストール済みであり、DNS エントリが Jira ドメイン向けに設定されているものと想定しています。Apache の設定は利用する OS によって異なるため、現在、一部のディストリビューションやそこでの設定のみドキュメントが用意されています。
2.1 プロキシモジュールを有効化する
Debian/Ubuntu
Windows/その他の OS
2.2 これらのモジュールを使用するように、Apacheを設定します
Debian/Ubuntu
Windows/その他の OS
2.3 HTTP を HTTPS にリダイレクトします
これは、以下のいずれかの方法で行えます:
- HTTP
VirtualHost
を、同じ Tomcat コネクタに転送するようにセットアップします。Tomcat はscheme
、proxyName
、proxyPort
パラメータを利用して HTTPS にリダイレクトします。これは、アトラシアンの「Jira を Apache に統合する」ドキュメントに従って行えます。 mod_rewrite (このモジュールを有効にする必要がある場合があります) を利用して、以下を HTTP
VirtualHost
に追加します。RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
ステップ 3: Jira を構成する
- 「Jira オプション設定」の通りに、「gzip ファイル圧縮を利用する」設定をオフにします。 GZIP ファイル圧縮は、特にプロキシによるトラフィック圧縮を行う等のリバースプロキシを使った場合に、性能問題を起こすことで知られています。
- Set the Base URL to be the FQDN that Jira will be accessed on, for example https://jira.atlassian.com. This is also located in Configuring Jira options.
Jira can only be configured to respond to a single URL and the Base URL (as in Configuring Jira options) must match the URL end-users are accessing. Misconfiguration of this may cause significant problems within Jira such as the Activity Stream and Dashboard Gadgets failing to function correctly. - Test by accessing Jira on the FQDN (e.g.: https://jira.atlassian.com), ensuring that Jira is accessible and all dashboard gadgets correctly display.
トラブルシューティング
- セッションのハイジャック : mod_cache モジュールが有効になっているときにユーザー セッションがハイジャックされることがある問題が報告されています。この問題が発生した場合、
mod_cache
モジュールを無効にしてみてください。
一部の Apache HTTP Server バージョン 2 ディストリビューションではこのモジュールがデフォルトで有効になっています。 - SELinux を使用する Linux ディストリビューションで
mod_proxy
(およびmod_jk
) を有効化した際の Permission Denied エラー :mod_proxy
(およびmod_jk
) を動作させようとすると "permission denied" エラーが発生することが多くのユーザーから報告されています。これは SELinux (/etc/selinux/config
) を無効化することで解決できます。 Mac OS X 使用時の問題 : デフォルトでポート 80 を使用する webperfcache, を無効にする必要があります。あるユーザーから、これが以下にあるように Jira セッションにおいてユーザーの識別情報が混乱するという問題が起こる有力な原因だとの指摘が出ています。
なお、サポートするプラットフォームに示すように Max OS X は当社のサポート対象ではなく、当社としてはその使用は推奨いたしません。
OSX Server では、バーチャルホスト機能を提供するためにデフォルトで webperfcache を有効にしており、動的インスタンス (JIRA のインスタンスはすべて動的インスタンスです。) に対しては悪影響があり、多くの問題を引き起こします。
中でも最近指摘されている JIRA セッションへの悪影響の問題には注意する必要があります。なお、次の情報も参照してください :
http://developer.apple.com/documentation/Darwin/Reference/ManPages/man8/webperfcache.8.html
残念ながら、あるインスタンスで webperfcache を無効化しても、有効になっているインスタンスがひとつでもあると、すべてのインスタンスが引き続き webperfcache をプロキシとして使用するため、セッションに問題が発生します。
- 過剰なリダイレクト : Tomcat と Apache のどちらかでリダイレクトが行われれば十分である場合において両方でリダイレクトが行われてしまう問題です。これに対しては、Tomcat でのリダイレクトを無効化し、(Running Jira over SSL or HTTPS の説明に従って設定の変更を元に戻します。) その後リダイレクトが Apache のみで行われることを確認します。
- その他の一般的なトラブル :
- ブラウザーのキャッシュを削除してからもう一度試みます。
- Ensure that Jira works as expected when running directly from Tomcat and bypassing Apache. For example, accessing
http://jiraserver:8080
instead of http://jira.atlassian.com. - より多くの Apache デバッグ情報を得られるようにログレベルを変更して再起動します。
- Jira にアクセスし、エラーに対応する Apache ログファイル情報を確認します。
- アトラシアン Answers に質問を出して助言を求めます。
- 403 Forbidden エラー :
Apache 設定ページに
RequestHeader unset Authorization
行を追加して、認証ヘッダーを無効化します。<Location /jira> RequestHeader unset Authorization ProxyPreserveHost On ProxyPass http://jiraserver/jira ProxyPassReverse http://jiraserver/jira </Location>
参考情報
- Jira と Apache の統合
- AJP プロトコルを利用して Apache リバースプロキシを構成する
- より高度な
mod_webapp
設定 (例: SSL) については、この mod_proxy ガイドを参照してください。 - Apache 仮想ホストドキュメント