opcion - keystore java ejemplo
¿Cómo importar correctamente un certificado autofirmado en el almacén de claves de Java que está disponible para todas las aplicaciones Java de forma predeterminada? (7)
Sí quiero importar un certificado autofirmado a Java para que cualquier aplicación Java que intente establecer una conexión SSL confíe en este certificado.
Hasta ahora, logré importarlo en
keytool -import -trustcacerts -noprompt -storepass changeit -alias $REMHOST -file $REMHOST.pem
keytool -import -trustcacerts -noprompt -keystore cacerts -storepass changeit -alias $REMHOST -file $REMHOST.pem
Aún así, cuando intento ejecutar HTTPSClient.class
sigo teniendo:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
El comando simple ''keytool'' también funciona en Windows y / o con Cygwin.
Si estás usando Cygwin aquí está el comando modificado que usé desde la parte inferior de la respuesta de "S.Botha":
- asegúrese de identificar el JRE dentro del JDK que va a utilizar
- Inicie su prompt / cygwin como administrador
- ir dentro del directorio bin de ese JDK, por ejemplo, cd / cygdrive / c / Program / Files / Java / jdk1.8.0_121 / jre / bin
Ejecute el comando keytool desde adentro, donde usted proporciona la ruta a su nuevo certificado al final, como sigue:
./keytool.exe -import -trustcacerts -keystore ../lib/security/cacerts -storepass changeit -noprompt -alias myownaliasformysystem -file "D:/Stuff/saved-certs/ca.cert"
Aviso, porque si esto está bajo Cygwin está dando una ruta a un programa que no es Cygwin, entonces la ruta es similar a DOS y entre comillas.
Esto funcionó para mí. :)
sudo keytool -importcert -file filename.cer -alias randomaliasname -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
Si está utilizando un certificado firmado por una Autoridad de certificación que no está incluido en el archivo de cacerts de Java de forma predeterminada, debe completar la siguiente configuración para las conexiones HTTPS. Para importar certificados en cacerts:
- Abra Windows Explorer y navegue hasta el archivo cacerts, que se encuentra en la subcarpeta jre / lib / security donde AX Core Client está instalado. La ubicación predeterminada es C: / Archivos de programa / ACL Software / AX Core Client / jre / lib / security
- Cree una copia de seguridad del archivo antes de realizar cambios.
- Dependiendo de los certificados que reciba de la autoridad de certificación que esté utilizando, es posible que necesite importar un certificado intermedio y / o certificado raíz en el archivo cacerts. Use la siguiente sintaxis para importar certificados: keytool -import -alias -keystore -trustcacerts -file
- Si está importando ambos certificados, el alias especificado para cada certificado debe ser único.
- Escriba la contraseña para el almacén de claves en el mensaje "Contraseña" y presione Entrar. La contraseña de Java predeterminada para el archivo cacerts es "changeit". Escriba ''y'' en el mensaje "¿Confiar en este certificado?" Y presione Entrar.
Tal vez quieras probar
keytool -import -trustcacerts -noprompt -keystore <full path to cacerts> -storepass changeit -alias $REMHOST -file $REMHOST.pem
Honestamente, no tengo ni idea de dónde pone tu certificado si solo escribes cacerts
simplemente dale una ruta completa
Terminé escribiendo un pequeño script que agrega los certificados a los almacenes de claves, por lo que es mucho más fácil de usar.
Puede obtener la última versión de https://github.com/ssbarnea/keytool-trust
#!/bin/bash
# version 1.0
# https://github.com/ssbarnea/keytool-trust
REMHOST=$1
REMPORT=${2:-443}
KEYSTORE_PASS=changeit
KEYTOOL="sudo keytool"
# /etc/java-6-sun/security/cacerts
for CACERTS in /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts /
/usr/lib/jvm/java-7-oracle/jre/lib/security/cacerts /
"/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security/cacerts" /
"/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/MacOS/itms/java/lib/security/cacerts"
do
if [ -e "$CACERTS" ]
then
echo --- Adding certs to $CACERTS
# FYI: the default keystore is located in ~/.keystore
if [ -z "$REMHOST" ]
then
echo "ERROR: Please specify the server name to import the certificatin from, eventually followed by the port number, if other than 443."
exit 1
fi
set -e
rm -f $REMHOST:$REMPORT.pem
if openssl s_client -connect $REMHOST:$REMPORT 1>/tmp/keytool_stdout 2>/tmp/output </dev/null
then
:
else
cat /tmp/keytool_stdout
cat /tmp/output
exit 1
fi
if sed -ne ''/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'' </tmp/keytool_stdout > /tmp/$REMHOST:$REMPORT.pem
then
:
else
echo "ERROR: Unable to extract the certificate from $REMHOST:$REMPORT ($?)"
cat /tmp/output
fi
if $KEYTOOL -list -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT >/dev/null
then
echo "Key of $REMHOST already found, skipping it."
else
$KEYTOOL -import -trustcacerts -noprompt -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -file /tmp/$REMHOST:$REMPORT.pem
fi
if $KEYTOOL -list -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -keystore "$CACERTS" >/dev/null
then
echo "Key of $REMHOST already found in cacerts, skipping it."
else
$KEYTOOL -import -trustcacerts -noprompt -keystore "$CACERTS" -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -file /tmp/$REMHOST:$REMPORT.pem
fi
fi
done
`` `
En Windows, la forma más fácil es usar el portecle programa.
- Descargue e instale portecle.
- Primero asegúrate al 100% de que sabes qué JRE o JDK se está utilizando para ejecutar tu programa. En un Windows 7 de 64 bits podría haber bastantes JRE. Process Explorer puede ayudarlo con esto o puede usar:
System.out.println(System.getProperty("java.home"));
- Copie el archivo JAVA_HOME / lib / security / cacerts en otra carpeta.
- En Portecle, haga clic en Archivo> Abrir archivo de almacén de claves
- Seleccione el archivo cacerts
- Ingrese esta contraseña: cambiar
- Haz clic en Herramientas> Importar certificado de confianza
- Busque el archivo mycertificate.pem
- Haga clic en importar
- Haga clic en Aceptar para la advertencia sobre la ruta de confianza.
- Haga clic en Aceptar cuando muestre los detalles sobre el certificado.
- Haga clic en Sí para aceptar el certificado como confiable.
- Cuando solicita un alias, haga clic en Aceptar y vuelva a hacer clic en Aceptar cuando indique que ha importado el certificado.
- Clic en Guardar. No lo olvides o el cambio se descarta.
- Copia los cacerts de archivos donde los encontraste.
En Linux:
Puede descargar el certificado SSL de un servidor web que ya lo está usando así:
$ echo -n | openssl s_client -connect www.example.com:443 | /
sed -ne ''/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'' > /tmp/examplecert.crt
Opcionalmente verifique la información del certificado:
$ openssl x509 -in /tmp/examplecert.crt -text
Importe el certificado en el almacén de claves de cacerts de Java:
$ keytool -import -trustcacerts -keystore /opt/java/jre/lib/security/cacerts /
-storepass changeit -noprompt -alias mycert -file /tmp/examplecert.crt
Editar:
En estos días, no siempre tenemos que agregar un certificado al almacén de claves porque puede obtener un certificado por $ 5 por año en ssls.com . Por si acaso esa es una opción para ti.
D:/Java/jdk1.5.0_10/bin/keytool -import -file "D:/Certificates/SDS services/Dev/dev-sdsservices-was8.infavig.com.cer" -keystore "D:/Java/jdk1.5.0_10/jre/lib/security/cacerts" -alias "sds certificate"