SSL または HTTPS 上での Jira アプリケーションの実行

このページの内容

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

Atlassian アプリケーションでは SSL を使用できますが、SSL の構成は Atlassian サポートの対象外です。

  • 証明書の変換に際してサポートが必要であれば、証明書の提供元のベンダーに相談してください。
  • SSL の設定に関してサポートが必要であれば、Atlassian コミュニティで質問を作成してください。

既知の弱点により、SHA-1 は段階的に廃止されます。

このページでは、Apache Tomcat で HTTPS 設定を行い、Jira アプリケーションを SSL または HTTPS 上で実行する手順を説明します。この手順は Jira が通常の方法でインストールされている場合を前提としています。HTTPS 設定の完全な手順や包括的な手順の説明ではありません。また、記述内容はすべての環境に適用されるものではありません。

なぜ、Jira を SSL または HTTPS 上で実行する必要があるのでしょうか? ユーザーが Web アプリケーションにアクセスする場合、コンピューターと ISP / 会社 との間でユーザー名やパスワードの傍受が行われる可能性が常にあります。HTTPS 経由のアクセス (HTTP over SSL) を有効化し、特にパスワードを送信するページにおいてはこれを必須とすることが推奨されます。ただし、HTTPS の利用でパフォーマンスの低下を招く場合があることには留意する必要があります。

HTTPS を使用せずに Jira を実行すると、インスタンスが中間者攻撃やDNS リバインディング攻撃などに晒される可能性があります。インスタンスでは HTTPS を有効化することをお勧めします。

はじめる前に

作業を始める前に、以下の点を確認してください :

  • サポート
    アトラシアン サポートでは、SSL のサポートは証明書を発行する認証局 (CA) に依頼します。このページにおける SSL 関連の説明は参考情報としてのみ提供されます。

  • Windows インストーラー
    "Windows インストーラー" は、Tomcat を実行するために独自の Java Runtime Environment (JRE) Java プラットフォームをインストールします。SSL 証明書をアップデートする場合は、JRE のインストレール中に行う必要があります。
  • 関連バグ
    Jira 7.3 以降は、server.xml ファイルのプロトコルを誤って設定する 2 つのバグの影響の影響を受けます。プロトコルを手動で設定することでこの課題を回避できます。

    詳細を読む...

    Jira 7.3.0 以降に影響する 2 つのバグ:

    JRASERVER-63734 - 課題詳細を取得中... ステータス

    JRASERVER-64082 - 課題詳細を取得中... ステータス

    回避策として、server.xml を手動で編集して、HTTPS コネクタのプロトコルを以下のように変更します。

    protocol="org.apache.coyote.http11.Http11NioProtocol"
  • Jira がリバース プロキシの背後にある場合
    Jira が Apache などのリバース プロキシの背後にホストされている場合は、「SSL を利用して Jira と Apache を連携する」をご覧ください。

Java キーストアの生成

このセクションでは、お客様の SSL 証明書を保存する Java キーストア (JKS) を作成します。SSL 証明書は、Jira において SSL 通信を行うためには必須のものです。SSL 証明書は一般的に 2 つの種類に区分されます :

証明書 説明 使用環境 手順
自己署名証明書

ウェブサーバー証明書の正当性を確認する方法のひとつである CA によるデジタル署名がない証明書です。自分自身が自己名で署名します。

テスト用、開発用、その他内部向けサーバーのみです。

1 〜 13
CA 署名証明書 認証局 (CA) のデジタル署名によって正当性が確認された証明書です。これにより、ブラウザやクライアントは証明書に信用を置くことが可能になります。 本番環境用サーバー 1 〜 21

信用のおけるサードパーティー認証局 (CA) が発行したデジタル証明書により、お客様のウェブサイトがお客様の会社を正当に代表するものであることが証明され、お客様の会社の実在が認証されます。多くの CA では単にドメイン名のみを認証する証明書を発行しますが、VeriSign などでは、お客様の事業活動の存在、ドメイン名の所有権の存在、証明書使用に関するお客様の権限などを証明する高度の認証を提供しています。

