it-swarm.com.de

java.security.InvalidAlgorithmParameterException: Der Parameter trustAnchors darf unter Linux nicht leer sein

Wenn Sie nach dieser Ausnahme suchen: Java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty, werden mehrere Ergebnisse angezeigt. Es gibt jedoch keine endgültige Lösung, nur Vermutungen.

Das Problem entsteht (in meinem Fall zumindest), wenn ich versuche, eine Verbindung über SSL zu öffnen. Es funktioniert gut auf meinem Windows-Computer, aber wenn ich es auf dem Linux-Computer bereitstelle (mit Suns jre installiert), schlägt es mit der obigen Ausnahme fehl.

Das Problem ist, dass der Standard-Truststore der JRE aus irgendeinem Grund leer ist (Größe von nur 32 Byte, während er unter Windows 80 KB beträgt).

Als ich meine jre/lib/security/cacerts-Datei von Windows nach Linux kopierte, funktionierte das einwandfrei.

Die Frage ist, warum der Linux JRE einen leeren Trust Store hat.

Beachten Sie, dass dies auf einer Amazon EC2-Instanz mit AMI Linux geschieht. Dies könnte auf einige Amazon-Richtlinien zurückzuführen sein (ich glaube, Java war bereits vorinstalliert, aber ich bin mir nicht sicher).

70
Bozho

Das Standard-Sun-JDK für Linux verfügt über absolut korrekte Werte und insgesamt alle Dateien im angegebenen Verzeichnis. Das Problem ist die Installation, die Sie verwenden.

25
bestsss

Ich habe diesen Fehler in Ubuntu bekommen. Ich habe gesehen, dass __./usr/lib/jvm/Java-8-openjdk-AMD64/jre/lib/security/cacertsein defekter Link zu/etc/ssl/certs/Java/cacerts war. Das führte mich zu diesem Fehler: https://bugs.launchpad.net/ubuntu/+source/ca-certificates-Java/+bug/983302 Die README für ca -certificates-Java zeigte schließlich den aktuellen Fix:

lauf

update-ca-certificates -f

apt-get install ca-certificate-Java hat bei mir nicht funktioniert. Es hat es einfach als manuell installiert markiert.

98
user988346

Ich habe diesen Fehler (Java 1.6.0 unter OSX 10.5.8) umgangen, indem ich ein Dummy-Zertifikat in den Keystore (z

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

Die Frage sollte sicherlich lauten: "Warum kann Java keinen leeren TrustStore verarbeiten?"

14
Andrew

Nicht die Antwort auf die ursprüngliche Frage, aber als ich versuchte, ein ähnliches Problem zu lösen, stellte ich fest, dass das Mac OS X-Update für Maverics die Java-Installation (das eigentliche cacert) versagte. Entfernen Sie Sudo rm -rf /Library/Java/JavaVirtualMachines/*.jdk und installieren Sie ihn erneut von http://www.Oracle.com/technetwork/Java/javase/downloads/index.html

9
Manuel Darveau

Ich kann diesen Fehler generieren, indem ich die Systemeigenschaft trustStore auf eine fehlende jks-Datei setze. Zum Beispiel

    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");

Dieser Code generiert aus irgendeinem Grund keine FileNotFound-Ausnahme, sondern genau die oben angegebene InvalidAlgorithmParameter-Ausnahme.

Eine dumme Antwort, aber ich kann mich reproduzieren.

7
The Camster

Meine Lösung unter Windows war, entweder das Konsolenfenster als Administrator auszuführen oder die Umgebungsvariable MAVEN_OPTS zu ändern, um einen hartcodierten Pfad in "trust.jks" (z. B. "C:\Users\oddros") anstelle von "% USERPROFILE%" zu verwenden. Mein MAVEN_OPTS sieht jetzt so aus:

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

Hatte das gleiche Problem auf Ubuntu 14.10 mit Java-8-Oracle installiert.

Die Installation von CA-Zertifikaten-Java-Paket wurde behoben: 

Sudo apt-get install ca-certificates-Java
5

Meine Cacerts-Datei war völlig leer. Ich habe das Problem gelöst, indem ich die cacerts-Datei von meinem Windows-Rechner kopiert habe (also Oracle Java 7 verwendet) und diese in meine Linux-Box (OpenJDK) scpd 

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

und dann auf der Linux-Maschine

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

Es hat bisher großartig funktioniert.

3

Stellen Sie sicher, dass Sie gültige Zertifikate in der JRE/security haben. Andernfalls umgehen Sie den ungültigen leeren trustAnchors-Fehler nicht.

In meiner Amazon EC2 Opensuse12-Installation bestand das Problem darin, dass die von den Zertifikaten im JRE-Sicherheitsverzeichnis angegebene Datei ungültig war:

$ 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

Ich habe also die Installation eines alten Opensuse 11 gültigen Zertifikats behoben. (Das tut mir leid!!)

$ 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

Ich habe verstanden, dass Sie mit dem Keytool ein neues generieren könnten ( http://mail.openjdk.Java.net/pipermail/distro-pkg-dev/2010-April/008961.html ). Das muss ich wohl bald machen.

grüße Lellis

Wenn dies bei einer OpenJDK-Installation unter Mac OS X (im Gegensatz zu Linux) der Fall ist und Sie das offizielle Mac OS X-Java (d. H. Aktuelles Java 6) über Software-Update installiert haben, können Sie Folgendes tun:

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 

dabei ist $OPENJDK_HOME das Stammverzeichnis der OpenJDK-Installation, normalerweise OPENJDK_HOME=/Library/Java/JavaVirtualMachines/1.7.0u.jdk. Dies ist identisch mit der Art und Weise, wie offizielle Java-Installationen unter Mac OS X diese Dateien abrufen - sie werden auch nur mit diesen System-Bundles verknüpft. Funktioniert für Lion, nicht sicher für frühere Versionen des Betriebssystems.

2
Attila Szegedi

Dies geschieht, weil sich die Zugriffsberechtigungen von Betriebssystem zu Betriebssystem unterscheiden. Die Windows-Zugriffshierarchie unterscheidet sich von Unix. Dies könnte jedoch durch folgende einfache Schritte überwunden werden:

  1. Erhöhen Sie die Zugänglichkeit mit AccessController.doPrivileged(Java.security.PrivilegedAction subclass)
  2. Legen Sie Ihre eigene Java.security.Provider-Unterklasse als Sicherheitseigenschaft fest A. Security.insertProviderAt (neu, 2);
  3. Setze deinen Algorythm mit Security.setProperty("ssl.TrustManagerFactory.algorithm" , “XTrust509”);
0
Pijush

Ich erhalte diesen Fehler auf meinem Windows 7-Computer, wenn die Berechtigungen für meine cacerts-Datei in meinem Ordner C:\Programme\Java\jdk1.7.0_51\jre\lib\security nicht richtig festgelegt sind.

Um das Problem zu beheben, gestatte ich den SERVICE- und INTERACTIVE-Benutzern alle Änderungsberechtigungen für cacerts außer "Änderungsberechtigungen" und "Besitz übernehmen" (über Erweiterte Einstellungen in den Sicherheitseigenschaften). Ich gehe davon aus, dass das Zulassen dieser Dienste zum Lesen und Schreiben erweiterter Attribute möglicherweise etwas damit zu tun hat, dass der Fehler behoben wird.

0
Fuzzy Analysis

Habe das gleiche Problem. Behebung des Problems durch Installieren des ca-certificate-Pakets von Mozilla:

$ 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

P.S.

$ 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