niquel
Estoy tratando de actualizar el certificado SSL de acuerdo con esta publicación
.
Soy novato en certificados, así que seguí esta guía. Pero, cuando entro
keytool -keystore mycacerts -storepass changeit -importcert -file "C:\Users\Noks\Desktop\cacerts.pem" -v
me sale el error:
keytool error: java.lang.Exception: Input not an X.509 certificate
java.lang.Exception: Input not an X.509 certificate
at sun.security.tools.KeyTool.addTrustedCert(KeyTool.java:1913)
at sun.security.tools.KeyTool.doCommands(KeyTool.java:818)
at sun.security.tools.KeyTool.run(KeyTool.java:172)
at sun.security.tools.KeyTool.main(KeyTool.java:166)
¿Cómo puedo solucionar esto?
bruno grieder
¿Su archivo cacerts.pem tiene un solo certificado? Ya que es un PEM, míralo (con un editor de texto), debería comenzar con
-----BEGIN CERTIFICATE-----
y terminar con
-----END CERTIFICATE-----
Finalmente, para comprobar que no está corrupto, hazte con openssl e imprime sus detalles usando
openssl x509 -in cacerts.pem -text
-
Bueno, tenía muchas de esas unidades, solo lo modifiqué para incluir una. Se instaló correctamente 🙂
– Nikel
27 de marzo de 2012 a las 13:33
-
¿Acaba de agregar un CERTIFICADO DE INICIO y un CERTIFICADO DE FINALIZACIÓN entre todos los datos? También estoy enfrentando el mismo problema, ¿puedes ayudarme diciendo lo que hiciste?
– Rengasami Ramanujam
10 de mayo de 2012 a las 13:13
-
Las líneas ya deberían estar allí. Si no lo están, es probable que su certificado esté codificado en DER (o no sea válido). Para convertirlo hazlo
openssl x509 -in mycert.der -inform DER -out myCert.pem -outform PEM
. Para verlo y verificarloopenssl -in myCert.pem -text
. El archivo debe contener un solo certificado.–Bruno Grieder
10 mayo 2012 a las 14:19
-
El problema también puede ser que
keytool
puede ser un poco hipersensible a los espacios y finales de línea. Traté de importar el Vamos a cifrar certificado, y falló por eso, y arreglé el formato del certificado conopenssl x509 -in broken.pem -out correct.pem
y lo importocorrect.pem
sin problemas.– Stefan Seidel
16 de marzo de 2016 a las 9:45
-
minúscula x509 es importante!
– Deián
1 jun 2019 a las 14:54
supervago
Muchas CA proporcionarán un certificado en formato PKCS7.
De acuerdo a Documentación de Oracleel comando keytool puede manejar PKCS#7 pero a veces falla
El comando keytool puede importar certificados X.509 v1, v2 y v3, y cadenas de certificados con formato PKCS#7 que consisten en certificados de ese tipo. Los datos que se van a importar deben proporcionarse en formato de codificación binaria o en formato de codificación imprimible (también conocido como codificación Base64) según lo define el estándar Internet RFC 1421. En este último caso, la codificación debe estar delimitada al principio por una cadena que comience con —–BEGIN y al final por una cadena que comience con —–END.
Si el archivo PKCS7 no se puede importar, intente transformarlo de PKCS7 a X.509:
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
-
Lo que el documento no deja claro es que cuando
-importcert
a una entrada de clave privada existente, espera una ‘respuesta de certificado’, que puede ser un solo certificado o una cadena que incluya un PKCS7 usandoCertificateFactory.generateCertificates
(con s al final) pero cuando-importcert
a una nueva entrada de certificado de confianza, espera solo un certificado y NO PKCS7 usandogenerateCertificate
(sin s). Si desea confiar en varios certificados en una cadena (y el objetivo del encadenamiento es que no es necesario), debe importarlos individualmente a diferentes alias.– dave_thompson_085
2 de febrero de 2019 a las 12:11
-
Yo también estaba enfrentando el problema de error de keytool: java.lang.Exception: la entrada no es un certificado X.509 Apliqué el comando anterior en mi certificado pkcs12 pero cambié -print_certs con -clcerts. Uno puede ver todos los comandos pkcs12 con
openssl pkcs12 -help
. el comando es:openssl pkcs12 -clcerts -in certfile.p12 -out newcertfile.cer
ingrese la contraseña del certificado p12 y luego la frase de contraseña para PEM. Nota: copié el certificado p12 en otro lugar y luego generé .cer a partir de eso para evitar cualquier riesgo para el certificado original.– Noor Kan
27 de noviembre de 2021 a las 3:10
XDanny322
Esto parece un hilo viejo, pero agregaré mi experiencia aquí. También intenté instalar un certificado y obtuve ese error. Luego abrí el archivo cer con un editor de texto y noté que hay un espacio adicional (carácter) al final de cada línea. Eliminar esas líneas me permitió importar el certificado.
Espero que esto valga algo para alguien más.
-
Este fue el problema para mí también, creo que porque copié el texto del certificado directamente del correo electrónico del proveedor del certificado, dejó un espacio al final de cada línea.
– Continuidad8
10 de septiembre de 2017 a las 5:10
-
Jesucristo. Esto realmente me salvó. ¡Gracias!
– Señor Derpington
28 de abril de 2020 a las 15:27
-
Para hacer esto de la manera más fácil, si su editor de texto admite buscar/reemplazar con expresiones regulares (por ejemplo, como lo hace el Bloc de notas del programador), reemplace
\s*[\r\n]+\s*
con\n
.– JohnLBevan
19 de febrero de 2021 a las 9:36
mike nakis
Como muestran las otras respuestas a esta pregunta, hay muchas causas posibles para este mensaje de error. La razón por la que te está pasando a ti puede ser totalmente diferente a la razón por la que me está pasando a mí. Y, desafortunadamente, el mensaje de error no señala en absoluto la fuente real del problema, por lo que es completamente inútil en la resolución de problemas. De hecho, es completamente engañoso.
Entonces, en lugar de brindarle una más de la miríada de posibles causas de este mensaje de error, lo que haré será mostrarle cómo solucionar este problema para descubrir qué lo está causando en su situación particular.
En el trabajo, comúnmente usamos los siguientes dos comandos para permitir que algún software se comunique con varios servidores, por ejemplo, para permitir que IntelliJ IDEA se comunique con nuestros repositorios maven internos:
[Elevated]keytool
-printcert -rfc -sslserver maven.services.{our-company}.com:443 > public.crt
[Elevated]keytool
-import -storepass changeit -noprompt -trustcacerts -alias services.{our-company}.com
-keystore lib\security\cacerts -file public.crt
Ahora, lo que a veces sucede es que el keytool -printcert
El comando no puede hacer su trabajo, ya sea debido a una configuración incorrecta o simplemente a problemas de conectividad temporales, como el firewall que lo impide, el usuario olvidó iniciar su VPN, lo que sea. Es un hecho de la vida que esto puede suceder. Este no es realmente el problema.
El problema es que cuando la estúpida herramienta encuentra tal error, no emite el mensaje de error al dispositivo de error estándar, ¡lo emite al dispositivo de salida estándar!
Así que esto es lo que termina sucediendo:
- Cuando ejecuta el primer comando, no ve ningún mensaje de error, por lo que no tiene idea de que falló. Sin embargo, en lugar de una llave, el
public.crt
el archivo ahora contiene un mensaje de error que dicekeytool error: java.lang.Exception: No certificate from the SSL server
. - Cuando ejecuta el segundo comando, se lee
public.crt
y encuentra el texto del mensaje de error en lugar de una clave en él, por lo que falla, diciendokeytool error: java.lang.Exception: Input not an X.509 certificate
.
La conclusión es: después keytool -printcert ... > public.crt
volcar siempre el contenido de public.crt
para asegurarse de que en realidad es una clave y no un mensaje de error antes de proceder a ejecutar keytool -import ... -file public.crt
Cambié 3 cosas y luego funciona:
- Hay una columna de espacios, los eliminé.
- Cambió el salto de línea de Windows CRLF a Linux LF
- Se eliminó la línea vacía al final.
Pawel Zentala
Tuve que eliminar espacios antes de la nueva línea después -----BEGIN CERTIFICATE-----
.
Creo que ese comando funciona absolutamente bien en Java 1.6 o superior
– Chaitanya Gudala
27/10/2014 a las 15:29