Error de Java Keytool después de importar el certificado, "error de keytool: java.io.FileNotFoundException & Access Denied"

128

Estoy tratando de conectar una API web Java a través de HTTPS; sin embargo, se lanza una excepción:

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

Seguí estos pasos que aprendí de los tutoriales en línea de keytool y cert SSL:

  1. Copié la URL HTTPS en el navegador, descargué los certificados SSL y los instalé en el navegador usando Internet Explorer.

  2. Exporté los certificados a una ruta en mi computadora, los certificados se guardaron como .cer

  3. Usó la opción de importación de keytool. El siguiente comando se ejecuta sin ningún error.

    keytool -import -alias downloadedCertAlias -keystore C:\path\to\my\keystore\cacerts.file -file C:\path\of\exportedCert.cer
  4. Se me solicitó una contraseña en el símbolo del sistema, que ingresé y luego me autentiqué.

  5. La cmdventana imprimió algunos datos y firmas de certificados y me preguntaron:

    ¿Confía en este certificado?

    Yo respondí que sí.

  6. Se muestra el indicador de cmd

    El certificado fue agregado al almacén de claves

    Sin embargo, después de ese mensaje, se mostró otra excepción:

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

Finalmente, cuando verifiqué el almacén de claves, el certificado SSL no se agregó y mi aplicación ofrece la misma excepción que recibí antes al intentar conectarme:

(javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException)
cyber101
fuente
¿podría publicar el keytoolcomando exacto que ha ejecutado y su salida? algunas de las cuestiones obvias aquí son el typo del -keystoreargumento, y el hecho de que la herramienta de claves fue incapaz de encontrar el almacén de claves para importar la llave en
Alex
Quise escribir: keytool -import -alias downloadCertAlias ​​-keystore C: \ path \ to \ my \ keystore \ cacerts.file -file C: \ path \ of \ exportedCert.cer También mencioné el comando ejecutado sin errores, así que obviamente ¡Esto es solo un error de ortografía en mi pregunta! Gracias de todos modos
cyber101

Respuestas:

267

Esto podría suceder si no está ejecutando el símbolo del sistema en modo administrador. Si está utilizando Windows 7, puede ir a ejecutar, escribir cmd y presionar Ctrl + Shift + enter. Esto abrirá el símbolo del sistema en modo administrador. Si no, también puede ir a Inicio -> todos los programas -> accesorios -> haga clic con el botón derecho en el símbolo del sistema y haga clic en "Ejecutar como administrador".

Sharan Rajendran
fuente
9
Para los usuarios de Mac, un sudo simple solucionará este problema.
truthful_ness
13
ejecutarse como administrador no es la solución correcta. La mayoría de las empresas están bloqueando el acceso de administrador. Es mejor arreglar la razón de por qué se niega el acceso en lugar de elevar los previlages.
skword
escriba cmd y presione Ctrl + Shift + enter y agregue el certificado con éxito- Funcionó para mí
finalizó
Gracias. control-shift CMD era la única forma en que podía alterar la tienda de cacerts.
Malcolm Boekhoff
@Afshar muchas gracias, he estado luchando con esto durante bastante tiempo.
Rajan Chauhan
21

Tuve el mismo problema en Windows y pude resolverlo ejecutando cmd.exe como administrador (haga clic con el botón derecho en el menú de inicio y luego "Ejecutar como administrador).

daniel
fuente
19

Estaba teniendo el mismo problema al importar el certificado en el almacén de claves local. Cada vez que emito el comando keytool recibo el siguiente error.

El certificado se agregó al error keytool del almacén de claves: java.io.FileNotFoundException: C: \ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ security (acceso denegado)

La siguiente solución me funciona.

1) asegúrese de ejecutar el símbolo del sistema en Rus como modo Administrador

2) Cambie su directorio actual a% JAVA_HOME% \ jre \ lib \ security

3) luego emita el siguiente comando

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

3) dar la contraseña changeit

4) ingrese y

5) verá el siguiente mensaje sobre "El certificado se agregó al almacén de claves"

Asegúrese de dar los " cacerts " solo en el valor de parámetro -keystore, ya que estaba dando la ruta completa como "C **: \ Archivos de programa \ Java \ jdk1.8.0_151 \ jre \ lib \ security **".

Espero que esto funcione

Waqas Ahmed
fuente
1
Como se mencionó aquí, estar en el directorio de seguridad y solo dar el nombre "cacerts" del certificado en lugar de la ruta completa fue lo que funcionó para mí.
risingTide
Usé sudo -i para convertirme en el superusuario en el primer paso en Mac y seguí los pasos y funcionó. Abrí el archivo carets como un archivo de texto y encontré mi certificado haciendo el comando f para buscar su nombre (o cualquier otra cosa relacionada con el certificado).
Chigozie A.
11

Verifique los permisos de escritura en el almacén de claves.

partha saradhi
fuente
2
Si alguien puede ampliar esto, solo verificar los permisos no cambiará nada.
user3071284
configurar el directorio tomcat en solo lectura provocará esta excepción
svarog
¿Cómo buscar el permiso de Weite?
Ahmad Arslan
3

Para los usuarios de Mac, asegúrese de sudo y, cuando se le solicite, proporcione primero su contraseña de administrador, que será seguida por la contraseña del almacén de claves, que normalmente debería ser "changeit" a menos que realmente la haya cambiado.

VK
fuente
1

Si está utilizando windows8:

  1. Haga clic en el botón de inicio
  2. En el cuadro de búsqueda, escriba command prompt
  3. Del resultado, haga command promptclic derecho y clic Run as administrator. Luego ejecute el comando keytool.
arungopal
fuente
1

Puede otorgarse permisos para solucionar este problema.

Haga clic con el botón derecho en cacerts> elija propiedades> seleccione la pestaña Seguridad> Permitir todos los permisos a todos los nombres de grupo y usuario.

Esto funcionó para mí.

goyalshub1509
fuente
0

Incluso ejecuté el símbolo del sistema como Administrador, pero no funcionó para mí con el siguiente error.

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

Si la ruta de acceso a la herramienta de claves no está en las rutas de su sistema, deberá usar la ruta completa para usar la herramienta de claves, que es

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

Entonces, el comando debería ser como

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

Eso funcionó para mí.

sher17
fuente
0

También recibí este error, incluso ejecuté cmd como administrador.

La causa raíz es: El archivo es de VCS (subversión, rendimiento, etc.), y cuando verifiqué las propiedades de este archivo, sus 'Atributos son de solo lectura .

Entonces la solución es:

  • (1) deshabilitar el atributo 'Solo lectura';
  • (2) desproteger desde VCS, deje el archivo bajo el estado de lectura y escritura
Schroeder
fuente
-1

RESUELTO

  1. Simplemente ejecute CMD como administrador.
  2. Asegúrese de estar utilizando la contraseña correcta del almacén de confianza
Ismael ozil
fuente
-2

Puede almacenar más disco o ruta (no 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

ingrese la descripción de la imagen aquí

maithanhduyan
fuente