web-dev-qa-db-ja.com

java.security.InvalidAlgorithmParameterException:LinuxではtrustAnchorsパラメーターが空でないか、デフォルトのトラストストアが空である理由

この例外:Java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-emptyをGoogleで検索すると、複数の結果が表示されます。しかし、決定的な解決策はなく、推測のみです。

SSLを介して接続を開いて使用しようとすると、(少なくとも私の場合は)問題が発生します。私のWindowsマシンでは正常に動作しますが、Linuxマシン(Sunのjreがインストールされている)にデプロイすると、上記の例外で失敗します。

問題は、JREのデフォルトのトラストストアが何らかの理由で空になっていることです(32バイトのサイズですが、Windowsでは80kbです)。

jre/lib/security/cacertsファイルをWindowsからlinuxにコピーしたとき、うまくいきました。

問題は、なぜLinux jreに空のトラストストアがあるのですか?

これはAMI linuxを使用するAmazon EC2インスタンスで発生するため、一部のAmazonポリシーが原因である可能性があることに注意してください(Javaはプリインストールされていると思いますが、わかりません)

72
Bozho

Linux向けの標準のSun JDKには、指定されたディレクトリ内のすべてのファイルが完全に問題なく使用できます。問題は、使用するインストールです。

25
bestsss

Ubuntuでこのエラーが発生しました。/usr/lib/jvm/Java-8-openjdk-AMD64/jre/lib/security/cacertsは/ etc/ssl/certs/Java/cacertsへのリンクが壊れていることがわかりました。それが私をこのバグに導きました: https://bugs.launchpad.net/ubuntu/+source/ca-certificates-Java/+bug/983302 The README for ca-証明書-Javaは最終的に実際の修正を示しました:

走る

update-ca-certificates -f

apt-get install ca-certificates-Javaが機能しませんでした。手動でインストール済みとしてマークしました。

99
user988346

次のようなダミーの証明書をキーストアに配置することで、このエラー(OSX 10.5.8上のJava 1.6.0)を回避しました。

keytool -genkey -alias foo -keystore cacerts -dname cn=test -storepass changeit -keypass changeit

質問は、「空のtrustStoreをJava処理できないのはなぜですか?」

13
Andrew

