エラー-trustAnchorsパラメータは空でない必要があります


492

Jenkins / Hudsonで電子メールを設定しようとすると、常にエラーが表示されます。

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be
    non-empty

エラーについてオンラインでかなりの量の情報を見ましたが、何も動作しません。Fedora Linux(OpenJDKではない)でSunのJDKを使用しています。

これが私が試したいくつかのことです。この投稿のアドバイスに従ってみましたが、WindowsからJenkinsをホストしているFedoraボックスにcacertsをコピーできませんでした。GmailをSMTPサーバーとして設定しようとしているため、このガイドに従ってみましたが、うまくいきませんでした。また、これらのcacertファイルを手動でダウンロードして移動し、このガイドのさまざまなコマンドを使用してJavaフォルダーに移動しようとしました。

私は現在立ち往生しているので、私はどんな提案にも開いています。Windows Hudsonサーバーで動作させることができましたが、Linuxで苦労しています。

回答:


513

この奇妙なメッセージは、指定したトラストストアが次のとおりだったことを意味します。

  • 空の、
  • 見つからない、または
  • 開くことができませんでした(たとえば、アクセス許可のため)。

以下の @AdamPlumbの回答も参照してください

この問題をデバッグし(ここで書きまし)、使用されているトラストストアを理解するには、 javax.net.debug = all プロパティを追加してトラストストアに関するログをフィルタリングします。プロパティjavax.net.ssl.trustStoreを操作して、特定のトラストストアを指定することもできます。例えば ​​:


    java -Djavax.net.debug=all -Djavax.net.ssl.trustStore=/Another/path/to/cacerts -jar test_get_https-0.0.1-SNAPSHOT-jar-with-dependencies.jar https://www.calca.com.py 2>&1| grep -i truststore

1
EJPに感謝します。ここにあなたの投稿を見ましが、トラストストアがそこにあることを確認する方法がわかりませんでした。また、server.xmlファイルを表示しましたが、トラストストアが設定されていることを確認する方法がわかりませんでした。keystoreFile = "conf / .keystore"設定を確認するだけですか(keystoreFileがそのファイルに存在しませんでした)?
David Gill、

2
答えは私がそれをどのようにインポートしているかでした。私は重要な一歩を逃したようです。参照[JavaのエラーInvalidAlgorithmParameterExceptionが] [1] [1]:jyotirbhandari.blogspot.com/2011/09/...
デヴィッド・ギル

2
この答えが正しいことを確認しました。Tomcatでエラーが発生しました。トラストストアはありまし${CATALINA_HOME}\confCATALINA_HOMEが、設定されていなかったため、Tomcatは\confトラストストアを探していました。
SingleShot

4
@BubblewareTechnologyいいえ、エラーはファイル名にありました。証明書をファイルにインポートした方法ではありません。あなたのブログは正しくありません。また、JRE $ / cacertsファイルの変更を推奨するべきではありません。次のJavaアップグレードが変更されます。それをコピーし、独自の証明書をコピーに追加して、そのコピーをトラストストアとして使用するプロセスが必要です。すべてのJavaアップグレードを繰り返します。また、Javaに独自のトラストストアについて伝える必要はまったくありません。異なる場合は、自分のトラストストアについてのみ教えてください。
ローン侯爵14

3
ひねりを加えます。トラストストアが存在し、アクセス可能で、正しい形式である場合でも、それがCOMPLETELY EMPTYであれば、さまざまなライブラリ(Apache HttpClientを含む)で取得できるエラーです。
アランフランゾーニ2017

265

Ubuntu 18.04、このエラーは別の原因(JEP 229からスイッチがあるjksのキーストアのデフォルトフォーマットpkcs12形式、およびDebianは新しいファイルのデフォルトを使用してファイル生成をCACERTS)と回避策を

# Ubuntu 18.04 and various Docker images such as openjdk:9-jdk throw exceptions when
# Java applications use SSL and HTTPS, because Java 9 changed a file format, if you
# create that file from scratch, like Debian / Ubuntu do.
#
# Before applying, run your application with the Java command line parameter
#  java -Djavax.net.ssl.trustStorePassword=changeit ...
# to verify that this workaround is relevant to your particular issue.
#
# The parameter by itself can be used as a workaround, as well.

# 0. First make yourself root with 'sudo bash'.

