Lorsque vous travaillez récemment sur un projet ETC, javax.net.ssl.SSLHandshakeException s'est produite lors de l'appel de l'interface ETC.
Informations complètes sur les exceptions:
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
Les informations d'exception ci-dessus invitent: la cible de la demande n'a pas trouvé de chemin de certification valide. Le protocole de communication réseau sécurisé HTTPS est utilisé pour accéder à l'interface ETC. La cause de ce problème est que l'environnement JVM où se trouve l'application ne trouve pas le fichier de certificat correct.
En fait, la solution est assez simple, c'est-à-dire télécharger le certificat de l'adresse de l'interface et l'installer dans l'environnement où se trouve la JVM. Les étapes spécifiques sont les suivantes:
-
Étape 1: Entrez l'adresse de l'interface que l'application doit appeler sur le navigateur, puis appuyez sur F12, puis cliquez sur le bouton Afficher le certificat dans la colonne de sécurité;
rappelez-vous le nom du certificat:
-
Étape 2: Entrez dans "Exécuter"
certmgr.msc
, ouvrez la fenêtre de gestion des certificats et recherchez le fichier de certificat que nous devons télécharger;
-
Étape 3: Sélectionnez le fichier de certificat à télécharger, puis cliquez avec le bouton droit de la souris -> Toutes les tâches -> Exporter et exportez le certificat sur le disque local;
-
Étape 4: Ouvrez la fenêtre de commande, puis exécutez la
keytool
commande pour installer le certificat dans l'environnement local;
参数说明:
-import 导入证书操作
-alias 秘钥对的别名
-keystore 秘钥对的路径及名称
-file 证书文件的路径
-trustcacerts 告诉keytool您要将其导入作为受信任的证书
Par exemple:
keytool -import -alias cacerts -keystore cacerts -file D:\JavaEE\JDK\jdk1.8.2\jre\lib\security\zsetc.crt -trustcacerts
Entrez le mot de passe du magasin de clés et appuyez sur Entrée.
Si vous souhaitez afficher les certificats installés, vous pouvez exécuter la commande suivante:
keytool -list -v -alias cacerts -keystore cacerts -storepass 秘钥库的口令
Supprimer le certificat:
keytool -delete -alias cacerts -keystore cacerts -storepass 秘钥库的口令
En plus des méthodes ci-dessus, trois nouveaux certificats racine ont été ajoutés à la version JDK 8u101 (https://bugs.openjdk.java.net/browse/JDK-8154757).
Par conséquent, les problèmes ci-dessus peuvent également être résolus en mettant à niveau le JDK.