CA の一覧は、ここ をご覧ください。よく知られた認証局の例を次に示します:

当社としては、CA で署名された証明書の利用を推奨いたします。

お客様のサーバーに Portecle をインストールすることができない場合や、コマンドラインの利用をご希望の場合は、このページ下部にある コマンドラインを使用したインストール セクションをご覧ください。

  1. Portecle アプリをダウンロードし、Jira を起動させるサーバーにインストールします。
    (warning)このアプリケーションはサードパーティー製であり、アトラシアンではサポート対象外です。
  2. 適切な権限を持って実行できるよう、アプリを管理者として実行します。<JAVA_HOME> 変数が Jira で使う Java と同じバージョンを示していることを確認します。詳細情報は、「JAVA_HOME の設定」をご覧ください。
    (info) Linux / Unix サーバー上で実行している場合は、サーバーへの接続時に次のように X11 を転送することで GUI を利用できます。

    ssh -X user@server
  3. Create a new Keystore オプションを選択します。
  4. JKS形式を選択して OK をクリックします。
  5. Select the Generate Key Pair button:
  6. Key Algorithm では RSA を、Key Size では 2048 を選択します :
  7. Make sure the Signature Algorithm is "SHA256withRSA" and then edit the certificate details, as per the below example and select OK:

    (warning) The Common Name MUST match the server's URL, otherwise errors will be displayed in the browser.
    (info) If you would like to use SHA256withRSA, please use the appropriate Signature Algorithm, and refer to: Security tools report the default SSL Ciphers are too weak.
  8. 証明書のエイリアス名を指定します。ここでは、jira を使用しています。
  9. キーストアのパスワードを入力します (既定のパスワードは通常 changeit です)。
  10. 下の例のように、キーペアの生成が成功した旨のメッセージが表示されます :
  11. パスワードがステップ 11 と同一であることを確認し、キーストアを <Jira_HOME>/jira.jks に保存します。[ファイル] > [キーストアの保存] を選択して保存できます。

    自己署名証明書を使用する場合は、 Jira 設定ツールを利用した web サーバーの設定 に進んでください。それ以外の場合は次の手順に進みます。

  12. 認証局が証明書を署名して妥当性を検証するための、証明書署名要求 (CSR) を生成する必要があります。これを行うため、証明書上で右クリックし、[CSR の生成] を選択します。CSR ファイルを <JIRA_HOME>/jira.csr として保存します。
  13. CSR を認証局に送信して署名を求めます。認証局からは、署名済み証明書 (CA 応答) および CA のルート証明書/中間証明書のセットが返送されます。
  14. Import Trusted Certificate ボタンを使用して、ルート証明書と中間証明書の両方(もしくは一方)をインポートし、証明書ごとにこの手順を繰り返します。
  15. jira 証明書で右クリックし、[Import CA Reply] を選択して、署名付き証明書のインポートを開始します。
  16. CA から提供された証明書 (jira.crt) を選択します。これで、CA 応答のインポートが完了しました。
  17. 結果を、Tools > Keystore Report で確認します。証明書はルート証明書の子ノードに表示されます。
  18. キーストアを保存し、次のセクションに進みます :

Jira 設定ツールを利用した web サーバーの設定

