SSL または HTTPS 上での Jira アプリケーションの実行
アトラシアン アプリケーションでは SSL を使用できますが、SSL の構成はアトラシアン サポートの対象外です。そこで、サポートとして次を利用することをお勧めします。
証明書の変換に際してサポートが必要であれば、証明書の提供元のアトラシアン パートナーまたは認証局 (CA) に相談してください。
- SSL の設定に関してサポートが必要な場合は、アトラシアン コミュニティで質問を作成してください。
Tomcat 8.5 (Jira 8.0) でSSL コネクタ属性が非推奨となり、Tomcat 10.1(Jira 11.0) で完全に削除されました。さらに、セキュアでない Java KeyStore (JKS) 形式は Java 9 以降で非推奨となり、代わりに PKCS#12 (JEP 229) が推奨されています。
次の手順に従って、PKCS#12 ストアを作成し、<SSLHostConfig> タグを使用して適用してください。
この記事では、Apache Tomcat で HTTPS を設定することで Jira アプリケーションを SSL または HTTPS 上で実行する方法を説明します。
Jira を SSL または HTTPS 上で実行する必要があるのはどのような状況ですか?
HTTPS を使用せずに Jira を実行すると、インスタンスが中間者攻撃 (MITM) や DNS リバインディング攻撃などに晒される可能性があります。インスタンスでは HTTPS を有効化することをお勧めします。
リバース プロキシ (ロード バランサー) から Jira へのラストマイル接続がセキュアなイントラネット経由であることを前提として、リバース プロキシ (ロード バランサー) で SSL トラフィックをオフロードすることをお勧めします。これにより、Jira Data Center から暗号化のオーバーヘッドが排除され、デプロイ/アップグレードが簡素化されます。
セキュリティ体制でエンドツーエンドの SSL 暗号化が必要な場合、またはリバース プロキシを使用しない場合は、次の手順に従って Apache Tomcat に SSL を設定してください。
はじめる前に
サポート
アトラシアンのサポートは、SSL のサポートについては証明書を発行する認証局 (CA) に委ねます。このページにおける SSL 関連の説明は参考情報としてのみ提供されます。
Java のインストール
SSL 証明書を更新する際には、Jira で使用されているものと同じ JRE または JDK インストールを keytool で使用してください。このパスを確認するには、次の手順に従います。
- [設定] (
)、[システム] の順に移動します。
- [システム サポート] セクションで、[システム情報] を選択します。
- java.home 行に移動し、パスを確認します。
Jira をリバース プロキシ (ロード バランサー) の背後で実行する
Jira が Apache のようなリバースプロキシの背後にホストされている場合の詳細については「SSL によって Jira と Apache を統合する」をご参照ください。
SSL 証明書を準備する
SSL 証明書は次の 2 つの種類に区分されます。
| 証明書 | 説明 | 使用環境 |
|---|---|---|
| 自己署名証明書 | 認証局によるデジタル署名がない証明書です。Web サーバー証明書の正当性を確認する方法です。自分自身が自己名で署名します。 | テスト用、開発用、その他内部向けサーバーのみ |
| CA 署名証明書 | 認証局 (CA) のデジタル署名によって正当性が確認された証明書です。これにより、ブラウザやクライアントは証明書に信用を置くことが可能になります。 | 本番環境用サーバー |
信用のおけるサードパーティー認証局 (CA) が発行したデジタル証明書により、お客様の Web サイトがお客様の会社を正当に代表するものであることが証明され、お客様の会社の実在が認証されます。多くの CA では単にドメイン名のみを認証する証明書を発行しますが、VeriSign などでは、お客様の事業活動の存在、ドメイン名の所有権の存在、証明書使用に関するお客様の権限などを証明する高度の認証を提供しています。
たとえば、Apple に相談して利用可能なルート証明書のリストを確認できます。最もよく知られている CA の一部を次に示します。
当社としては、CA で署名された証明書の利用を推奨いたします。
キーストアを作成する
キーストアを作成するには、次の手順に従います。
次のものを準備します。
cert.pem: 署名済み SSL 証明書privkey.pem: SSL 証明書の非公開キー(オプション)
chain.pem: ルート証明書および中間証明書チェーン
- 次のコードで PKCS#12 ストアを生成します。
changeitを一意のパスワードに置き換えます。openssl-pkcs12 に関する OpenSSL ドキュメントを参照してください。openssl pkcs12 -export \ -in /path/to/cert.pem \ -inkey /path/to/privkey.pem \ -certfile /path/to/chain.pem \ -out <jira-local-home>/keystore.p12 \ -name jira \ -passout pass:changeit - キーストア内に証明書が存在することを確認します。これは
<java-home>/bin/bin/keytool -list -alias jira -keystore <jira-local-home>/keystore.p12PrivateKeyEntryである必要があります。異なる場合、証明書のセットアップが正常に完了していません。例:jira, Jan 1, 1970, PrivateKeyEntry, Certificate fingerprint (MD5): 73:68:CF:90:A8:1D:90:5B:CE:2A:2F:29:21:C6:B8:25
キーストアを使用するように Tomcat を更新する
キーストアを使用するように Tomcat を更新するには、次の手順に従います。
編集を開始する前に、
<jira-install>/conf/server.xmlのバックアップを作成します。- キーストアを指す新しい HTTPS コネクタを作成します。パス、パスワード、エイリアスを必ず更新してください。
<Connector port="8443" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>" maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false" maxHttpHeaderSize="8192" useBodyEncodingForURI="true" acceptCount="100" disableUploadTimeout="true" bindOnInit="false" secure="true" scheme="https" protocol="org.apache.coyote.http11.Http11Nio2Protocol" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="/var/atlassian/application-data/jira/keystore.p12" certificateKeystorePassword="changeit" certificateKeyAlias="jira" /> </SSLHostConfig> </Connector> - 必要に応じて、HTTP コネクタの
redirectPortを更新し、HTTPS コネクタにリダイレクトされるようにします。<Connector port="8080" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>" maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false" maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443" acceptCount="100" disableUploadTimeout="true" bindOnInit="false" /> 変更を
server.xmlに保存します。Jira ノードを再起動します。
残りの各ノードに対して、同様の手順を繰り返します。
詳細設定
HTTPS へのリダイレクト
HTTPS へのリダイレクトを使用する場合 (推奨)、<jira-install>/conf/web.xml ファイルを編集し、ファイルの末尾の </web-app> の前に次のセクションを追加します。次の例では、添付ファイルを除くすべての URL が HTTP から HTTPS にリダイレクトされます。
このリダイレクトはアプリケーション トンネルでは使用できません。必要な接続とアップストリーム ポートの設定方法については、こちらをご確認ください。
<security-constraint>
<web-resource-collection>
<web-resource-name>all-except-attachments</web-resource-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspa</url-pattern>
<url-pattern>/browse/*</url-pattern>
<url-pattern>/issues/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
証明書の検証
Tomcat の起動時に証明書チェーンを検証するように要求するには、<SSLHostConfig> を更新します。これは、以前の Tomcat バージョンで使用されていた非推奨の clientAuth コネクタ属性に代わるものです。
<SSLHostConfig
caCertificateFile="/path/to/ca.pem"
certificateVerification="require"
certificateVerificationDepth="10">
[...]
</SSLHostConfig>
プロトコルを制限する
既定では、次のプロトコルが受け入れられます。
TLSv1
TLSv1.1
TLSv1.2
TLSv1.3
SSLv2Hello
受け入れられるプロトコルまたは暗号を制限するには、protocols および ciphers 属性を直接参照してください。Apache Tomcat 10 構成の詳細については、こちらをご確認ください。
トラブルシューティング
間違ったパスワード
パスワードが正しくない場合は、次のエラー メッセージが表示されることがあります。
java.io.IOException: Keystore was tampered with, or password was incorrect
java.io.IOException: Cannot recover key
使用しているパスワードが changeit と異なる可能性があります。PKCS#12 .p12 ストアの生成時と Tomcat server.xml ファイルで同じパスワードを指定する必要があります。そうしないと、次のエラー メッセージが表示されることがあります。
Wrong certificate
証明書が正しくない場合は、次のエラー メッセージが表示されることがあります。
javax.net.ssl.SSLException: No available certificate corresponds to the SSL cipher suites which are enabled.
キーストア内に複数の証明書がある場合、server.xml 内の HTTPS コネクタで指定がある場合を除き、Tomcat では最初に返された証明書が使用されます。
この問題を解決するには、関連するエイリアスを含む certificateKeyAlias 属性を Certificate タグに追加します。
非推奨の形式
非推奨の形式を使用した場合は、次のエラー メッセージが表示されることがあります。
Caused by: java.lang.IllegalArgumentException: no element SSLHostConfig found with hostName [_default_] corresponding to defaultSSLHostConfigName for the connector [https-jsse-nio-8443]
非推奨のコネクタ SSL 属性 (keystoreFile や keystorePass など) は、Tomcat 10.1 (Jira 11.0 以降) で削除されました。HTTP (8080) および HTTPS (8443) コネクタが上記のテンプレートと一致していることを確認してください。
その他のリソース
このテーマの詳細は、次の記事をご参照ください。