Importar certificados en Java
Cuando desarrollamos una aplicación en Java que va ha hacer uso de un recurso seguro (mediante un certificado), debemos asegurarnos que este certificado podrá ser validado por una entidad certificadora que reconozca Java. Debido a que Java es un lenguaje multi-plataforma, no utiliza la información de certificados alojada en el Sistema Operativo.Por defecto, la máquina virtual de Java dispone de las Entidades Certificadoras (CA) más comunes, como Verisign o Thawte. Sin embargo, suele darse el caso, sobretodo en entornos de desarrollo, que necesitemos utilizar una Entidad Certificadora "de prueba". En este caso, debemos importar esta CA en el almacén de claves de la máquina virtual que estemos utilizando.
Importar Certificado en el almacén de certificados (keystore)
La máquina virtual de Java (JVM) cuenta con un almacén de claves (keystore) que incorpora las entidades más habituales y la posibilidad de agregar aquellas que nos sean necesarias. El keystore se encuentra en la ruta: JVM_PATH\lib\security\cacerts. Por ejemplo:
C:\Archivos de programa\Java\jre1.6.0_05\lib\security\cacerts
C:\Archivos de programa\Java\jdk1.5.0_15\jre\lib\security
Para añadir una nueva entidad certificadora a la JVM que estemos utilizando, debemos utilizar el comando keytool (JVM_PATH\bin\keytool):
keytool -import -keystore "C:\Archivos de
programa\Java\jre1.6.0_05\lib\security\cacerts" -file
c:\NuevaEntidadCertificadora.cer -alias CA_SwitchOffAndLetsGo -storepass
changeit
Puede observarse que el almacén de certificados contiene la contraseña por defecto 'changeit'. El nombre que especifiquemos en el alias, debe ser único en el keystore y servirá de referencia futura en el almacén. Podemos listar los certificados instalados utilizando la opción list del keytool:
keytool -list -keystore "C:\Archivos de
programa\Java\jre1.6.0_05\lib\security\cacerts" -storepass changeit
Importar Certificado utilizando el panel de control de Java (Windows)
Atención: con esta opción únicamente se añadirán los certificados a la instalación activa de la JVM en Windows.
Para añadir la nueva entidad, se accederá al Panel de Control de Windows, y se seleccionará la opción "Java". Seguidamente se marcará la pestaña "Seguridad" y se pulsará sobre el botón "Certificados".
En el apartado de Certificados, se seleccionará la opción "Importar" y se localizará el archivo que contiene el certificado (si el certificado tiene extensión .cer se tendrá que seleccionar la opción 'Todos los archivos'). El nuevo certificado aparecerá en la pestaña "Usuario".
8 comentarios:
Excelente explicación, muchas gracias.
Funciona correctamente usando servlets SSL en Oracle e-Business Suite
Ejemplo:
keytool -import -trustcacerts -alias cer01 -file /opt/oracle/viscomn/util/java/1.4/j2sdk1.4.2_04/jre/lib/security/ cer01.crt -keystore /opt/oracle/viscomn/util/java/1.4/j2sdk1.4.2_04/jre/lib/security/cacerts -keypass changeit -storepass changeit
tag: Certificate Authority (CA)
Bien gracias... esta publicación funciona en verdad.... me ha ayudado bastante logré solucionar un error de certificados digitales de linkedin en java.....
el error que tenía era
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested
Lucho, estoy teniendo el mismo problema que vos, queriendo ejecutar un jar para un entorno win.
Salvando las distancias, recordás que hiciste para corregir el problema?
Probé todo lo que dice aquí y otros links pero sin exito.... Te agradezco lo que puedas aportar.
Saludos,
Buenas, estoy teniendo el mismo inconveniente probe con las dos opciones mencionadas aquí y además en otras páginas sin poder solucionar el inconveniente, siempre término dando con otro error, encontraste la solución juan?
La solucion que encontré fue la siguiente...
Al comienzo debes definir estas tres lineas:
java String keystore = "C:\\Program Files\\Java\\jdk1.6.0_25\\lib\\security\\cacerts"; <<< La doble contra barra, JAVA la interpreta como simple
java System.setProperty("javax.net.ssl.trustStore",keystore); <<< Integro el keystore definido.
java System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); <<< Indico la contraseña del keystore definido. En JAVA la clave por defecto de los keystore es "changeit"
Muchas gracias juan, un problema menos
Muchas gracias. Mi problema era al utilizar un repositorio de Maven ubicado remotamente. Me ayudado a comprender mucho este tema. Saludos,
Publicar un comentario