元の質問に対する答えではありませんが、同様の問題を解決しようとすると、Mac OS XのMavericsへのアップデートがJavaインストール(実際にはcacert)を台無しにすることがわかりました。 Sudo rm -rf /Library/Java/JavaVirtualMachines/*.jdkを削除し、 http://www.Oracle.com/technetwork/Java/javase/downloads/index.html から再インストールします

9
Manuel Darveau

システムプロパティtrustStoreを欠落しているjksファイルに設定することにより、このエラーを生成できます。例えば

    System.setProperty("javax.net.ssl.keyStore", "C:/keystoreFile.jks");
    System.setProperty("javax.net.ssl.keyStorePassword", "mypassword");
    System.setProperty("javax.net.ssl.trustStore", "C:/missing-keystore.jks");
    System.setProperty("javax.net.ssl.trustStorePassword", "mypassword");

このコードは、何らかの理由でFileNotFound例外を生成しませんが、上記のInvalidAlgorithmParameter例外を正確に生成します。

一種の愚かな答えですが、私は再現できます。

8
The Camster

Windowsでの私のソリューションは、管理者としてコンソールウィンドウを実行するか、環境変数MAVEN_OPTSを変更して、 '%USERPROFILE%'ではなくtrust.jks(たとえば、 'C:\ Users\oddros')へのハードコードパスを使用することでした。私のMAVEN_OPTSは次のようになりました。

-Djavax.net.ssl.trustStore=C:\Users\oddros\trust.jks -Djavax.net.ssl.trustStorePassword=changeit
6
superodde

Java-8-OracleがインストールされているUbuntu 14.10でも同じ問題が発生していました。

Ca-certificates-Javaパッケージのインストールを解決しました:

Sudo apt-get install ca-certificates-Java
6

私のcacertsファイルは完全に空でした。これを解決するには、cacertsファイルをWindowsマシン(Oracle Java 7を使用)からコピーし、Linuxボックス(OpenJDK)にscpします。

cd %Java_HOME%/jre/lib/security/
scp cacerts mylinuxmachin:/tmp

そして、Linuxマシンで

cp /tmp/cacerts /etc/ssl/certs/Java/cacerts

これまでのところうまくいきました。

3

JRE /セキュリティに有効なcacertがあることを確認してください。そうしないと、無効な空のtrustAnchorsエラーがバイパスされません。

Amazon EC2 opensuse12のインストールでは、問題は、JREセキュリティディレクトリ内のcacertsが指すファイルが無効だったことです。

$ Java -version
Java version "1.7.0_09"
OpenJDK Runtime Environment (IcedTea7 2.3.4) (suse-3.20.1-x86_64)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)

$ ls -l /var/lib/ca-certificates/
-rw-r--r-- 1 root    363 Feb 28 14:17 ca-bundle.pem

$ ls -l /usr/lib64/jvm/jre/lib/security/
lrwxrwxrwx 1 root    37 Mar 21 00:16 cacerts -> /var/lib/ca-certificates/Java-cacerts
-rw-r--r-- 1 root  2254 Jan 18 16:50 Java.policy
-rw-r--r-- 1 root 15374 Jan 18 16:50 Java.security
-rw-r--r-- 1 root    88 Jan 18 17:34 nss.cfg

そこで、古いOpenSuse 11の有効な証明書のインストールを解決しました。 (それについてすみません!!)

$ ll
total 616
-rw-r--r-- 1 root 220065 Jan 31 15:48 ca-bundle.pem
-rw-r--r-- 1 root    363 Feb 28 14:17 ca-bundle.pem.old
-rw-r--r-- 1 root 161555 Jan 31 15:48 Java-cacerts

キーツールを使用して新しいキーツールを生成できることを理解しました( http://mail.openjdk.Java.net/pipermail/distro-pkg-dev/2010-April/008961.html )。私はおそらくすぐにそれにする必要があります。

よろしく

LinuxではなくMac OS XにOpenJDKをインストールしている場合、Mac OS X Java(つまり、最新のJava 6)がインストールされている場合ソフトウェアの更新、これを行うことができます:

cd $OPENJDK_HOME/Contents/Home/jre/lib/security
ln -s /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
ln -s /System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/security/blacklist 
ln -s /System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/security/trusted.libraries 

ここで、$OPENJDK_HOMEはOpenJDKインストールのルートディレクトリであり、通常はOPENJDK_HOME=/Library/Java/JavaVirtualMachines/1.7.0u.jdkです。これは、Mac OS Xでの公式Javaインストールがこれらのファイルを取得する方法と同じです-それらはまた、それらのシステムバンドルから単にシンボリックリンクします。 Lionで動作しますが、OSの以前のバージョンでは動作しません。

2
Attila Szegedi

これは、アクセス権限がOSによって異なるために発生します。 Windowsアクセス階層はUnixとは異なります。ただし、これらの簡単な手順に従うことでこれを克服できます。

  1. AccessController.doPrivileged(Java.security.PrivilegedAction subclass)でアクセシビリティを向上
  2. 独自のJava.security.Providerサブクラスをセキュリティプロパティとして設定します。 a。 Security.insertProviderAt(new、2);
  3. Security.setProperty("ssl.TrustManagerFactory.algorithm" , “XTrust509”);でアルゴリズムを設定します
0
Pijush

C:\ Program Files\Java\jdk1.7.0_51\jre\lib\securityフォルダーにあるcacertsファイルのアクセス許可が正しく設定されていない場合、Windows 7マシンで同じエラーが発生します。

この問題を解決するには、SERVICEユーザーとINTERACTIVEユーザーにcacertsのすべての変更権限を許可しますexcept「権限の変更」および「所有権の取得」(詳細設定から)セキュリティプロパティの設定)。これらのサービスに拡張属性の読み取りと書き込みの両方を許可すると、エラーが消えるのと関係があると思います。

0
Fuzzy Analysis

同じ問題があります。 Mozillaからca-certificateバンドルをインストールすることで解決しました:

$ zypper in ca-certificates-mozilla
The following NEW package is going to be installed:
ca-certificates-mozilla 

1 new package to install.
Retrieving package ca-certificates-mozilla-1.85-8.8.1.noarch
(1/1), 143.7 KiB (239.1 KiB unpacked)
Retrieving: ca-certificates-mozilla-1.85-8.8.1.noarch.rpm.....................[done]
Installing: ca-certificates-mozilla-1.85-8.8.1 ...............................[done]
Additional rpm output:
Updating certificates in /etc/ssl/certs...
144 added, 0 removed.
creating /var/lib/ca-certificates/ca-bundle.pem ...
creating /var/lib/ca-certificates/Java-cacerts ...
144 added, 0 removed.

$ ll /var/lib/ca-certificates/
total 392
drwxr-xr-x  2 root root   4096 Apr 26 07:25 ./
drwxr-xr-x 30 root root   4096 Apr 25 15:00 ../
-rw-r--r--  1 root root 220196 Apr 26 07:25 ca-bundle.pem
-rw-r--r--  1 root root 161555 Apr 26 07:25 Java-cacerts

追伸.

$ cat /etc/SuSE-release
openSUSE 12.2 (x86_64)
VERSION = 12.2
CODENAME = Mantis
$ Java -version
Java version "1.7.0_09"
OpenJDK Runtime Environment (IcedTea7 2.3.4) (suse-3.20.1-x86_64)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)
0
user2322889