Comment configurer Java VM pour utiliser les certificats racine (truststore) gérés par Mac OS X


J'obtiens l'exception suivante en utilisant la bibliothèque scribe OAuth.

Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

Basé sur une recherche sur Google, il semble que je devrais configurer le JVM truststore d'une manière ou d'une autre.

Pourquoi dois-je faire? Comment puis-je demander à la machine virtuelle Java d'utiliser le truststore par défaut du système d'exploitation? (Mac OS X dans mon cas).

Author: Tamas, 2013-01-11

3 answers

Je peux configurer le truststore par défaut en ajoutant cette propriété système lors du lancement de la machine virtuelle:

-Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts

Je ne comprends toujours pas pourquoi dois-je faire cela. Cela devrait être la valeur par défaut. C'est aussi très ennuyeux d'ajouter cela à chaque fois. Existe-t-il un meilleur moyen, par exemple certains paramètres du système d'exploitation?

 8
Author: Tamas, 2016-12-28 16:01:53

Ah! je sais ce problème. J'ai eu un problème similaire, et il était lié aux liaisons Java dans OSX. Une fois que j'ai installé la dernière version, elle a été corrigée.

Https://support.apple.com/en-us/HT204036

 0
Author: blganesh101, 2016-12-28 15:46:45

Je pense qu'il est clair pour tout le monde que JAVA a besoin d'un moyen d'identifier le truststore par défaut, lorsqu'il s'agit de SSL, donc cette information a été transmise à JAVA d'une manière ou d'une autre, donc je pense que la question "mise à jour" en main est de savoir comment le faire

La meilleure façon que j'ai pu trouver était de définir JAVA_TOOL_OPTIONS variable d'environnement au niveau de votre système d'exploitation, si cette variable d'environnement est définie, JAVA sera lancé par défaut avec les arguments que vous avez fournis dans cette variable d'environnement.

Donc, vous n'avez pas besoin de définir -Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts chaque fois que la JVM est lancé, à la place JAVA_TOOL_OPTIONS la variable d'environnement "une fois" à votre niveau de l'OS, dont la valeur est -Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts et puis vous avez terminé.

Ci-dessous est l'extrait de #1 de "Lectures supplémentaires":

Lorsque cette variable d'environnement est définie, la fonction JNI_CreateJavaVM (dans l'API d'invocation JNI) ajoute la valeur de l'environnement variable pour les options fourni dans son argument JavaVMInitArgs.

Seule mise en garde à surveiller est mentionnée ci-dessous, extrait de #1 de "Lectures supplémentaires":

, Dans certains cas, cette option est désactivée pour des raisons de sécurité, pour exemple, sur Solaris OS, l'option est désactivée lorsque l'utilisateur effectif ou l'ID de groupe diffère de l'ID réel.

Ci-dessous est une autre mise en garde (extrait de #1 de "Lectures supplémentaires") à surveiller mais je pense que puisque le contexte ne concerne pas l'argument de sélection de la machine virtuelle, donc ce n'est pas pertinent, mais juste pour mentionner.

Puisque cette variable d'environnement est examinée au moment où JNI_CreateJavaVM est appelé, il ne peut pas être utilisé pour augmenter la commande ligne avec des options qui seraient normalement gérées par le lanceur, pour exemple, sélection de machine virtuelle à l'aide de l'option-client ou-server.

Plus loin lectures:

 0
Author: hagrawal, 2016-12-29 01:22:24