Erreur Java Keytool après l'importation du certificat, "erreur keytool: java.io.FileNotFoundException & Access Denied"

129

J'essaye 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 ces étapes que j'ai apprises grâce aux tutoriels keytool et SSL cert en ligne:

  1. 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.

  2. Exporté les certificats vers un chemin sur mon ordinateur, les certificats ont été enregistrés sous .cer

  3. Utilisé l'option d'importation de keytool. La commande ci-dessous s'est exécutée sans aucune erreur.

    keytool -import -alias downloadedCertAlias -keystore C:\path\to\my\keystore\cacerts.file -file C:\path\of\exportedCert.cer
  4. J'ai été invité à entrer un mot de passe à l'invite de commande, que j'ai entré puis j'ai été authentifié.

  5. La cmdfenêtre a imprimé des données et des signatures de certificat et j'ai été invité avec la question:

    Faites confiance à ce certificat?

    J'ai répondu oui.

  6. L'invite cmd affichée

    Le certificat a été ajouté au magasin de clés

    Cependant, après ce message, une autre exception a été affichée:

    keytool error: java.io.FileNotFoundException: C:\Program files\...\cacerts <Access Denied>

Enfin, lorsque j'ai vérifié le keystore, le certificat SSL n'a pas été ajouté et mon application donne la même exception que celle que je recevais plus tôt en essayant de me connecter:

(javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException)
cyber101
la source
pourriez-vous poster la keytoolcommande exacte que vous avez exécutée, et sa sortie? certains des problèmes évidents ici sont la faute de frappe de l' -keystoreargument et le fait que keytool n'a pas pu trouver le keystore dans lequel importer la clé
Alex
Je voulais écrire: keytool -import -alias downloadCertAlias ​​-keystore C: \ path \ to \ my \ keystore \ cacerts.file -file C: \ path \ of \ exportsCert.cer J'ai également mentionné la commande exécutée sans erreur, donc évidemment c'est juste une faute d'orthographe dans ma question !!! Merci
quand même

Réponses:

268

Cela peut se produire si vous n'exécutez pas l'invite de commande en mode administrateur. Si vous utilisez Windows 7, vous pouvez aller à exécuter, tapez cmd et appuyez sur Ctrl + Maj + Entrée. Cela ouvrira l'invite de commande en mode administrateur. Sinon, vous pouvez également aller dans démarrer -> tous les programmes -> accessoires -> faire un clic droit sur l'invite de commande et cliquer sur «exécuter en tant qu'administrateur».

Sharan Rajendran
la source
9
Pour les utilisateurs de Mac, un simple sudo résoudra ce problème.
véridicité
13
courir en tant qu'administrateur n'est pas la bonne solution. La plupart des entreprises bloquent l'accès administrateur. Mieux vaut corriger la raison pour laquelle l'accès est refusé plutôt que d'élever la prévalence.
skword
tapez cmd et appuyez sur Ctrl + Maj + Entrée et ajouté le certificat avec succès
Cela a
Merci. control-shift CMD était la seule façon dont je pouvais modifier le magasin de cacerts.
Malcolm Boekhoff
@Afshar merci beaucoup, j'ai du mal avec ça depuis assez longtemps.
Rajan Chauhan
21

J'ai eu le même problème sous Windows et j'ai pu le résoudre en exécutant cmd.exe en tant qu'administrateur (clic droit dans le menu démarrer, puis "Exécuter en tant qu'administrateur).

Daniel
la source
19

J'avais le même problème lors de l'importation du certificat dans le keystore local. Chaque fois que j'émets la commande keytool, j'ai l'erreur suivante.

Le certificat a été ajouté à l'erreur keytool du fichier de clés: java.io.FileNotFoundException: C: \ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ security (l'accès est refusé)

La solution suivante fonctionne pour moi.

1) assurez-vous que vous exécutez l'invite de commande dans Rus en mode administrateur