# 1. Save an empty JKS file with the default 'changeit' password for Java cacerts.
#    Use 'printf' instead of 'echo' for Dockerfile RUN compatibility.
/usr/bin/printf '\xfe\xed\xfe\xed\x00\x00\x00\x02\x00\x00\x00\x00\xe2\x68\x6e\x45\xfb\x43\xdf\xa4\xd9\x92\xdd\x41\xce\xb6\xb2\x1c\x63\x30\xd7\x92' > /etc/ssl/certs/java/cacerts

# 2. Re-add all the CA certs into the previously empty file.
/var/lib/dpkg/info/ca-certificates-java.postinst configure

ステータス(2018-08-07)、Ubuntu Bionic LTS 18.04.1およびUbuntu Cosmic 18.10でバグが修正されました。


🗹 1770553:[SRU] cosmicからca-certificates-javaをバックポートする(20180413ubuntu1)

🗹Ubuntu 1769013:Debian不安定版(メイン)のca-certificates-java 20180413(メイン)をマージしてください

🗹 1739631:JDK 9でのフレッシュインストールは、生成されたPKCS12 cacertsキーストアファイルを使用できません

🗹 -library 145:9-jdkイメージにSSLの問題がある

🗹 894979:ca-certificates-java:OpenJDK 9では機能しません。アプリケーションはInvalidAlgorithmParameterExceptionで失敗します:trustAnchorsパラメーターは空でない必要があります

🗹 -8044445:JEP 229:デフォルトでPKCS12キーストアを作成

🖺JEP 229:デフォルトでPKCS12キーストアを作成する


この回避策を実行しても問題が解決しない場合は、修正したJavaディストリビューションを実際に実行していることを確認してください。

$ which java
/usr/bin/java

次のコマンドを使用すると、Javaの代替を「自動」に設定できます。

$ sudo update-java-alternatives -a
update-alternatives: error: no alternatives for mozilla-javaplugin.so

実行しているJavaのバージョンを再確認できます。

$ java --version
openjdk 10.0.1 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)

代替の回避策もありますが、これらには独自の副作用があり、将来のメンテナンスが必要になります。

次善の策は行を追加することです

javax.net.ssl.trustStorePassword=changeit

ファイルへ

/etc/java-9-openjdk/management/management.properties
/etc/java-11-openjdk/management/management.properties

どちらか存在します。

3番目に問題の少ない回避策は、値を変更することです

keystore.type=pkcs12

keystore.type=jks

ファイル内

/etc/java-9-openjdk/security/java.security
/etc/java-11-openjdk/security/java.security

どちらかが存在する場合、cacertsファイルを削除し、投稿の上部にある回避策スクリプトの最後の行で説明されている方法でファイルを再生成します。


50
Ubuntu 18ユーザー、これを読んでください!これはあなたの人生の多くの時間を節約します!ありがとうございました!
VAK

5
この回答は、Ubuntu 18.04のmavenで同じエラーを修正するのに役立ちました。/ etc / ssl / certs / java / cacertsファイルの所有者をrootから自分自身に変更して、書き込みできるようにする必要がありました。その後、元に戻しました。
Yuri Gor

77
私はsudo rm / etc / ssl / certs / java / cacertsを実行し、次にsudo update-ca-certificates -fを実行しました。これにより、kubuntu 18.04での問題が修正されました。
jsn

2
@jsnは、ソリューションのおかげで、ubuntu 18.04に基づくLinux mint 19でも動作します
Samrat

2
@jsnのソリューションは、Debian Stretch + openjdk8
HRJ

105

これでUbuntuでの問題が解決しました:

sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

(ここにあります:https : //bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760

ca-certificates-java Oracle JDK / JREの依存関係ではないため、これは明示的にインストールする必要があります。


2
おかげで、これにより、Ubuntu 15.04で問題が発生したときに問題が解決しました。
Macil 2015年

Raspberry PiでRaspbianに
取り組みました

1
OpenJDK8でDebian jesseの安定したバックポートでこの問題に遭遇し、これにより問題が修正されました。Dockerイメージのビルド中にこれを使用していました。:)
Tuxdude 2016年

9
残念ながら、Ubuntu MATE 18.04では機能しません。Javaを再インストールしてみます。
Pranav A.