このセクションでは、JIRA での SSL 暗号化設定の最後の手順として、Jira 設定ツールを利用した web サーバーの設定を行います。Jira 設定ツールの詳細は、Jira 構成ツールの利用 をご覧ください。

  1. 次のように Jira 設定ツールを起動します :
  2. [Web サーバー] タブをクリックします。
    スクリーンショット: Jira 設定ツール — [Web サーバー] タブ
  3. 各フィールドに次のように入力します :

    フィールド
    ポートの制御 通常はデフォルトのままとしますが、必要に応じてポート番号を変更することもできます。「Jira の TCP ポートの変更」をご覧ください。
    プロファイル Profile とはプリセットされたウェブサーバー動作設定です。次の 4 つの値から選択します :
    • 無効
    • HTTP のみ 
    • HTTP および HTTPS (HTTP を HTTPS へリダイレクト)
    • HTTPS のみ

    Jira を HTTPS 上で実行する場合は、'HTTP & HTTPS' または 'HTTPS' を選択する必要があります。
    Jira を HTTPS 上で実行するが、ユーザーに HTTP 経由でも Jira にアクセスさせる場合は、'HTTP & HTTPS' を選択する必要があります。'HTTP & HTTPS' を選択すると、HTTP 経由で Jira にアクセスするユーザーは HTTPS のアドレスにリダイレクトされます。

    HTTP ポート 通常はデフォルトのままとします(8080)。必要に応じてポート番号を変更することもできます。「Jira の TCP ポートの変更」をご覧ください。
    プロファイルとして "HTTPS のみ" を選択した場合、このフィールドは無効となります。
    HTTPS ポート 通常はデフォルトのままとします(8443)。必要に応じてポート番号を変更することもできます。「Jira の TCP ポートの変更」をご覧ください。
    Keystore パス 証明書のキーストアの場所を指定します。これは手順 13 でキーストアを保存した際に選択され、<Jira_HOME>/jira.jks となります。
    Keystore パスワード キーストアのパスワードを指定します。自己署名証明書を生成した場合は、このパスワードは手順 13 で証明書を生成したときにキーおよびキーストアに設定したパスワードです。
    Keystore エイリアス キーストア内のそれぞれの項目はエイリアスで区別されます。手順 10 で説明したように、証明書について jira を使用することを推奨します。
  4. Check Certificate in Key Store ボタンをクリックして、以下の項目を確認します :
    • キーストア内に証明書が存在すること。
    • キーストアのパスワードが有効であること。
    • キーエイリアスを使用してキーを見つけられること。
  5. Save ボタンをクリックして設定を保存します。

高度な設定

同一ホストにおける複数のインスタンスの実行

同一ホストで複数のインスタンスを実行する場合は、address 属性を <Jira_INSTALLATION>/conf/server.xml ファイルで指定することが重要です。これは、コネクタは既定では利用可能なすべてのネットワーク インターフェイス上でリッスンしているので、アドレスを指定することで、同一の既定ポート上で実行されるコネクタ間の衝突を防止するためです。アドレス属性の設定の詳細については、Apache Tomcat ドキュメントの「HTTP Connector」をご確認ください。

コマンドラインを使用したインストール

ステップ 1.キーストアを作成します

  1. Java キーストアの生成:

    <JAVA_HOME>/keytool -genkey -alias jira -keyalg RSA -keystore <Jira_HOME>/jira.jks

    (info)姓名 (first and last name) の部分には、サーバーの URL から "https://" を除いたもの (例えば jira.atlassian.com) を指定します。

  2. パスワードを入力します。
  3. 手順 2 のパスワードを使用して、署名のための CSR を生成します :
  4. 署名のため、CSR を CA に送信します。CA から、署名済み証明書および CA のルート証明書または中間証明書が返送されます。
    (warning) 証明書に署名がない場合、手順 7 に進んでください。
  5. ルート証明書、または中間証明書をインポートします :

    <JAVA_HOME>/keytool -import -alias rootCA -keystore <Jira_HOME>/jira.jks -trustcacerts -file root.crt
  6. (CA から提供された) 署名済み証明書をインポートします :

    <JAVA_HOME>/keytool -import -alias jira -keystore <Jira_HOME>/jira.jks -file jira.crt
  7. Keystore 内に証明書が存在することを検証します。

    <JAVA_HOME>/keytool -list -alias jira -keystore <Jira_HOME>/jira.jks

    これは PrivateKeyEntry である必要があります。異なる場合、証明書のセットアップは正常に完了しません。例:

    jira, Jan 1, 1970, PrivateKeyEntry,
    Certificate fingerprint (MD5): 73:68:CF:90:A8:1D:90:5B:CE:2A:2F:29:21:C6:B8:25

