Erro do Java Keytool após a importação do certificado, “erro do keytool: java.io.FileNotFoundException & Access Denied”

128

Estou tentando conectar uma API da Web Java via HTTPS; no entanto, uma exceção é lançada:

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

Segui estas etapas que aprendi com os tutoriais on-line de ferramentas-chave e certificados SSL:

  1. Copiei a URL HTTPS no navegador, baixei os certificados SSL e os instalei no navegador usando o Internet Explorer.

  2. Exportados os certificados para um caminho no meu computador, os certificados foram salvos como .cer

  3. Usou a opção de importação do keytool. O comando abaixo é executado sem erros.

    keytool -import -alias downloadedCertAlias -keystore C:\path\to\my\keystore\cacerts.file -file C:\path\of\exportedCert.cer
  4. Foi solicitada uma senha no prompt de comando, que eu inseri e fui autenticada.

  5. A cmdjanela imprimiu alguns dados e assinaturas de certificado e uma pergunta foi solicitada:

    Confiar neste certificado?

    Eu respondi que sim.

  6. O prompt do cmd exibido

    O certificado foi adicionado ao keystore

    No entanto, após essa mensagem, outra exceção foi exibida:

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

Finalmente, quando verifiquei o keystore, o certificado SSL não foi adicionado e meu aplicativo apresenta a mesma exceção que eu estava recebendo antes ao tentar conectar:

(javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException)
cyber101
fonte
você poderia postar o keytoolcomando exato que você executou e sua saída? algumas das questões óbvias aqui são o erro de digitação de -keystoreargumento, eo fato de que keytool foi incapaz de encontrar o armazenamento de chaves para importar a chave na
Alex
Eu pretendia escrever: keytools -import -aliasdownloadCertAlias ​​-keystore C: \ caminho \ para \ meu \ keystore \ cacerts.file -arquivo C: \ caminho \ of \ exportedCert.cer Também mencionei o comando executado sem erros, então obviamente isso é apenas erro de ortografia na minha pergunta !!! Obrigado de qualquer forma
cyber101

Respostas:

267

Isso pode acontecer se você não estiver executando o prompt de comando no modo administrador. Se você estiver usando o Windows 7, poderá executar, digite cmd e pressione Ctrl + Shift + enter. Isso abrirá o prompt de comando no modo administrador. Caso contrário, você também pode ir para iniciar -> todos os programas -> acessórios -> clique com o botão direito do mouse no prompt de comando e clique em 'executar como administrador'.

Sharan Rajendran
fonte
9
Para usuários de Mac, um simples sudo corrigirá esse problema.
truthful_ness
13
executar como administrador não é a solução certa. A maioria das empresas está bloqueando o acesso de administrador. Melhor fixar o motivo pelo qual o acesso é negado, em vez de elevar as prevalências.
skword 21/01
digite cmd e pressione Ctrl + Shift + Enter e acrescentou certificado successfully- Sua funcionou para mim
deadend
Obrigado. a mudança de controle CMD era a única maneira de alterar a loja de cacerts.
Malcolm Boekhoff 26/11/19
@ AFshar muito obrigado eu tenho lutado com isso por um longo tempo.
Rajan Chauhan
21

Eu tinha o mesmo problema no Windows e poderia resolvê-lo executando o cmd.exe como administrador (clique com o botão direito do mouse no menu Iniciar e depois em "Executar como administrador).

daniel
fonte
19

Eu estava tendo o mesmo problema ao importar o certificado no keystore local. Sempre que eu emitir o comando keytool, recebo o seguinte erro.

O certificado foi adicionado ao erro keytool do keystore: java.io.FileNotFoundException: C: \ Arquivos de Programas \ Java \ jdk1.8.0_151 \ jre \ lib \ security (Acesso negado)

Solução seguinte funciona para mim.

1) verifique se você está executando o prompt de comando no modo de administrador como administrador

2) Altere seu diretório atual para% JAVA_HOME% \ jre \ lib \ security

3) Emita o comando abaixo

keytool -import -alias "mycertificatedemo" -file "C: \ Usuários \ nome \ Downloads \ abc.crt" -keystore cacerts

3) dê a senha changeit

4) digite y

5) você verá a seguinte mensagem no êxito "O certificado foi adicionado ao keystore"

Certifique-se de dar as " cacerts " apenas no valor de parâmetro -keystore, como eu estava fornecendo o caminho completo como "C **: \ Arquivos de Programas \ Java \ jdk1.8.0_151 \ jre \ lib \ security **".

Espero que isso funcione

Waqas Ahmed
fonte
1
Como mencionado aqui, estar no diretório de segurança e fornecer apenas o nome "cacerts" do certificado em vez do caminho completo foi o que funcionou para mim.
risingTide
Usei o sudo -i para me tornar o superusuário no primeiro passo no Mac e segui os passos e funcionou. Abri o arquivo de intercalação como um arquivo de texto e encontrei meu certificado executando o comando f para procurar seu nome (ou qualquer outra coisa relacionada ao certificado).
Chigozie A.
11

Verifique as permissões de gravação no keystore.

partha saradhi
fonte
2
Se alguém puder expandir isso, apenas verificar as permissões não mudará nada.
user3071284
definindo o diretório tomcat ler-só irá causar esta exceção
svarog
como obter a permissão weite?
Ahmad Arslan
3

Para usuários de Mac, certifique-se de usar o sudo e, quando solicitado, forneça primeiro a senha do administrador, que será seguida pela senha do keystore, que normalmente deve ser "changeit", a menos que você realmente a tenha alterado.

VK
fonte
1

Se você estiver usando o windows8:

  1. Clique no botão Iniciar
  2. Na caixa de pesquisa, digite command prompt
  3. No resultado, clique com o botão direito do mouse command prompte clique em Run as administrator. Em seguida, execute o comando keytool.
arungopal
fonte
1

Você pode se dar permissões para corrigir esse problema.

Clique com o botão direito do mouse em cacerts> escolha propriedades> selecione a guia Securit> Permitir todas as permissões para todos os nomes de grupo e usuário.

Isso funcionou para mim.

goyalshub1509
fonte
0

Até executei o prompt de comando como administrador, mas não funcionou para mim com o erro abaixo.

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

Se o caminho para o keytool não estiver nos caminhos do sistema, você precisará usar o caminho completo para usar o keytool, que é

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

Então, o comando deve ser como

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

isso funcionou para mim.

sher17
fonte
0

Também recebi esse erro, mesmo que eu executei o cmd como administrador.

A causa principal é: O arquivo é do VCS (subversão, forçado etc.) e, quando verifiquei as propriedades desse arquivo, seus 'Atributos são somente leitura .

Então a solução é:

  • (1) desabilite o atributo 'somente leitura';
  • (2) confira no VCS, deixe o arquivo com o status de leitura e gravação.
Schroeder
fonte
-1

RESOLVIDO

  1. Basta executar o CMD como administrador.
  2. Certifique-se de usar a senha correta do armazenamento confiável
Ismael ozil
fonte
-2

Você pode armazenar outro disco ou caminho (não 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

insira a descrição da imagem aqui

maithanhduyan
fonte