java.security.InvalidAlgorithmParameterException: le paramètre trustAnchors doit être non vide sous Linux ou le fichier de clés certifiées par défaut est vide

Lorsque vous java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty Google pour cette exception: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty , plusieurs résultats java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty apparaître. Cependant, il n’y a pas de solution définitive, seulement des suppositions.

Le problème se pose (dans mon cas au moins) lorsque j’essaie d’utiliser une connexion via SSL. Cela fonctionne bien sur ma machine Windows, mais quand je le déploie sur la machine Linux (avec sun’s jre), il échoue avec l’exception ci-dessus.

Le problème est que le fichier de clés certifiées par défaut du JRE est vide pour une raison quelconque (taille de seulement 32 octets, alors qu’il est de 80 Ko sur Windows).

Lorsque j’ai copié mon fichier jre/lib/security/cacerts de Windows vers Linux, cela a bien fonctionné.

La question est: pourquoi le Linux jre a-t-il un store de confiance vide?

Notez que cela se produit sur une instance Amazon EC2, avec le Linux AMI, donc cela peut être dû à certaines politiques amazon (je pense que java a été pré-installé, mais je ne suis pas sûr)

Le Sun JDK for Linux standard a absolument des cacerts et tous les fichiers du répertoire spécifié. Le problème est l’installation que vous utilisez.

J’ai eu cette erreur dans Ubuntu. J’ai vu que / usr / lib / jvm / java-8-openjdk-amd64 / jre / lib / security / cacerts était un lien cassé vers / etc / ssl / certs / java / cacerts. Cela m’a amené à ce bug: https://bugs.launchpad.net/ubuntu/+source/ca-certificatees-java/+bug/983302 Le fichier README pour ca-certificatees-java a finalement montré le correctif:

courir

 update-ca-certificatees -f 

apt-get install ca-certificatees-java n’a pas fonctionné pour moi. Il l’a juste marqué comme installé manuellement.

J’ai évité cette erreur (Java 1.6.0 sur OSX 10.5.8) en plaçant un certificate factice dans le fichier de clés, tel que

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

La question devrait sûrement être “Pourquoi Java ne peut-il pas gérer un trustStore vide?”

Pas la réponse à la question initiale, mais en essayant de résoudre un problème similaire, j’ai constaté que la mise à jour de Mac OS X vers Maverics a mis à mal l’installation de Java (le cacert en fait). Supprimez sudo rm -rf /Library/Java/JavaVirtualMachines/*.jdk et réinstallez depuis http://www.oracle.com/technetwork/java/javase/downloads/index.html

Je peux générer cette erreur en définissant la propriété système trustStore sur un fichier jks manquant. Par exemple

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

Ce code ne génère pas une exception FileNotFound pour une raison quelconque, mais exactement l’exception InvalidAlgorithmParameter répertoriée ci-dessus.

Une sorte de réponse stupide, mais je peux reproduire.

Ma solution sous Windows consistait à exécuter la fenêtre de la console en tant qu’administrateur ou à modifier la variable d’environnement MAVEN_OPTS pour utiliser un chemin d’access sécurisé à trust.jks (par exemple, ‘C: \ Users \ oddros’) au lieu de ‘% USERPROFILE%’. Mon MAVEN_OPTS ressemble maintenant à ceci:

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

Avait le même problème sur Ubuntu 14.10 avec java-8-oracle installé.

Résolution de l’installation du package ca-certificatees-java:

 sudo apt-get install ca-certificatees-java 

Mon fichier cacerts était totalement vide. J’ai résolu ce problème en copiant le fichier cacerts de ma machine Windows (qui utilise Oracle Java 7) et je l’ai transféré dans ma boîte Linux (OpenJDK).

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

puis sur la machine Linux

 cp /tmp/cacerts /etc/ssl/certs/java/cacerts 

Cela a bien fonctionné jusqu’à présent.

Si cela vous arrive avec une installation OpenJDK sous Mac OS X (par opposition à Linux), et que vous avez installé le Java officiel Mac OS X (c’est-à-dire la dernière Java 6) via Software Update, vous pouvez simplement faire ceci:

 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 est le répertoire racine de votre installation OpenJDK, généralement OPENJDK_HOME=/Library/Java/JavaVirtualMachines/1.7.0u.jdk . Ceci est identique à la façon dont Java installe officiellement ces fichiers sur Mac OS X – ils les lient simplement à ces ensembles de systèmes. Fonctionne pour Lion, pas sûr pour les versions antérieures du système d’exploitation.

Assurez-vous d’avoir des cacerts valides dans JRE / security, sinon vous ne contournerez pas l’erreur trustAnchors vide non valide.

Dans mon installation Amazon EC2 Opensuse12, le problème était que le fichier indiqué par les cacerts dans le répertoire de sécurité JRE n’était pas valide:

 $ 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-certificatees/ -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-certificatees/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 

J’ai donc résolu d’installer un ancien certificate Opensuse 11 valide. (Désolé pour ça!!)

 $ 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 

J’ai compris que vous pouviez utiliser l’outil keytool pour en générer un nouveau ( http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008961.html ). Je vais probablement devoir le faire bientôt.

en ce qui concerne lellis

Avoir le même problème. Résolu en installant le paquet ca-certificatee à partir de Mozilla:

 $ zypper in ca-certificatees-mozilla The following NEW package is going to be installed: ca-certificatees-mozilla 1 new package to install. Resortingeving package ca-certificatees-mozilla-1.85-8.8.1.noarch (1/1), 143.7 KiB (239.1 KiB unpacked) Resortingeving: ca-certificatees-mozilla-1.85-8.8.1.noarch.rpm.....................[done] Installing: ca-certificatees-mozilla-1.85-8.8.1 ...............................[done] Additional rpm output: Updating certificatees in /etc/ssl/certs... 144 added, 0 removed. creating /var/lib/ca-certificatees/ca-bundle.pem ... creating /var/lib/ca-certificatees/java-cacerts ... 144 added, 0 removed. $ ll /var/lib/ca-certificatees/ 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 

PS

 $ 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) 

Cela se produit car Access Privilege varie d’un système d’exploitation à l’autre. La hiérarchie d’access Windows est différente de Unix. Cependant, cela pourrait être surmonté en suivant ces étapes simples:

  1. Augmentez l’accessibilité avec AccessController.doPrivileged(java.security.PrivilegedAction subclass)
  2. Définissez votre propre sous-classe java.security.Provider tant que propriété de sécurité. une. Security.insertProviderAt (nouveau, 2);
  3. Définissez votre Algorythm avec Security.setProperty("ssl.TrustManagerFactory.algorithm" , “XTrust509”);

Je reçois cette même erreur sur mon ordinateur Windows 7 lorsque les permissions sur mon fichier cacerts dans mon dossier C: \ Program Files \ Java \ jdk1.7.0_51 \ jre \ lib \ security ne sont pas définies correctement.

Pour résoudre ce problème, j’autorise les utilisateurs de SERVICE et INTERACTIVE à modifier toutes les permissions sur les cacerts, sauf les “permissions de modification” et “la prise en charge” (à partir des parameters avancés, dans les propriétés de sécurité). Je suppose que permettre à ces services de lire et d’écrire des atsortingbuts étendus peut avoir quelque chose à voir avec l’erreur qui disparaît.