Errore Java Keytool dopo l'importazione del certificato, "errore keytool: java.io.FileNotFoundException e accesso negato"


129

Sto provando a connettere un'API Web Java tramite HTTPS; tuttavia, viene generata un'eccezione:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException

Ho seguito questi passaggi che ho imparato da keytool online e tutorial sui certificati SSL:

  1. Ho copiato l'URL HTTPS nel browser, scaricato i certificati SSL e li ho installati nel browser utilizzando Internet Explorer.

  2. Esportati i certificati in un percorso sul mio computer, i certificati sono stati salvati come .cer

  3. Ha utilizzato l'opzione di importazione di keytool. Il comando seguente è stato eseguito senza errori.

    keytool -import -alias downloadedCertAlias -keystore C:\path\to\my\keystore\cacerts.file -file C:\path\of\exportedCert.cer
  4. Mi è stata richiesta una password al prompt dei comandi, che ho inserito poi sono stato autenticato.

  5. La cmdfinestra ha stampato alcuni dati e firme del certificato e mi è stata richiesta la domanda:

    Fidati di questo certificato?

    Ho risposto di sì.

  6. Viene visualizzato il prompt di cmd

    Il certificato è stato aggiunto al keystore

    Tuttavia, dopo quel messaggio, è stata visualizzata un'altra eccezione:

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

Alla fine, quando ho controllato il keystore, il certificato SSL non è stato aggiunto e la mia applicazione restituisce la stessa eccezione che stavo ricevendo prima durante il tentativo di connessione:

(javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException)

potresti pubblicare il keytoolcomando esatto che hai eseguito e il suo output? alcuni dei problemi ovvi qui sono il refuso -keystoredell'argomento e il fatto che keytool non è stato in grado di trovare il keystore in cui importare la chiave
Alex

Volevo scrivere: keytool -import -alias downloadCertAlias ​​-keystore C: \ path \ to \ my \ keystore \ cacerts.file -file C: \ path \ of \ exportedCert.cer Ho anche menzionato il comando eseguito senza errori, quindi ovviamente questo è solo un errore di ortografia nella mia domanda !!! Grazie comunque
cyber101

Risposte:


268

Ciò potrebbe accadere se non stai eseguendo il prompt dei comandi in modalità amministratore. Se stai usando Windows 7, puoi andare a correre, digitare cmd e premere Ctrl + Maiusc + Invio. Questo aprirà il prompt dei comandi in modalità amministratore. In caso contrario, puoi anche andare su Start -> tutti i programmi -> accessori -> fare clic con il pulsante destro del mouse sul prompt dei comandi e fare clic su "Esegui come amministratore".


9
Per gli utenti Mac, un semplice sudo risolverà questo problema.
truthful_ness

13
correre come amministratore non è la soluzione giusta. La maggior parte delle aziende blocca l'accesso amministrativo. Meglio risolvere il motivo per cui l'accesso è negato piuttosto che elevare i privilegi.
skword

digita cmd e premi Ctrl + Maiusc + Invio e aggiunto il certificato correttamente
Ha

Grazie. CMD control-shift era l'unico modo in cui potevo modificare l'archivio cacerts.
Malcolm Boekhoff

@Afshar grazie mille ho lottato con questo per un bel po 'di tempo.
Rajan Chauhan

21

Ho avuto lo stesso problema in Windows e ho potuto risolverlo eseguendo cmd.exe come amministratore (fai clic con il pulsante destro del mouse nel menu di avvio, quindi "Esegui come amministratore).


19

Ho riscontrato lo stesso problema durante l'importazione del certificato nel keystore locale. Ogni volta che emetto il comando keytool ho ricevuto il seguente errore.

Il certificato è stato aggiunto all'errore keytool del keystore: java.io.FileNotFoundException: C: \ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ security (Accesso negato)

La seguente soluzione funziona per me.

1) assicurati di eseguire il prompt dei comandi in modalità Rus come amministratore

2) Cambia la tua directory corrente in% JAVA_HOME% \ jre \ lib \ security

3) quindi eseguire il comando seguente

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

3) dare la password changeit

4) inserisci y

5) vedrai il seguente messaggio in caso di successo "Il certificato è stato aggiunto al keystore"

Assicurati di dare il valore di parametro " cacerts " solo in -keystore, poiché stavo fornendo il percorso completo come "C **: \ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ security **".

Spero che funzioni


1
Come accennato qui, essere effettivamente nella directory di sicurezza e dare solo il nome "cacerts" del certificato invece del percorso completo era ciò che ha funzionato per me.
risingTide

Ho usato sudo -i per diventare il superutente nel primo passaggio su Mac e ho seguito i passaggi e ha funzionato. Ho aperto il file con l'accento circonflesso come file di testo e ho trovato il mio certificato eseguendo il comando f per cercare il suo nome (o qualsiasi altra cosa relativa al certificato).
Chigozie A.

11

Controlla i permessi di scrittura sul keystore.


2
Se qualcuno può ampliarlo, il semplice controllo delle autorizzazioni non cambierà nulla.
user3071284

l'impostazione della directory tomcat in sola lettura causerà questa eccezione
svarog

come controllare il permesso weite?
Ahmad Arslan

3

Per gli utenti Mac, assicurati di eseguire sudo e, quando richiesto, inserisci prima la tua password di amministratore e questa sarà seguita dalla password del keystore che normalmente dovrebbe essere "changeit" a meno che tu non l'abbia effettivamente cambiata.


1

Se stai usando Windows8:

  1. Fare clic sul pulsante di avvio
  2. Nella casella di ricerca, digita command prompt
  3. Dal risultato, fare clic con il tasto destro command prompte fare clic Run as administrator. Quindi eseguire il comando keytool.

1

Puoi concederti le autorizzazioni per risolvere questo problema.

Fare clic con il tasto destro su cacerts> scegliere proprietà> selezionare la scheda Securit> Consenti tutte le autorizzazioni a tutti i nomi di gruppo e utente.

Questo ha funzionato per me.


0

Ho persino eseguito il prompt dei comandi come amministratore, ma non ha funzionato per me con l'errore seguente.

'keytool' is not recognized as an internal or external command,
 operable program or batch file.

Se il percorso dello strumento chiave non è nei percorsi di sistema, sarà necessario utilizzare il percorso completo per utilizzare lo strumento chiave, che è

C:\Program Files\Java\jre<version>\bin

Quindi, il comando dovrebbe essere come

"C:\Program Files\Java\jre<version>\bin\keytool.exe" -importcert -alias certificateFileAlias -file CertificateFileName.cer -keystore cacerts

che ha funzionato per me.


0

Ho ricevuto anche questo errore anche se ho eseguito cmd come amministratore.

La causa principale è: il file proviene da VCS (subversion, perforce, ecc.) E quando ho controllato le proprietà di questo file, i suoi attributi sono di sola lettura .

Quindi la soluzione è:

  • (1) disabilitare l'attributo "Sola lettura";
  • (2) controlla da VCS, lascia che il file sia in stato di lettura e scrittura.

-1

RISOLTO

  1. Esegui semplicemente CMD come amministratore.
  2. Assicurati di utilizzare la password del truststore corretta

-2

È possibile memorizzare un altro disco o percorso (non 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

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.