564 votes

Erreur - trustAnchors paramètre doit être non vide

J'essaie de configurer mon courrier électronique sur Jenkins/Hudson, et je reçois constamment l'erreur :

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

J'ai vu une bonne quantité d'informations en ligne sur cette erreur, mais je n'ai réussi à en faire fonctionner aucune. J'utilise le JDK de Sun sur Fedora Linux (pas OpenJDK).

Voici quelques-unes des choses que j'ai essayées. J'ai essayé de suivre les conseils de ce poste mais la copie des cacerts de Windows sur ma boîte Fedora hébergeant Jenkins n'a pas fonctionné. J'ai essayé ce qui suit ce guide car j'essaie de configurer Gmail comme serveur SMTP, mais cela n'a pas fonctionné non plus. J'ai également essayé de télécharger et de déplacer ces fichiers cacert manuellement et de les déplacer dans mon dossier Java en utilisant une variation des commandes sur ce guide .

Je suis ouvert à toute suggestion car je suis actuellement bloqué. J'ai réussi à le faire fonctionner à partir d'un serveur Windows Hudson, mais j'ai du mal avec Linux.

0 votes

Je ne sais pas si cela peut vous aider mais j'ai eu ce problème avec DBeaver et j'ai dû le corriger, qui apparemment utilise aussi java comme cauchemar de choix. Il y avait 3 options dans la configuration du pilote : Require SSL, Verify Server Certificate, Allow Public Key retrieval. Lorsque je décoche l'option Verify Server Certificate, la connexion réussit, alors qu'auparavant, la même erreur se produisait pour toute connexion à mysql 8.0, à l'exception de la connexion Root.

569voto

EJP Points 113412

Ce message bizarre signifie que le trustStore que vous avez spécifié était :

  • vide,
  • non trouvé, ou
  • ne pouvait pas être ouvert
    • (en raison d'une erreur/manque trustStorePassword ou
    • les autorisations d'accès aux fichiers, par exemple).

Voir aussi @AdamPlumb's réponse ci-dessous .

1 votes

Merci EJP, j'ai vu votre message aquí mais je n'étais pas sûr de savoir comment vérifier que le truststore est là. J'ai également fait apparaître mon fichier server.xml, mais je ne savais pas comment vérifier que le truststore était en place. Dois-je simplement vérifier le préfixe keystoreFile="conf/.keystore" (keystoreFile n'était pas présent dans ce fichier) ?

0 votes

Technologie @Bubbleware L'erreur cessera de se produire quand vous aurez trouvé la bonne solution. C'est votre vérification. Vous devez comprendre quel est le répertoire actuel lors de l'exécution de Tomcat si vous allez spécifier des chemins relatifs vers le truststore. Je n'arrive pas à comprendre votre dernière phrase.

0 votes

Ok, je pense que je suis votre déclaration. Ce que j'ai fait, c'est d'abord chercher un fichier .jks (que je n'ai pas trouvé). Puis j'en ai créé un avec keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -keysize 2048 . Puis j'ai ajouté ceci à la variable JAVA_OPTS dans catalina.sh avec la commande -Djavax.net.ssl.keyStore=/root/keystore.jks Malheureusement, je reçois toujours la même erreur trustAnchors.

62voto

Adam Plumb Points 1064

EJP a essentiellement répondu à la question (et je réalise que la réponse est déjà acceptée), mais je viens de traiter ce cas limite et je voulais immortaliser ma solution.

J'avais le InvalidAlgorithmParameterException erreur sur un hébergement Jira que j'avais précédemment configuré pour un accès uniquement SSL. Le problème était que j'avais configuré mon keystore au format PKCS#12, mais que mon truststore était au format JKS.

Dans mon cas, j'avais modifié mon server.xml pour spécifier le keystoreType à PKCS, mais je n'ai pas spécifié le truststoreType, donc il prend par défaut n'importe quel keystoreType. Spécifier le truststoreType explicitement comme JKS a résolu le problème pour moi.

0 votes

Bien, je vous aide à immortaliser la solution à votre gotcha de cas limite. c'est là que ça devient intéressant.

2 votes

C'était exactement mon problème. J'utilisais Spring Boot 1.4.2.RELEASE, et j'avais un keystore matériel et un truststore logiciel. J'ai spécifié le fournisseur et le type pour le keystore, mais pas pour le truststore. Par conséquent, le truststore utilisait le mauvais fournisseur et le mauvais type. En les spécifiant (SUN et JKS), le problème a été résolu.

15 votes

Comment avez-vous fait exactement ? (Windows ici)

53voto

Peter Kriens Points 6632

J'ai trouvé cette solution dans un article de blog Correction du problème de trustAnchors lors de l'exécution d'OpenJDK 7 sur OS X :

Correction du problème de trustAnchors lors de l'exécution d'OpenJDK 7 sur OS X. Si vous exécutez OpenJDK 7 sur OS X et que vous avez vu cette exception :

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

Il y a une solution simple. Il suffit de lier le même fichier cacerts que celui utilisé par le JDK 1.6 d'Apple :

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

Vous devez le faire pour chaque version d'OpenJDK que vous avez installée. Changez simplement -v 1.7 à la version que vous voulez corriger. Exécutez /usr/libexec/java_home -V pour voir tous les JREs et JDKs que vous avez installés.

Peut-être que les gars d'OpenJDK pourraient ajouter ceci à leurs scripts d'installation.

1 votes

Ma commande "ln" (sous OSX 10.6.8) n'a pas d'option "h" ; à quoi sert-elle ?

1 votes

Ah, j'avais deux commandes "ln", une dans /usr/bin (la valeur par défaut) et une dans /bin ; cette dernière avait une option "h" et fonctionnait.

0 votes

J'ai réparé mon installation 1.6 cassée en liant les cacerts de l'installation 1.8 du système avec cette technique ln. Merci !

48voto

yvesr Points 21

Sur Ubuntu 12.10 (Quantal Quetzal) ou plus tard, les certificats sont détenus dans les ca-certificats-java paquet. Utilisation de -Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts les récupérera quel que soit le JDK que vous utilisez.

56 votes

J'ai découvert que j'avais besoin de courir update-ca-certificates -f manuellement, pour remplir le fichier cacerts

4 votes

@Portablejim Merci. Votre commentaire a résolu le premier problème que j'ai rencontré en construisant Apache Spark sur Ubuntu 15.04beta.

1 votes

Merci @Portablejim, votre commentaire a fonctionné pour moi sur Ubuntu 15.04.

35voto

KiwiMartin Points 331

J'ai rencontré ce même problème sous OS X, avec le JDK 1.7, après avoir effectué la mise à niveau vers OS X v10.9 (Mavericks). La solution qui a fonctionné pour moi a été de réinstaller simplement la version Apple de Java, disponible à l'adresse suivante http://support.apple.com/kb/DL1572 .

0 votes

J'ai rencontré ce problème avec Java 6 utilisé par Grails sous OSX. J'avais également installé Java 7 d'Oracle et j'ai également effectué la mise à niveau vers Mavericks. La réinstallation de Java 6 à partir du site Web d'Apple a également réglé le problème pour moi.

0 votes

J'ai rencontré ce problème lors de l'installation d'open jdk 6 sur une boîte ubuntu cloud. Ravi de voir un visage familier, BTW

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X