Jira サーバーから外部システムへの SSL 接続に失敗する
症状
- SSL 接続でテストメールを送信すると、メールが送信されない。
- Jira アプリケーションは、UPM にアクセスしてプラグインをインストール/アップグレードできなくなる
atlassian-jira.log
に次のメッセージが表示される。
com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at com.sun.jersey.client.apache.ApacheHttpClientHandler.handle(ApacheHttpClientHandler.java:202)
at com.sun.jersey.api.client.Client.handle(Client.java:365)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:556)
at com.sun.jersey.api.client.WebResource.get(WebResource.java:178)
at com.atlassian.plugins.client.service.product.ProductServiceClientImpl.getProductVersionsAfterVersion(ProductServiceClientImpl.java:82)
at com.atlassian.upm.pac.PacClientImpl.getProductUpgrades(PacClientImpl.java:111)
at com.atlassian.upm.rest.resources.ProductUpgradesResource.get(ProductUpgradesResource.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$ResponseOutInvoker$1.invoke(DispatchProviderHelper.java:206)
at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$1.intercept(DispatchProviderHelper.java:90)
at com.atlassian.plugins.rest.common.interceptor.impl.DefaultMethodInvocation.invoke(DefaultMethodInvocation.java:61)
at com.atlassian.plugins.rest.common.expand.interceptor.ExpandInterceptor.intercept(ExpandInterceptor.java:38)
at com.atlassian.plugins.rest.common.interceptor.impl.DefaultMethodInvocation.invoke(DefaultMethodInvocation.java:61)
at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper.invokeMethodWithInterceptors(DispatchProviderHelper.java:98)
at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper.access$100(DispatchProviderHelper.java:28)
at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$ResponseOutInvoker._dispatch(DispatchProviderHelper.java:202)
...
Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
...
Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
...
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
原因
JVM が SSL に必要な javax.net.ssl.trustStore
を見つけられないか、必要な証明書が含まれていないか、予期された形式ではありません。
標準インストールでは、この JVM 引数を使用することはお勧めしません。代わりに、JVM のデフォルトのキーストアに証明書が追加されます。このキーストアは、通常は $JAVA_HOME/jre/lib/security/cacerts
または Tomcat で使用されるキーストアにあります。「SSL または HTTPS 上で Jira アプリケーションを実行する 」に記載の通りです。
その場合、Jira プロセスを実行しているユーザーが cacerts
ファイルにアクセスする適切な権限を持っていることを確認します。
ソリューション
「SSL サービスへの接続」を参照してください。このドキュメントでは、アクセスするサービスの証明書を取得し、推奨されるJava キーストアにインポートする手順を説明しています。さらに、現在のキーストア タイプを確認してください。
<JAVA_HOME>/bin/keytool -list -keystore <JAVA_HOME>/lib/security/cacerts>
出力結果からキーストアが PKCS であることがわかった場合は、JKS に変換する必要があります。すべての手順が完了したら、変更を有効にするために Jira を再起動する必要があります。
keytool -importkeystore -srckeystore cacerts -destkeystore cacertsJKS -deststoretype JKS
そして、初期状態の cacerts を cacertsPKCS に、cacertsJKS を cacerts に名前変更します。
Tomcat で指定されているような標準以外のキーストアを使用している場合は、そのキーストアに証明書をインポートしてください。