ステップ 2.Keystore で Tomcat を更新する

  1. 編集する前に、<Jira_INSTALL>/conf/server.xml のバックアップを作成します。
  2. HTTPS コネクタを編集し、キーストアを示すパラメーターを含めます。

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                  maxHttpHeaderSize="8192" SSLEnabled="true"
                  maxThreads="150" minSpareThreads="25"
                  enableLookups="false" disableUploadTimeout="true"
                  acceptCount="100" scheme="https" secure="true"
                  sslEnabledProtocols="TLSv1.2,TLSv1.3"
                  clientAuth="false" useBodyEncodingForURI="true"
                  keyAlias="jira" keystoreFile="<Jira_HOME>/jira.jks" keystorePass="changeit" keystoreType="JKS"/>

    (info) <Jira_HOME> に適切なパスを入力し、必要に応じてポートを変更します。

    組織が最新の TLS バージョンをサポートしていない場合は、以前のバージョンへフォールバックできます。次を変更します:

    sslEnabledProtocols="TLSv1.2,TLSv1.3"

    変更後:

    sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2,TLSv1.3"
  3. HTTP コネクタを編集し、HTTPS コネクタへリダイレクトするようにします。

    <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" port="8080" protocol="HTTP/1.1" redirectPort="<PORT_FROM_STEP_1>" useBodyEncodingForURI="true"/>

    (info) <PORT_FROM_STEP_1> が適切な値に変更されていることを確認します。この例では、8443 となります。

  4. 変更を server.xml に保存します。
  5. HTTPS へのリダイレクトを使用する場合 (推奨)、Jira_INSTALL>/WEB-INF/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>
  6. 変更を保存したら JIRA を再起動します。

また、Jira 構成ツールで「HTTP と HTTPS」プロファイルを選択し、HTTP URL から HTTPS URL へユーザーをリダイレクトすることもできます。この設定は、すべての HTTP URL を HTTPS URL へリダイレクトします。

特定のページのみを HTTPS へリダイレクトしたい場合、手動で行う必要があります。これを行うには、Jira 設定ツールで「HTTPS のみ」プロファイルを選択して設定を保存した後、HTTP URL を対応する HTTPS URL に手動でリダイレクトする、htaccess ファイルを Web サーバー上に作成します。

トラブルシューティング

上記にある通り Portecle を用いて生成した自己署名キーを使用する場合の、トラブルシューティングの TIPS をいくつか紹介します。

ブラウザに「https://localhost:<port number>」と入力したときに "Cannot establish a connection to the server at localhost:8443" のようなメッセージが表示される場合は、ログ ファイル logs/catalina.out でエラー メッセージを探します。ここには発生する可能性があるいくつかのエラーとそれぞれの説明を紹介します。