1
@codefx-私はあなたが提案したことを実行しましたが、機能しません-Java 10を備えたUbuntu 18.x(デフォルト)。
mzedeler 2018

69

Ubuntu 18.04では、根本的な原因は、openjdk-11-jdk(デフォルト)とそれに依存する他のパッケージ間の競合です。これはすでにDebianで修正されており、まもなくUbuntuにも含まれる予定です。一方、最も簡単な回避策は、Javaをバージョン8に降格することca-certificates-javaです。採用している他のソリューションは、はるかに複雑です。

まず、競合するパッケージを削除します。

sudo apt-get remove --purge openjdk* java-common default-jdk
sudo apt-get autoremove --purge

次の方法で、関連するすべてのパッケージが正常に削除されたかどうかを確認します。

sudo update-alternatives --config java

システムはconfig使用可能なJavaがないことを通知する必要があります。それ以外の場合、この回避策は失敗します。。。

次に、必要なパッケージを再インストールします。

sudo apt-get install openjdk-8-jdk

この説明は事実上正しくなく、Windowsを再インストールすると問題が解決する可能性があるのと同じ意味でのみ問題が修正されます。すべてのJavaパッケージを削除する必要はありません。この方法で移動したい場合は、openjdk-8-jdkパッケージをインストールして/etc/ssl/certs/java/cacertsファイルを削除し、実行するだけです。sudo update-ca-certificates -fこれは、このスレッドの他の場所で説明されているようpkcs12に、jksフォーマットされたcacertsファイルからフォーマットされたcacertsファイルに切り替える方法です。
ミカエルゲック

1
@MikaelGueckロジックはあなたの側にあるようですが、私はあなたが以前あなたのコメントと他のほとんどの投票された回答で説明されていることを正確に行ったことを保証するためにここにいます、そして18.04でこれがうまくいった唯一の回答です。私はあなたの反対票が賛成票に変わるべきだと思います。
Andrea Ligios

@AndreaLigios、あなたは自分でスクリプトを読むことができます、それらはかなり短いです。彼らは、8から10までのハードコードされた一連のJAVA_HOMEパスを持ち、一度に1つずつ試行します。また、既存のファイル形式を使用する、読み取り可能なDebian CAファイルジェネレーターを呼び出します。これは、JDKキーファイルハンドラーコードにより、あなたが読むことができ、互換性のフォールバックモードがあります。コンピューターでこの単純なソフトウェアを別の方法で実行すると、他の問題が発生する可能性があります。削除すると代替がリセットされる可能性があるため、Javaの代替を変更し、他のJVMを呼び出しましたか?
ミカエルゲック

1
@MikaelGueckはい、以前の試みの1つで、Javaの代替案を変更したので、おそらくそうでした。私はソースコードを掘り下げて、どのように機能するかを見つけるのが好きな最初の人ですが、これは今日の目標ではなく、実際の目標を達成するために5〜6種類の予期しない障害の1つにすぎませんでした。この答えにより、2分未満で問題を解決できました。スクリプトを調べてより良い解決策を見つけるには、どのくらいの時間を費やす必要がありますか?そして何のために、数メガバイトを節約するのですか?これは抜本的ですが、機能します(問題が何であっても)、地獄のように忙しい人のためにOPに感謝します
Andrea Ligios

1
私は2日間解決策を探していましたが、あなたの答えは私の問題を解決しました、ありがとう。私はKubuntu 18.04に移動しましたが、これでうまくいきました。
guepardomar 2018

55

EJPは基本的に質問に答えました(そして、私はこれが受け入れられた答えを持っていることを理解しています)が、私はこのエッジケースの落とし穴に対処し、私のソリューションを不滅にしたかったのです。

私が持っていたInvalidAlgorithmParameterExceptionホストされた上でエラーをJiraの私が以前にSSL専用アクセス用に設定していたことをサーバーに。問題は、PKCS#12形式でキーストアを設定したのに、トラストストアがJKS形式であったことです。

私の場合、server.xmlkeystoreTypeをPKCSに指定するようにファイルを編集しましたが、truststoreTypeを指定しなかったため、デフォルトでkeystoreTypeが何であっても設定されます。JKSがtruststoreTypeを明示的に指定することで解決されました。


まあ、私はあなたがあなたのエッジケースの落とし穴に対する不滅のソリューションを手助けします。それが面白くなるところです。
n611x007 2015

