SSL サービスに接続する

お困りですか?

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

コミュニティに質問

アトラシアンのアプリケーションはSSLに対応しています。しかし、アトラシアンのサポートはその設定に対して支援は行いません。つまり、アトラシアンはSSLに関するあらゆるサポートの提供の保証はできません

  • SSL証明書の変更に際してサポートが必要であれば、証明書の提供元のベンダーに相談してください。
  • 設定について支援が必要な場合、Atlassian Answers に質問をご登録ください。

本ページでは、JIRA、Confluence等のウェブアプリケーションを SSL ラッピングされた多種プロトコル経由の SSL 上で外部サーバーに接続して取得する手順について説明します。 SSL サービスは以下の作業を実行する場合に必要です。

  • Confluence マクロで https://... URL を参照する。
  • IMAPS サーバーを使用して JIRA でメールを取得する。
  • SMTP over SSL (SSL) を使用して JIRA でメールを送信する。
  • SSL 上で LDAP ディレクトリに接続する。
  • SSL 上で Trusted Applications を設定する。

JIRA 自体を SSL 上で実行する場合は、SSL または HTTPS 上で JIRA アプリケーションを実行または SSL を使った JIRA と Apache の統合をご参照下さい。

tip/resting Created with Sketch.

自動的にSSL証明書を追加します!

このプロセスは、JIRA SSL「Atlassian Labs」プラグインで実行出来ます。 本ドキュメントを進める前に、プラグインをインストールしてお使い下さい。

このページの内容:

問題症状が発生した場合

SSL で暗号化された URL (HTTPS、LDAPS、IMAPS など) にアクセスしようとすると、例外をスローし、JIRA が接続を拒否する。例:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
 at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:441)
 at javax.mail.Service.connect(Service.java:233)
 at javax.mail.Service.connect(Service.java:134)

これは自己署名で暗号化されたページにアクセスする際に Chrome で発生する以下のエラーと同じですが、Java は「とにかく続行」することができないため、証明書を拒否します。

原因

Whenever JIRA attempts to connect to another application over SSL (e.g.: HTTPS, IMAPS, LDAPS), it will only be able to connect to that application if it can trust it. The way trust is handled in the Java world (this is what JIRA is written in) is that you have a keystore (typically $JAVA_HOME/lib/security/cacerts) or also known as the trust store. This contains a list of all the known CA certificates and Java will only trust certificates that are signed by those CA certificate or public certificates that exist within that keystore. For example, if we look at the certificate for Atlassian:

*.atlassian.com の証明書は、複数の中間証明書、DigiCert High Assurance EV Root CA、および DigiCert High Assurance CA-3 により署名されています。これらの中間証明書はルートの Entrust.net Secure Server CA によって署名されています。これら 3 つの証明書は合わせて証明書チェーンと呼ばれます。これらすべての CA 証明書が Java キーストア (cacerts ファイル) にある場合、Java はそれら (この場合は*.atlassian.com) が署名したすべての証明書を信頼します。また、*.atlassian.com 証明書がキーストアにあった場合、Java はそのサイトも信頼します。

この問題は、自己署名 (認証局の署名がない) がされた証明書、または Java キーストアに存在しない証明書チェーンから発生します。問題が発生すると、JIRA は証明書を信用しなくなるため、アプリケーション接続が出来なくなります。

ソリューション

これを解決するには、JIRAが使用している Java キーストアに公開証明書をインポートする必要があります。上記の例では、これは *.atlassian.com であり、以下にインストール方法を説明します。

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

サーバーの公開証明書を取得、インポートする

  1. Portecle アプリをダウンロードし、JIRA を起動させるサーバーにインストールします。
    (warning)このアプリケーションはサードパーティー製であり、アトラシアンではサポート対象外です。
  2. Ensure the <JAVA_HOME> variable is pointing to the same version of Java that JIRA uses. See our Setting JAVA_HOME docs for further information on this.
    (info) If running on a Linux/UNIX server, X11 will need to be forwarded when connecting to the server (so you can use the GUI), as below:

    ssh -X user@server
  3. [調査] メニューを選択し、[SSL/TLS 接続の調査] をクリックします。
  4. ターゲットとなるシステムの SSL ホスト、ポートを入力します。
  5. ローディングが実行されるまでしばらく待ちます。ローディング後に公開証明書を選択し、PEM をクリックします。
  6. 証明書をエクスポートし、保存します。
  7. メインの画面に戻り、[ディスクから既存のキーストアを開く] オプションから cacerts ファイル (例: $JAVA_HOME/lib/security/cacerts) を選択し、パスワード (既定では changeit) を入力します。
  8. [信頼済みの証明書をロードされたキーストアにインポートする] ボタンを選択します。
  9. 手順 6 で保存した証明書を選択し、信頼できるかどうか、適切なエイリアス (例:confluence) が与えられているかどうかを確認します。
    1. 以下の様なエラーが表示された場合: 
    2. 該当する場合は 、OK をクリックして信用された証明書を受諾します。
  10. キーストアをディスクに保存します。
  11. Jira を再起動します。
  12. ホストに接続できるかテストします。

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

  1. 証明書を取得する (以下のコマンドのgoogle.comを JIRA が接続しようとしているサーバーの FQDN に置き換えます) 。
    対象サーバーが Unix の場合:

    openssl s_client -connect google.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > public.crt

    Windows:

    openssl s_client -connect google.com:443 < NUL | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > public.crt

    上記コマンドは、動作環境にインストールされた Windows 対応 Sed OpenSSL のみで実行出来ます。(info)どちらもインストールしていない、またはインストールする予定がない場合は、以下の使用説明書を別対策としてお使い下さい。以下のコマンドを発行します。

    openssl s_client -connect google.com:443

    出力を public.cert. というファイルに保存します。public.cert ファイルを編集し、BEGIN CERTIFCATEEND CERTIFICATE の間の内容だけを含むようにします。編集後は次のようになります。

    -----BEGIN CERTIFICATE-----
    < Certificate content as fetched by the command line. 
    Don't change this content, only remove what is before 
    and after the BEGIN CERTIFICATE and END CERTIFICATE. 
    That's what your Sed command is doing for you :-) >
    -----END CERTIFICATE-----
  2. 証明書をインポートする。

    <JAVA_HOME>/keytool -import -alias <server_name> -keystore <JAVA_HOME>/lib/security/cacerts -file public.crt

 

他のキーストアの場所

Java は通常 $JAVA_HOME/jre/lib/security/cacerts にあるシステムレベルのキーストアを使用しますが、-Djavax.net.ssl.trustStore=/path/to/keystore のパラメータを指定することで、異なるキーストアを使用できます。2/path/to/keystore" の部分を、使用するキーストアの絶対パスに置き換えます。

ただし、この設定は推奨されません。これは、Java にカスタム キーストア (例: 自己署名証明書を含むもの) を使うように指定すると、 Java は $JAVA_HOME/jre/lib/security/cacerts に含まれる署名認証局のルート証明書へのアクセスや、認証局が署名したほとんどの SSL サイトへのアクセスを行えなくなるためです。代わりに、新しい証明書 (自己署名証明書など) をシステムレベルのキーストア (上記) に追加することをおすすめします。

デバッグ

問題は主に次の2つのうちのいずれかです。

  • 証明書が正しくないキーストアにインストールされている。
  • 接続しようとしている SSL サービスの証明書がキーストアに含まれていない。
以下も参照して下さい
最終更新日 2017 年 4 月 28 日

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

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