[JAVA] Une histoire sur la création de chemin PKIX a échoué lors de la tentative de déploiement sur Tomcat avec Jenkins

Une histoire sur la tentative de déploiement avec Jenkins

J'ai utilisé Jenkins pour la première fois pour créer un environnement ci / cd.

J'ai configuré jenkins avec docker, enregistré le référentiel git, je l'ai construit et je suis passé à l'étape de déploiement. Utilisez le tomcat7-maven-plugin de maven comme méthode de déploiement Cependant, une erreur inattendue s'est produite.

com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Rechercher les erreurs

J'ai eu une erreur, alors j'ai demandé au professeur google comme d'habitude.

En gros, j'ai découvert que j'obtenais une erreur parce que le certificat SSL du site avec lequel j'essayais de communiquer n'était pas fiable. Il semble qu'il sortira lorsque le certificat oléore ou le certificat aura expiré.

Cependant, le serveur que j'essayais de déployer n'était pas un certificat oléore et il n'avait pas encore expiré. De plus, même si j'y ai accédé avec un navigateur, j'ai pu communiquer fermement via https. Cependant, ce "accessible avec un navigateur" compliqua plus tard le problème.

Examen détaillé des erreurs

J'ai beaucoup cherché, mais je n'ai trouvé aucune information utile. Aucun des sites n'a de certificat de confiance, alors ajoutez-le simplement à la liste de confiance avec keytool. .. .. .. Cependant, je n'en ai pas besoin car ce n'est pas mon certificat! J'ai pensé à divers autres facteurs.

Mon certificat SSL a été émis par Let's encrypt. Java ne fait-il pas vraiment confiance au chiffrement? J'ai pensé et cherché.

Il y avait une personne qui enquêtait ici. Je vois, avez-vous toujours confiance en nous chiffrons lui-même?

Cependant, en lisant cet article, la description suivante

Les certificats de chiffrement semblent être pris en charge à partir de Java 8 Update 101. Il y avait.

Y a-t-il une erreur car la version java utilisée par Jenkins est inférieure à Java 8 Update 101! Si vous mentionnez la version de java, elle sera résolue!

J'ai pensé. .. .. .. ..

Enquête Jenkins

Comme je l'ai écrit ci-dessus, je pensais que c'était dû à la version java, alors je suis allé vérifier la version utilisée par jenkins. J'ai découvert que la version java est écrite dans les informations système de Jenkins, alors j'y suis allé.

java.version 1.8.0_171

・ ・ ・ ・ ・ ・ ・ ・ ・

Je suis sûr que la version java de jenkins est différente de la version java lorsqu'elle est réellement exécutée, j'ai donc exécuté java -version dans le travail.

java -version openjdk version "1.8.0_171" OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-1~deb9u1-b11) OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)

・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・

Pourquoi? N'était-ce pas à cause de la version java? Je ne sais plus

Essayez-le dans un environnement local

J'ai décidé de déployer localement pour la première fois ici. J'ai essayé la commande qui était exécutée par jenkins du local.

com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

sérieusement.

J'ai essayé de déployer avec http au lieu de https

Les requêtes qui arrivent normalement sur http sont redirigées vers https

Je ne sais pas quelle est la cause, j'ai donc essayé de le déployer en le rendant accessible via http au lieu de https afin d'isoler le problème.

Vous pouvez le déployer correctement.

Résumé à ce jour

Le déploiement avec le plugin tomcat7-maven-plugin de maven ne fonctionne pas. Le certificat ssl semble poser problème, mais il n'y a pas de problème même si vous accédez au site depuis un navigateur. Let's encript donne une erreur en fonction de la version de java, mais ce n'est pas la version actuellement utilisée. Jenkins en lui-même n'est pas un problème, car vous obtiendrez des erreurs similaires localement. Puisque vous pouvez le faire avec http, la commande est correcte et il est peu probable qu'il y ait un problème côté client

Pour être honnête, je n'ai aucune idée d'où est le problème. J'ai commencé à penser qu'il serait plus rapide d'enregistrer le certificat en utilisant keytool ici.

Comme vous le verrez plus tard, l'enregistrement avec keytool ne résout pas l'erreur. Donc, en conséquence, c'était la bonne réponse.

Il a dit qu'il enquêtait tout en abandonnant à mi-chemin. .. ..

Il existe un [site](https://community.letsencrypt.org/t/certificate-error-sun-security-validator-validatorexception-pkix-path-building-failed-sun- J'ai trouvé ce commentaire dans security-provider-certpath-suncertpathbuilderexception-can't-to-find-valid-certification-path-to-required-target / 28283).

Votre problème n'a rien à voir avec java! Votre site renvoie une chaîne incomplète de certificats! Nous devons donc le changer pour renvoyer la chaîne complète des certificats (fullchain.pem)!

quoi. .. ..

Certainement j'avais chargé cert1.pem. Comme il a été écrit sur le site, chargez fullchain.pem. .. ..

L'erreur a disparu instantanément et j'ai pu me déployer sans aucun problème! !! !! !!

Résumé

Je viens de changer le fichier de certificat SSL pour qu'il soit lu de cert1.pem en fullchain.pem. Il n'y a aucun problème d'accès à partir du navigateur, et si vous obtenez une erreur lors de l'accès à partir de java, veuillez le vérifier.

À la fin

Le fichier qui lit le certificat SSL a été écrit sur un site, et j'ai pensé que ce serait bien car il fonctionnait avec le certificat SSL sans aucun problème. En raison de cette croyance, j'ai reporté la vérification du bon fonctionnement du SSL.

Je pense toujours que si vous avez fullchain1.pem, vous n'avez pas besoin de cert1.pem, non? Cela ne serait pas arrivé s'il n'y avait que fullchain1.pem. .. .. Si quelqu'un sait pourquoi vous avez besoin de cert1.pem, faites-le moi savoir

Recommended Posts

Une histoire sur la création de chemin PKIX a échoué lors de la tentative de déploiement sur Tomcat avec Jenkins
Une histoire d'essayer de s'entendre avec Mockito
Histoire d'essayer de faire fonctionner le fichier JAVA
La construction du chemin PKIX a échoué: ajouter un certificat SSL à java
Déployer automatiquement sur WildFly avec Jenkins lorsque SVN s'engage
Une histoire sur l'effort de décompiler les fichiers JAR
Une histoire sur la réduction de la consommation de mémoire à 1/100 avec find_in_batches
Une histoire sur l'exécution de Sprint-boot avec kubernetes (GKE) et l'échec de la connexion à CloudSQL
Quand j'ai essayé de composer une mise à jour dans le conteneur Docker, je me suis fâché avec proc_open (): fork a échoué
Hanashi a trébuché un peu sur le chemin en essayant d'étudier Java avec VScode
Mémo à faire pour le moment lors de la construction de la série CentOS 6 avec VirtualBox
Un avertissement s'affiche lorsque vous essayez d'utiliser un entier énorme avec les variables spéciales $ 1, $ 2, $ 3 ...
[PHP] Histoire de la sortie de PDF avec TCPDF + FPDI
Un mémorandum lors de l'essai de Spring Data JPA avec STS
Un mémorandum lors de la tentative de création d'une interface graphique à l'aide de JavaFX
Une histoire sur le développement de ROS appelé rosjava avec java
Une note gênante lorsque vous essayez d'utiliser nginx avec des conteneurs distants de vscode