2
これはまさに私の問題でした。私はSpring Boot 1.4.2.RELEASEを使用しており、ハードウェアキーストアとソフトウェアトラストストアを持っていました。キーストアのプロバイダーとタイプを指定しましたが、トラストストアは指定しませんでした。その結果、トラストストアは誤ったプロバイダーとタイプを使用していました。それら(SUNおよびJKS)を指定すると、問題が解決しました。
Kenco

12
どのように正確にこれをしましたか?(ウィンドウはここ)
tatsu

2
今日、Androidのグランデでこれに遭遇しました。私はあなたの言うことはほとんど理解していますが、あなたはそれを解決する方法を言っていません。役に立たない答え
Lothar

52

私はブログ投稿からこの解決策に出くわしました。OSXでOpenJDK 7を実行するときのtrustAnchors問題の修正

OS XでOpenJDK 7を実行しているときのtrustAnchors問題の修正。OSXでOpenJDK 7を実行していて、この例外が発生している場合:

Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors
    parameter must be non-empty

簡単な修正があります。AppleのJDK 1.6が使用するのと同じcacertsファイルにリンクするだけです。

cd $(/usr/libexec/java_home -v 1.7)/jre/lib/security
ln -fsh /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts

インストールしたOpenJDKのバージョンごとにこれを行う必要があります。-v 1.7修正したいバージョンに変更するだけです。実行/usr/libexec/java_home -Vして、インストールしたすべてのJREとJDKを確認します。

おそらく、OpenJDKの人たちはこれをインストールスクリプトに追加することができます。


1
私の "ln"コマンド(OSX 10.6.8)には "h"オプションがありません。それは何をするつもりですか?
アンドリュース

1
ああ、私は2つの「ln」コマンドを使用しました。1つは/ usr / bin(デフォルト)にあり、もう1つは/ binにあります。後者には「h」オプションがあり、機能しました。
アンドリュース

このlnテクニックを使用して、システム1.8インストールのcacertsにリンクしている壊れた1.6インストールを修正しました。ありがとう!
A21z 2015

1
将来の読者のために:あなたが他の3つのにあるファイルは必要と思われるsecurityフォルダ(blacklisted.certslocal_policy.jar、とUS_export_policy.jar幸せになるためのJavaのために)。
awksp

@Peter Kriens、なぜディレクトリのcacerts下にリンクされているのjreですか?
BAE、

45

Ubuntu 12.10(素量ケツァル)以降、証明書に保持されているCA-証明-のJavaパッケージ。を使用-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacertsすると、使用しているJDKに関係なくそれらを取得できます。


54
update-ca-certificates -fcacertsファイルに入力するには、手動で実行する必要があることがわかりました
Portablejim

4
@Portablejimありがとう。あなたのコメントは、私がUbuntu 15.04betaでApache Sparkをビルドしたときに最初に遭遇した問題を解決しました。
ポール・

1
ありがとう@Portablejim、あなたのコメントはUbuntu 15.04で私のために働いた。
David Berg、

ありがとう。これは、PhpStrom +パッチを適用したJDKに関する私の問題を修正しました。このキーを「phpstorm64.vmoptions」ファイルに書き込みました。
Vijit

ubuntu 18.04で動作しない、JDKが1.8.0_62
Devendra Singraul、

34

OS X v10.9(Mavericks)にアップグレードした後、JDK 1.7を使用して、OS Xでこの問題に遭遇しました。私にとって有効だった修正は、http://support.apple.com/kb/DL1572で入手可能なJavaのAppleバージョンを再インストールすることでした。


OSX上のGrailsで使用されているJava 6でこれに遭遇しました。OracleのJava 7もインストールし、Mavericksにアップグレードしました。AppleのWebサイトからJava 6を再インストールしても、問題は解決しました。
pm_labs 2014

オープンjdk 6をubuntuクラウドボックスにインストールするときにこれに遭遇しました。BTW
ベンハッチソン

30

私は走った

sudo update-ca-certificates -f

証明書ファイルを作成し、次に:

sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

私は仕事に戻った、みんなありがとう。それはインスタレーションに含まれていないのは残念ですが、結局そこに着きました。


私が走るとき、私sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure**は得ますsudo: /var/lib/dpkg/info/ca-certificates-java.postinst: command not found
Magick