ここをクリックして展開...
  • SSL + Apache + IE の問題 : IEを使用して SSL 経由で添付書類をアップロードした場合にエラーとなることが報告されています。これは IE のバグが原因で、Apache において次の設定を行うことで解決できます :

    BrowserMatch ".MSIE." \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
    

    Google 検索を行うとこれに関する多くの情報が得られます。

  • キーストアが見つからない :

    java.io.FileNotFoundException: /home/user/.keystore (No such file or directory)
    

    これは、Tomcat がキーストアを見つけられなかったことを意味します。キーツール ユーティリティは、現在のユーザーのホーム ディレクトリに .keystore という名称のキーストアをファイルとして作成します。Unix / Linux ではホーム ディレクトリは多くの場合 /home/<username> です。Windows では多くの場合 C:\Documents And Settings\<UserName> です。

    キーストアを作成したユーザーと同一のユーザー名で Jira を実行していることを確認します。キーストアを作成したユーザーとはユーザー名が異なる場合や、Jira を Windows サービスとして実行している場合は、conf/server.xml でキーストア ファイルの場所を指定する必要があります。コメントを解除した Connector タグに次の属性を追加します。

    keystoreFile="<location of keystore file>"
    

    これ ("Cannot find /root/.keystore") は、keystoreFile 属性を https コネクタではなく server.xml の http コネクタに誤って追加した場合にも発生します。

  • キーストア内の証明書応答と証明書が同一 :

    keytool error: java.lang.Exception: Certificate reply and certificate in keystore are identical
    

    このエラーは、既存のキーストアで cert が再作成されたことによって、同一の名前またはフィンガープリントが存在する場合に発生します。Cert の再作成や更新を行う必要が生じた場合、既存のキーストアを削除して新しいキーストアを作成できます。この場合、新しいキーストアを作成して関連する cert を追加することで問題が解消されます。このドキュメントでは、既定のパスは $JAVA_HOME/jre/lib/security/cacerts です。

  • 不正なパスワード :

    java.io.IOException: Keystore was tampered with, or password was incorrect

    "changeit" 以外のパスワードが使われています。Tomcat のキー パスワードとキーストア パスワードの両方で "changeit" を使用するか、異なるパスワードを使用する場合は、前述のように Connector タグの keystorePass 属性にそれを指定する必要があります。

  • パスワードの不一致 :

    java.io.IOException: Cannot recover key
    

    Tomcat のキーストアパスワードとキーパスワードに異なるパスワードが使われていることを意味します。この二つのパスワードは同一でなければなりません。

  • 不正な証明書 :

    javax.net.ssl.SSLException: No available certificate corresponds to the SSL cipher suites which are enabled.
    

    キーストア内に複数の証明書がある場合、conf/server.xml 内の SSL Connector タグで指定がある場合を除き、Tomcat は最初に返された証明書を使用します。

    次の例に示すように、コメントを解除した Connector タグに keyAlias 属性を追加し、関連するエイリアスを設定します。

     <Connector port="8443" maxHttpHeaderSize="8192"
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" disableUploadTimeout="true" useBodyEncodingForURI="true"
    acceptCount="100" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS"
    keystoreFile="/opt/local/.keystore"
    keystorePass="removed"
    keyAlias="tomcat"/>
  • Apache Portable Runtime (APR) の使用 :

    APR では異なる SSL エンジンが使用されており、次のような例外処理情報がログに記録されることがあります。

     SEVERE: Failed to initialize connector [Connector[HTTP/1.1-8443]]
    LifecycleException:  Protocol handler initialization failed: java.lang.Exception: No Certificate file specified or invalid file format

    これは APR コネクターが OpenSSL を使用しており、キーストアの使用方法が異なることが原因です。この問題の解決策は 2 通りあります :


    • server.xml ファイルを編集して、アンコメントしたコネクタータグが APR プロトコルの代わりに Http11NioProtocol を指定することによって、Http11NioProtocol を使用して SSL コネクションを処理することができます。

      <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
        maxHttpHeaderSize="8192" SSLEnabled="true" keystoreFile="${user.home}/.keystore"
        maxThreads="150" enableLookups="false" disableUploadTimeout="true"
        acceptCount="100" scheme="https" secure="true"
        clientAuth="false" sslProtocol="TLS" useBodyEncodingForURI="true"/>
    • コネクターが APR プロトコルを使用するように設定変更してください。この方法は証明書および秘密鍵に PEM エンコーディングを使用している場合にのみ有効です。キー生成の際に OpenSSL を使用している場合は、これらのファイルは PEM エンコーディングされています ‐ それ以外の場合はご利用の認証局にお問い合わせください。

      <Connector
        port="8443" maxThreads="200"
        scheme="https" secure="true" SSLEnabled="true"
        SSLCertificateFile="${user.home}/certificate.pem"
        SSLCertificateKeyFile="${user.home}/key.pem"
        clientAuth="optional" SSLProtocol="TLSv1.2,TLSv1.3"/>
      
  • クライアント認証の有効化 : Tomcat でクライアント認証を有効にするには、Tomcat の server.xml ファイルにある Connector 要素の clientAuth 属性の値が true である必要があります。

    <Connector
    	...
    	clientAuth="true"
    	... />

    Connector 要素のパラメーターの詳細については、Tomcat 8 ドキュメントの「SSL Configuration HOW-TO」をご参照ください。

最終更新日 2019 年 8 月 14 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.