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 の統合をご参照下さい。
自動的にSSL証明書を追加します!
このプロセス用に Jira SSL Atlassian Labs アプリを提供しています。本ドキュメントを読み進める前に、このアプリをインストールして使用してください。
On this page:
問題症状が発生した場合
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 は「とにかく続行」することができないため、証明書を拒否します。
原因
Jira が SSL (例: HTTPS、IMAPS、LDAPS) で他のアプリケーションへの接続を試みる際、Jiraは信頼できるアプリケーションに のみ 接続できます。Java (Jira は Java で作成されています) での信頼関係の処理は、キーストア (通常は $JAVA_HOME/lib/security/cacerts
) / トラスト ストアの有無に応じます。これは既知のすべての CA 証明書の一覧を含み、Java はそのような CA 証明書が署名した証明書、またはその キーストア内にある公開証明書のみを信頼します。例えば、アトラシアンの証明書は次のようになります。
We can see the *.atlassian.com certificate has been signed by the intermediate certificates, DigiCert High Assurance EV Root CA and DigiCert High Assurance CA-3. These intermediate certificates have been signed by the root Entrust.net Secure Server CA. Those three certificates combined are referred to as the certificate chain. As all of those CA certificates are within the Java keystore (cacerts
), Java will trust any certificates signed by them (in this case, *.atlassian.com). Alternatively, if the *.atlassian.com certificate was in the keystore, Java would also trust that site.
この問題は、自己署名 (認証局の署名がない) がされた証明書、または Java キーストアに存在しない証明書チェーンから発生します。問題が発生すると、Jira は証明書を信用しなくなるため、アプリケーション接続が出来なくなります。
ソリューション
In order to resolve this, the public certificate need to be imported in the Java keystore that Jira uses. In the example above, this is *.atlassian.com and we cover how to install it below.
お客様のサーバーに Portecle をインストールすることができない場合や、コマンドラインの利用をご希望の場合は、このページ下部にある コマンドラインを使用したインストール セクションをご覧ください。
サーバーの公開証明書を取得、インポートする
- Download and install the Portecle app onto the server that runs Jira.
This is a third-party application and not supported by Atlassian. 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.
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
- [調査] メニューを選択し、[SSL/TLS 接続の調査] をクリックします。
- ターゲットとなるシステムの SSL ホストとポートを入力します。
- 読み込みが完了されるまで待ちます。完了したら、パブリック証明書を選択し、PEM をクリックします。
- 証明書をエクスポートし、保存します。
- メインの画面に戻り、[ディスクから既存のキーストアを開く] オプションから
cacerts
ファイル (例:$JAVA_HOME/lib/security/cacerts
) を選択し、パスワード (既定ではchangeit
) を入力します。 - [信頼済みの証明書をロードされたキーストアにインポートする] ボタンを選択します。
- ステップ 6 で保存した証明書を選択し、適切なエイリアス (例: confluence) を付与して、信頼済みであることを確認します。
- 次のようなエラーが表示される可能性があります。
- これが発生した場合、[OK] をクリックして証明書を信頼済みとして許可します。
- 次のようなエラーが表示される可能性があります。
- キーストアをディスクに保存します。
- Jira を再起動します。
- ホストに接続できることをテストします。
コマンド ラインを使用したインストール
証明書を取得する (以下のコマンドの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
The command above will only be executed if you have Sed for Windows as well as OpenSSL installed on your environment. If you don't have Sed you don't want to install it, use the instructions below as an alternative. Issue the following command:
openssl s_client -connect google.com:443
出力を
public.cert.
というファイルに保存します。public.cert
ファイルを編集し、BEGIN CERTIFCATE
とEND 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-----
証明書をインポートします。
<JAVA_HOME>/keytool -import -alias <server_name> -keystore <JAVA_HOME>/lib/security/cacerts -file public.crt
Windows を使用している場合、cacerts パス全体を引用符で囲むようにします。
<JAVA_HOME>\keytool -import -alias <server_name> -keystore "F:\Program Files\Atlassian\JIRA\jre\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 サイトへのアクセスを行えなくなるためです。代わりに、新しい証明書 (自己署名証明書など) をシステムレベルのキーストア (上記) に追加することをおすすめします。
デバッグ
次のような問題が発生する場合があります。
- 証明書が正しくないキーストアにインストールされている。
- 接続しようとしている SSL サービスの証明書がキーストアに含まれていない。