ただsudo update-ca-certificates -fでDebianのジェシーに十分であるopenjdk-8-jre-headless限りとして、ジェシーから-backportsのca-certificates-javaインストールされています。インストールの順序が重要だと思います(後のJRE ca-certificates-javaはこれを引き起こす可能性があります。後者にはバックポートされたJava 8のトリガーがないためです)。
Mirabilos

2
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure 星なし**
Yu Jiaao 2017

update-ca-certificates -fそれを修正したものです。2番目のコマンドは必要ありませんでした
マークジェロニムス

17

エラーは、システムがパラメーターで指定されたパスでトラストストアを見つけられないことを示していますjavax.net.ssl.trustStore

Windowsでは、cacertsファイルをjre/lib/securityEclipseインストールディレクトリ(eclipse.iniファイルと同じ場所)にコピーし、次の設定をに追加しましたeclipse.ini

-Djavax.net.ssl.trustStore=cacerts
-Djavax.net.ssl.trustStorePassword=changeit
-Djavax.net.ssl.trustStoreType=JKS

cacertsへのパスに問題があったため(%java_home%環境変数が何らかの形で上書きされている)、この簡単なソリューションを使用しました。

この考え方は、トラストストアファイルへの有効なパスを提供することです。理想的には、相対パスを使用することです。絶対パスを使用することもできます。

ストアタイプがJKSであることを確認するには、次のコマンドを実行します。

keytool -list -keystore cacerts

Keystore type: JKS
Keystore provider: SUN

2
これが実際に機能した唯一の答えです。ありがとう@razvanone
Akshar Patel

1
私はなんとか1つの小さな「ゴチャ」を叩きました。eclipse.iniファイルの3行は、実際には3行に分かれている必要があります。私は最初にそれらすべてを1行に配置しましたが、日食はそれを拾いませんでした。
SiKing 2018年

16

ca-certificates-javaパッケージを削除して再度インストールすると、うまくいきました(Ubuntu MATE 17.10(Artful Aardvark))。

sudo dpkg --purge --force-depends ca-certificates-java

sudo apt-get install ca-certificates-java

ありがとう、jdstrand:バグ983302のコメント1、Re:ca-certificates-javaがOneiric OcelotにJava cacertsをインストールできません


11

OS X v10.9(Mavericks)にアップグレードした後、多くのセキュリティ問題が発生しました:

  • Amazon AWSでのSSLの問題
  • ピアはMavenおよびEclipseで認証されていません
  • trustAnchors パラメータは空でない必要があります

このJavaアップデートを適用し、すべての問題を修正しました:http : //support.apple.com/kb/DL1572?viewlocale=en_US


5
ああ。Java 6は、パブリックサポートが終了してから何年も経過しており、セキュリティホールに悩まされています。Appleは、Java 7/8で実行できない古いソフトウェアが引き続き実行できるようにダウンロードできるようにしていますが、1。AWS、2。Mavenなどのパブリックインターネット上のサービスへのSSL接続には使用しないでください。セントラル、3。その他。
ザックトンプソン

10

私はTalend Open Studioで代替JVMを使用しているため、このようなことを期待していました(現時点でのサポートはJDK 1.7までのみ存在します)。セキュリティの目的で8を使用しています...とにかく

  • 証明書ストアを更新します。

    sudo update-ca-certificates -f

その後

  • 初期化パラメータに新しい値を追加します

    sudo gedit $(path to your architecture specific ini i.e. TOS_DI...ini)
    
    Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts

私にとって、2番目のエントリは機能しました。Talend Open Studio / TEnt + JVMのバージョンに応じて、パラメーター名は異なりますが、同じキーストアファイルを探します。


4
宿泊施設はどこjavax.net.ssl.trustAnchorsから入手しましたか?JSSEのドキュメントには記載されていません。
ローンの侯爵

10

私にとっては、トラストストアにtrustedCertEntryがないことが原因でした。

テストするには、以下を使用します。

keytool -list -keystore keystore.jks

それは私に与えます:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

cert-alias, 31-Jul-2017, PrivateKeyEntry

私のPrivateKeyEntryにはCAが含まれていますが、個別にインポートする必要がありました

keytool -import -alias root-ca1 -file rootca.crt -keystore keystore.jks