2) Changez votre répertoire actuel en% JAVA_HOME% \ jre \ lib \ security

3) puis émettez la commande ci-dessous

keytool -import -alias "mycertificatedemo" -file "C: \ Users \ name \ Downloads \ abc.crt" -keystore cacerts

3) donnez le changement de mot de passe

4) entrez y

5) vous verrez le message suivant en cas de réussite "Le certificat a été ajouté au keystore"

Assurez-vous que vous ne donnez le " cacerts " que dans la valeur du paramètre -keystore, car je donnais le chemin complet comme "C **: \ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ security **".

J'espère que cela fonctionnera

Waqas Ahmed
la source
1
Comme mentionné ici, être en fait dans le répertoire de sécurité et ne donner que le nom "cacerts" du cert au lieu du chemin complet était ce qui fonctionnait pour moi.
RisingTide
J'ai utilisé sudo -i pour devenir le superutilisateur dans la première étape sur Mac et j'ai suivi les étapes et cela a fonctionné. J'ai ouvert le fichier carets sous forme de fichier texte et j'ai trouvé mon certificat en exécutant la commande f pour rechercher son nom (ou toute autre chose relative au certificat).
Chigozie A.
11

Vérifiez les autorisations d'écriture sur le keystore.

partha saradhi
la source
2
Si quelqu'un peut développer cela, le simple fait de vérifier les autorisations ne changera rien.
user3071284
la définition du répertoire tomcat en lecture seule provoquera cette exception
svarog
comment vérifier la permission weite?
Ahmad Arslan
3

Pour les utilisateurs de Mac, assurez-vous de sudo et, lorsque vous y êtes invité, donnez d'abord votre mot de passe administrateur, qui sera suivi du mot de passe du keystore qui devrait généralement être "changeit" sauf si vous l'avez réellement changé.

VK
la source
1

Si vous utilisez Windows8:

  1. Cliquez sur le bouton de démarrage
  2. Dans la zone de recherche, saisissez command prompt
  3. À partir du résultat, faites un clic droit command promptet cliquez Run as administrator. Exécutez ensuite la commande keytool.
arungopal
la source
1

Vous pouvez vous accorder des autorisations pour résoudre ce problème.

Cliquez avec le bouton droit sur cacerts> choisissez les propriétés> sélectionnez l'onglet Sécurité> Autoriser toutes les autorisations sur tous les noms de groupe et d'utilisateur.

Cela a fonctionné pour moi.

goyalshub1509
la source
0

J'ai même exécuté l'invite de commande en tant qu'administrateur, mais cela n'a pas fonctionné 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 au keytool ne se trouve pas dans vos chemins système, vous devrez utiliser le chemin complet pour utiliser le keytool, 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.

sher17
la source
0

J'ai également eu cette erreur même si j'ai exécuté cmd en tant qu'administrateur.

La cause première est: Le fichier provient de VCS (subversion, perforce, etc.), et lorsque j'ai vérifié les propriétés de ce fichier, ses attributs sont en lecture seule .

La solution est donc:

  • (1) désactiver l'attribut «lecture seule»;
  • (2) extraire du VCS, laissez le fichier sous l'état de lecture et d'écriture.
Schroeder
la source
-1

RÉSOLU

  1. Exécutez simplement CMD en tant qu'administrateur.
  2. Assurez-vous que vous utilisez le bon mot de passe Truststore
Ismael Ozil
la source
-2

Vous pouvez stocker un autre disque ou chemin (pas C) EX: D \

C:\Program Files\Java\jre1.8.0_101\bin>keytool -genkey -alias server -keyalg RSA -keysize 2048 -keystore D:\myserver.jks -dname "CN=myserver,OU=IT-WebDev, O=TIACHOP, L=HCM, ST=0753, C=VN" && keytool -certreq -alias server -file D:\myserver.csr -keystore D:\myserver.jks

entrez la description de l'image ici

maithanhduyan
la source