J'essaie de connecter une API Web Java via HTTPS; Cependant, une exception est levée:
javax.net.ssl.SSLHandshakeException: Sun.security.validator.ValidatorException
J'ai suivi les étapes que j'ai apprises dans les tutoriels en ligne de Keytool & SSL Cert:
J'ai copié l'URL HTTPS dans le navigateur, téléchargé les certificats SSL et les ai installés dans le navigateur à l'aide d'Internet Explorer.
Exporté les certificats vers un chemin sur mon ordinateur, les certificats ont été enregistrés en tant que .cer
Utilisé l'option d'importation du keytool. La commande ci-dessous est exécutée sans erreur.
keytool -import -alias downloadedCertAlias -keystore C:\path\to\my\keystore\cacerts.file -file C:\path\of\exportedCert.cer
Un mot de passe a été demandé à la commande Invite, que j'ai saisie puis authentifiée.
La fenêtre cmd
imprimait des données de certificat et des signatures et la question me demandait:
Faites confiance à ce certificat?
J'ai répondu oui.
L'invite cmd affichée
Le certificat a été ajouté au magasin de clés
Cependant, après ce message, une autre exception était affichée:
keytool error: Java.io.FileNotFoundException: C:\Program files\...\cacerts <Access Denied>
Enfin, lorsque j'ai vérifié le magasin de clés, le certificat SSL n'a pas été ajouté et mon application génère la même exception que celle que je rencontrais auparavant lorsque je tente de me connecter:
(javax.net.ssl.SSLHandshakeException:Sun.security.validator.ValidatorException)
Cela peut se produire si vous n'exécutez pas la commande Invite en mode administrateur. Si vous utilisez Windows 7, vous pouvez vous lancer, tapez cmd et appuyez sur Ctrl + Maj + Entrée. Cela ouvrira la commande Invite en mode administrateur. Sinon, vous pouvez aussi aller dans Démarrer -> Tous les programmes -> Accessoires -> Invite de commande avec le bouton droit de la souris et cliquer sur 'Exécuter en tant qu'administrateur'.
J'avais le même problème sous Windows et je pouvais le résoudre par exécutant cmd.exe en tant qu'administrateur (clic droit dans le menu Démarrer, puis "Exécuter en tant qu'administrateur).
Vérifiez les autorisations d'écriture sur le magasin de clés.
J'avais le même problème lors de l'importation du certificat dans le magasin de clés local. Chaque fois que j'émets la commande keytool j'ai l'erreur suivante.
Le certificat a été ajouté au magasin de clés Erreur keytool: Java.io.FileNotFoundException: C:\Program Files\Java\jdk1.8.0_151\jre\lib\security (accès refusé).
La solution suivante fonctionne pour moi.
1) assurez-vous d’exécuter la commande Invite en mode Rus en tant qu’administrateur
2) Modifiez votre répertoire actuel en% Java_HOME%\jre\lib\security
3) puis émettez la commande ci-dessous
keytool -import -alias "mycertificatedemo" -file "C:\Utilisateurs\nom\Téléchargements\abc.crt" -keystore cacerts
3) donner le changement de mot de passe
4) entrez y
5) le message suivant apparaîtra avec succès "Le certificat a été ajouté au magasin de clés"
Assurez-vous de donner le " cacerts " uniquement dans la valeur du paramètre keystore, comme je donnais le chemin complet comme "C **:\Program Files\Java\jdk1.8.0_151\jre\lib\security * * ".
J'espère que ça va marcher
Pour les utilisateurs Mac, assurez-vous que vous utilisez Sudo et, lorsque vous y êtes invité, donnez d'abord votre mot de passe administrateur. Ce mot de passe sera suivi du mot de passe du magasin de clés, qui devrait normalement être "changeit", à moins que vous ne le changiez réellement.
Si vous utilisez Windows8:
command Prompt
command Prompt
et cliquez sur Run as administrator
. Ensuite, exécutez la commande keytool.J'ai le même problème sous Windows 10 lorsque j'utilise PowerShell, mais cela fonctionne si j'utilise cmd.
J'ai même exécuté la commande Invite en tant qu'administrateur mais cela ne fonctionnait pas pour moi avec l'erreur ci-dessous.
'keytool' is not recognized as an internal or external command,
operable program or batch file.
Si le chemin d'accès à l'outil de clé ne se trouve pas dans vos chemins d'accès système, vous devrez utiliser le chemin complet pour utiliser l'outil de clé, qui est
C:\Program Files\Java\jre<version>\bin
Donc, la commande devrait être comme
"C:\Program Files\Java\jre<version>\bin\keytool.exe" -importcert -alias certificateFileAlias -file CertificateFileName.cer -keystore cacerts
cela a fonctionné pour moi.