証明書をインポートし、再実行すると次のkeytool -list -keystore keystore.jksようになります。

Your keystore contains 2 entries

cert-alias, 31-Jul-2017, PrivateKeyEntry,
Certificate fingerprint (SHA1):
<fingerprint>
root-ca1, 04-Aug-2017, trustedCertEntry,
Certificate fingerprint (SHA1):
<fingerprint>

これで、trustedCertEntryが作成され、Tomcatが正常に起動します。


注意:キーストアとトラストストアを作成するためのショートカットとして便利なMakefileを備えたbaeldungチュートリアルをチェックしてください(spring-security-x509プロジェクト)baeldung.com/x-509-authentication-in-spring-security
hello_earth

9

一部のOpenJDKベンダーのリリースcacertsでは、バイナリと共に配布される空のファイルが原因でこれが発生しました。バグはここで説明されています:https : //github.com/AdoptOpenJDK/openjdk-build/issues/555

adoptOpenJdk8\jre\lib\security\cacertsような古いインスタレーションからファイルにコピーできますc:\Program Files\Java\jdk1.8.0_192\jre\lib\security\cacerts

AdoptOpenJDKバギーバージョンはhttps://github.com/AdoptOpenJDK/openjdk8-releases/releases/download/jdk8u172-b11/OpenJDK8_x64_Win_jdk8u172-b11.zip


私もそうだったと思います。AdoptOpenJDK 202ではこのバグが存在し、222ではそれが機能します。したがって、可能であればjdkを更新してください。
マーティ

6

JDK9とMavenを備えたUbuntuでこれが発生した場合は、このJVMオプションを追加できます。まず、パスが存在するかどうかを確認します。

-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts

ファイルがない場合は、ca-certificates-javaをインストールしてみてください。

sudo apt install ca-certificates-java

dockerを使用している場合は、「maven:3-jdk-9」の代わりに「maven:3-jdk-9-slim」イメージを試すこともできます
Konstantin Pavlov

おかげで、これはUbuntuの18.04でOpenJDKの-8-jdkのために私のために働いた
アフタブNaveed

4

