Cloud アプリケーション リンクと SSL
症状
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)
もう 1 つの事象として次のような有名な画面が表示されることがあります。
これは自己署名証明書で暗号化されたページにアクセスする際にブラウザーで発生する次のエラーと同じですが、Java では「Proceed anyway (とにかく続行)」することができないため、証明書が拒否されます。これは、使用しているブラウザーではなく、Java の仕組みによるものです。
診断
SSL が必要です。まだ持っていない場合は、認証局から SSL 証明書を取得する方法に従ってください。
認証局の証明書
信頼できるサードパーティ認証局 (CA) が発行したデジタル証明書により、Web サイトのアイデンティティが証明されます。多くの CA はドメイン名のみを認証する証明書を発行するだけです。Comodo などの他のいくつかの CA は、事業活動の存在、ドメイン名の所有権、証明書使用に関する権限などを証明する高度な身元確認 / 認証を標準で提供しています。
要件が正しく設定されていることを確認しましょう。
すべてのアプリ
- Cloud サイトにリンクするオンプレミス アプリは、サポートされているポート (80、443、8080、8443、8444、7990、8090、8085、8060、8900、9900) 経由でアクセスできる必要があります。
- SSL を使用する場合、自己署名証明書ではなく有効な証明書を使用する必要があります。サポートされている CA のリストはここに掲載されています。
また、このリンクを使用して、SSL が正しく設定されていることを確認してください。
原因
Jira が SSL (例: HTTPS、IMAPS、LDAPS) で他のアプリへの接続を試みる際には、信頼できるアプリにのみ接続できます。Java (Jira の作成に使用されているもの) での信頼関係の処理は、キーストア (通常は $JAVA_HOME/lib/security/cacerts
) / トラスト ストアの有無に応じます。これは既知のすべての CA 証明書のリストを含み、Java はこれらの CA 証明書によって署名された証明書、またはそのキーストア内にある公開証明書のみを信頼します。
たとえば、アトラシアンの証明書は次のようになります。
これを見ると、*.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 は証明書を信用しなくなるため、アプリケーション接続が出来なくなります。
ソリューション
- これで証明書を取得できましたので、最終段階になりました。SSL がインストールされたので、問題ないか確認しましょう。必ず上記の SSL チェッカーを使用してください。
- それでも問題が解決しない場合は、認証局プロバイダーに連絡して、SSL 証明書が正しいことを確認してください。
すべてのアプリ
- Cloud サイトにリンクするオンプレミス アプリは、サポートされているポート (80、443、8080、8443、8444、7990、8090、8085、8060、8900、9900) 経由でアクセスできる必要があります。
- SSL を使用する場合、自己署名証明書ではなく有効な証明書を使用する必要があります。サポートされている CA のリストはここに掲載されています。
また、このリンクを使用して、SSL が正しく設定されていることを確認してください。
SSLPoke
添付の SSLPoke.classJava プログラム (ソース) はデバッグに役立ちます。これは、単に SSL サービスへの接続、入力バイトの送信、出力の監視を行うものです。たとえば、信頼できない (自己署名) 証明書を使用して、ポート 443 (HTTPS の既定) でローカル HTTPS サーバーに接続すると、次のようになります。
USERNAME:~$ java SSLPoke localhost 443 sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:285) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191) ... at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:73) at SSLPoke.main(SSLPoke.java:28) Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174) at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238) at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:280) ... 15 more |
そして、CA によって認証された証明書に接続すると、次のようになります。
USERNAME:~$ java SSLPoke mail.atlassian.com 443 Successfully connected |
正常に接続されたことを示しています。
java -Djavax.net.ssl.trustStore= /my/custom/keystore SSLPoke localhost 443 |
これが失敗した (問題が確認された) 場合のソリューションは、-Djavax.net.ssl.trustStore
パラメーターを削除し、keytool -importkeystore -srckeystore /my/custom/keystore -destkeystore $JAVA_HOME/jre/lib/security/cacerts
を使用してカスタム キーストア証明書をメインのキーストアにインポートして、アプリを再起動することです。
証明書が Java によって信頼されて検出され、低レベルの SSL 問題がある場合は、-Djavax.net.debug=all
プロパティを設定することで stdout ログでデバッグ情報を取得できます。
それでも問題が解決しない場合は、サービスの再起動が必要になることもあります。