Linux上のJava 9.0.1でこのエラーメッセージが表示されました。これは、JDKの既知のバグが原因でした。cacertsファイルが.tar.gzバイナリパッケージ(http://jdk.java.net/9/からダウンロード)で空です。)で。

JDK 9.0.1リリースノートの「既知の問題」の段落を参照してください。 OpenJDK 9ではデフォルトでTLSは機能しません」と述べています。

Debian / Ubuntu(およびおそらく他の派生物)では、簡単な回避策はcacertsファイルを「ca-certificates-java」パッケージからのものに置き換えることです:

sudo apt install ca-certificates-java
cp /etc/ssl/certs/java/cacerts /path/to/jdk-9.0.1/lib/security/cacerts

Red Hat Linux / CentOSでは、「ca-certificates」パッケージから同じことを実行できます。

sudo yum install ca-certificates
cp /etc/pki/java/cacerts /path/to/jdk-9.0.1/lib/security/cacerts

4

Ubuntu 16.04 LTS(Xenial Xerus)からUbuntu 18.04にアップグレードした後、Maven 3 を使用しようとするとこの問題が発生しました LTS(Bionic Beaver)。

/ usr / lib / jvm / java-8-oracle / jre / lib / securityを確認すると、cacertsファイルが次を指すシンボリックリンクであることがわかりました /etc/ssl/certs/java/cacerts

疑わしい名前のファイルもありましたcacerts.original

私はに名前を変更cacerts.originalcacerts、それで問題が修正されました。


cacerts.originalファイルはにあったjksフォーマット、およびそのデフォルトとしてその形式を使用のUbuntu 16.04のJava 8で生成されました。cacertsファイルがにあったpkcs12そのデフォルトとしてこのフォーマットを使用してのUbuntu 18.04のJava 10によって生成されたフォーマット、。このスレッドの他の場所で説明したように、新しい形式では、実行可能ファイルにパスワードを渡す必要があります。ただし、新しい空のjks cacertsファイルを生成するか、古いファイルをコピーする限り、次のcacerts生成プロセスで既存のファイルが空になり、ファイルシステムからのCA証明書が再入力されます。
ミカエルゲック

3

古いJava 6が使用されていて、HTTPS URLにアクセスしようとしたときに、OS X v10.9(Mavericks)をアップデートした後、OS Xでもこれに遭遇しました。修正はPeter Kriensの逆でした。をcacerts1.7スペースから1.6バージョンでリンクされた場所にコピーする必要がありました。

(as root)
umask 022
mkdir -p /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security
cp $(/usr/libexec/java_home -v 1.7)/jre/lib/security/cacerts \
    /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security

1
ここでのコマンドは、ディレクトリをファイルにコピーしようとします。まったく意味がありません。
praseodym

リバースソリューションを使用することの評価に同意します。jdk1.6に壊れたソフトリンク/Library/Java/JavaVirtualMachines/1.6.0_33-b03-424.jdk/Contents/Home/lib/security/cacerts-> /System/Library/Java/Support/CoreDeploy.bundleがあることがわかりました/ Contents / Home / lib / security / cacerts。そこで、壊れたソフトリンクをrmし、jdk1.7インストールからcacertsにコピーしました。
James A Wilson

注:完了したら、権限を検証するためにコピーしたcacertsファイルをcatできるはずです。
グレー

また、正しい方向に進むようにcpを修正し、mkdirとcpにumaskを追加しました。
グレー

3

私の場合、クライアントアプリケーションで使用されているJKS​​ファイルが破損しています。新しい証明書を作成し、そこに宛先サーバーのSSL証明書をインポートしました。次に、クライアントアプリケーションで新しいJKSファイルをトラストストアとして使用しました。

System.setProperty("javax.net.ssl.trustStore",path_to_your_cacerts_file);

ソース:Java SSLおよび証明書キーストア

(KeyStore Explorer)ツールを使用して、新しいJKSを作成します。KeyStore Explorerのリンクからダウンロードできます。


keystore-explorerが私のために仕事をしてくれました。デフォルトのキーストアを作成し、サイト/ホストの証明書ファイルを調べて保存するだけです。
Shantha Kumara

3

また、Spring Boot 1.4.1(またはそれ以降)にアップグレードした後、依存関係の一部としてTomcat 8.5.5が導入されるため、このエラーが発生する可能性があります。

問題は、Tomcatがトラストストアを処理する方法にあります。トラストストアの場所をSpring Boot構成のキーストアと同じ場所に指定したtrustAnchors parameter must be non-empty場合、アプリケーションの起動時にメッセージが表示される可能性があります。

server.ssl.key-store=classpath:server.jks
server.ssl.trust-store=classpath:server.jks

server.ssl.trust-store必要なことがわからない限り、単に構成を削除します。その場合は、以下のリンクを参照してください。

次の問題には、問題の詳細が含まれています。


3

Android SDK sdkmanagerでこの問題が発生しました。私にとってこの解決策はうまくいきました:

  1. に行く /usr/lib/jvm/java-8-oracle/jre/lib/security/
  2. 交換するcacertcacert.original

cacertファイルには、小さな1(22B)でした。oracle-java8-installerからインストールしましたppa:webupd8team/java(このマニュアルによると:https : //docs.nativescript.org/start/ns-setup-linux)。


2

ちなみに、ここでの答えはどれもうまくいきませんでした。Gradleのビルドがこのエラーで不可解に失敗し始め、特定のPOMファイルのMaven セントラルからHEADをフェッチできませんでした。

javacの問題をデバッグするためにビルドしたOpenJDKの個人用ビルドにJAVA_HOMEを設定したことがわかりました。システムにインストールされているJDKに設定し直したところ、修正されました。


...トラストストアが見つからなかった原因は、他の回答のとおりです。
ローンの侯爵

1
そうですが、トラストストアが見つからないことを知っていても、なぜ見つからないのわからなければ、まったく役に立ちません。それがうまくいかない可能性のある方法はたくさんありますが、自分のシステムで失敗している特定の方法が原因ではない場合は、イライラします。
user3562927 2017年

それらはすべて同じエラーであると「起こり」ます。指定されたトラストストアを開くことができなかったか、空でした。この状況が発生する可能性のある方法は100万通りあり、それらすべてを列挙するのに十分なスペースがSOにありません。
ローン侯爵

1

Red Hat Linuxでは、証明書をにインポートすることでこの問題を解決しました/etc/pki/java/cacerts


1
System.setProperty("javax.net.ssl.trustStore", "C:\\Users\\user-id\\Desktop\\tomcat\\cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "passwd");

上記の2行をコードに追加する必要があります。トラストストアを見つけることができません。


2
そうしないと、JREトラストストアが使用され、確実にそれを見つけることができます。エラーの原因は、これらのパラメーターの不正確な値ではなく、これらのパラメーターの不正確な値です。コードで指定されたファイルは、通常はインストールにのみ適用されます。
ローン侯爵

これらのプロパティを設定する適切な方法は、コマンドラインで渡すjava -Djavax.net.ssl.trustStore=/tmp/cacerts ...ことです。または、JDKで実行されるすべてのプログラムに対してグローバルに設定する場合は、JDKのmanagement.propertiesファイルに行を追加します。
ミカエルゲック

1

Ubuntu 14.04(Trusty Tahr)でテストするために特定のAndroidスイートを実行しているときに、この問題に直面しました。shaheenが示唆したように、私には2つのことがうまくいきました。

sudo update-ca-certificates -f

sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

1

インターネットで見つけた解決策はどれもうまくいきませんでしたが、Peter Kriensの回答の修正版でうまくいきました。

まず、を実行してJavaフォルダーを見つけます/usr/libexec/java_home。私にとってそれは1.6.0.jdkバージョンでした。次に、そのlib/securityサブフォルダーに移動します(私にとって/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security)。

次に、cacertsファイルがすでに存在する場合は削除し、でシステム上でファイルを検索しsudo find / -name "cacerts"ます。私がインストールしたXcodeや他のアプリケーションのバージョンだけでなく、/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts私が選択したバージョンでも、複数のアイテムが見つかりました。

そのファイルを使用して、シンボリックリンクを作成し(以前のJavaフォルダー内で)、sudo ln -fsh "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts"それで動作するはずです。

私は両方を持っています-JavaのAppleの2017-001ダウンロード(https://support.apple.com/kb/dl1572-私はそれが正しい証明書の出所だと思います)とOracleのMac OS X v10.12(Sierra)にインストールされたものを持っています。


1

ubuntu 14.04で、openjdk 11をppa:openjdk-r / ppaから入手すると、これは私にとってうまくいきました:

java.securityでキーストアタイプを

keystore.type=jks

次に:

sudo dpkg --purge --force-depends ca-certificates-java
sudo apt-get install ca-certificates-java

それが機能したかどうかを確認するときは、古いjavaがまだ実行されているデーモンを使用していないことを確認してください(たとえば--no-daemon、gradleのオプション)

このバグはすべてをうまく説明し、何が起こっているのかを理解するのに役立ちますhttps://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1739631


1

Ubuntu 18.04では、古いプロジェクトのメンテナンスにOpenJDK 1.7を使用する必要がありました。バイナリパッケージをダウンロードしました。しかし、スクリプトを実行すると、同じエラーが発生しました。

解決策はcacerts、ダウンロードしたJDKのファイルをjre/lib/securityフォルダーから削除し、それをシステムcacertsファイルへのシンボリックリンクとして作成することでした/etc/ssl/certs/java/

sudo ln -s /etc/ssl/certs/java/cacerts /path/to/downloaded/java/jre/lib/security/cacerts


1

これは誰にも役立つでしょうが、ラズベリーPiのDockerイメージからJava 8を実行しているすべての人(AMD CPUを使用)のために、次のDockerfileをビルドして実行するとうまくいきます

FROM hypriot/rpi-java
USER root

WORKDIR /usr/build/

RUN /usr/bin/printf '\xfe\xed\xfe\xed\x00\x00\x00\x02\x00\x00\x00\x00\xe2\x68\x6e\x45\xfb\x43\xdf\xa4\xd9\x92\xdd\x41\xce\xb6\xb2\x1c\x63\x30\xd7\x92' > /etc/ssl/certs/java/cacerts
RUN update-ca-certificates -f
RUN /var/lib/dpkg/info/ca-certificates-java.postinst configure

EXPOSE 8080

ARG JAR_FILE=target/app-0.0.1-SNAPSHOT.jar

ADD ${JAR_FILE} app.jar

ENTRYPOINT ["java", "-Djavax.net.ssl.trustStorePassword=changeit", "-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts", "-jar", "app.jar"]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.