jueves, 18 de junio de 2009

java.security.cert.CertPathValidatorException

Buenas tardes.
Hace un tiempo se me pidió que arreglara un proyecto java que realizaba una conexión a capón por URL, y necesitábamos tener validado un certificado de esa URL.
Cuando ejecuté el proyecto, el output me mostró lo siguiente:

java.security.cert.CertPathValidatorException: basic constraints check failed: pathLenConstraint violated - this cert must be the last cert in the certificacion path.

Esto no quiere decir nada más que falta un certificado web (o más) para una url o un WS al que estamos enlazando desde nuestro proyecto java.

De hecho, a mi me faltaba el certificado propio de la url de la empresa a la que queríamos conectar.

Bien, lo primero que tenemos que hacer en este caso es identificar la url a la que nos estamos intentando conectar desde el proyecto java. Si no la sabemos y, o bien no queremos preguntarla o nadie más lo sabe, os toca buscar por el código.
Una vez la tengamos, la ejecutamos en cualquier navegador de internet.
Tendríamos que entrar correctamente a la web (o lo que quiera que haga esa url).
En la pantalla resultante, hacemos doble clic en la imagen de seguridad que veremos en la parte baja-derecha del navegador de internet.






Guardamos el certificado en nuestro PC.

Ahora tenemos que localizar nuestro almacén de certificados o claves.
El almacén de certificados o claves es un archivo llamado cacerts.
Este archivo se encuentra en varias carpetas, por ejemplo

C:\Archivos de programa\Java\jre1.6.0\jre\Security
o

C:\Java\jdk1.6.0\bin

Encontrarlos todos es tan simple como buscar el archivo llamado “cacerts” en Windows, y quedarse con las rutas de los archivos que coincidan con nuestra versión de Java.

Obviamente, no es lógico actualizar el almacén de certificados para la versión 1.5 cuando nuestro proyecto está corriendo bajo 1.6.

Una vez tengamos todos los archivos “cacerts” de nuestro local que correspondan a la versión de java que estamos utilizando (en este ejemplo, la 1.6.0), elegimos el que más kb ocupe.



En este ejemplo, el “cacerts” que más ocupa es el primero.

Para modificar el archivo “cacerts“, necesitamos el Keytool de java.

Dentro de la carpeta bin, pegamos el certificado que guardamos anteriormente.

Abrimos un prompt de Windows, y nos vamos a la ruta de

C:\Archivos de programa\java\jre6\bin

ya que es ahí donde se encuentra el keytool para modificar el primer “cacerts“

Nótese que tanto la carpeta bin como la lib/security cuelgan de la misma carpeta padre.



Ejecutamos la siguiente línea de código:

keytool –keystore ..\lib\security\cacerts –import –alias network –file nombre-del-certificado.cer –trustcacerts

Keytool te pedirá la contraseña del amacén de claves: changeit

Ejecutamos…y ya tenemos añadido el certificado a nuestro almacén de claves.




Vamos a la carpeta donde tendría que estar nuestro “cacerts“ modificado (en este caso “C:\Archivos de programa\java\jre6\lib\security“), copiamos nuestro nuevo “cacerts“, y lo pegamos en tantas carpetas como “cacerts“ hayamos encontrado en nuestra búsqueda anterior (teniendo en cuenta que sea la versión de java con la que estemos trabajando).

Compilamos, ejecutamos, y nuestra excepción “CertPathValidatorException” habrá desaparecido.




Conversor de colores de RGB a HEX

Buenas tardes.
Hoy en el curro tenía que generar una tabla con valores. Todo era blanco, las letras anaranjadas, y pensé que no quedaría mal poner el fondo de la tabla en gris.
No gustó :(
Se me pidió que el gris fuera más clarito (lo había configurado como silver).
Y descubrí está página

http://www.draac.com/colorconvert.html

Si señor, un conversor cojonudo, tanto de RGB a Hex como al contrario.
Además, el fondo de la web cambia a medida que vas jugueteando con las variables.

miércoles, 17 de junio de 2009

Bienvenidos

Inicio este blog, porque estoy harta de tener un problema en java y no encontrar respuestas.
Entras a foros y el que no dice una gilipollez, quiere que le resuelvas el código, o es demasiado prepotente para contestarte a una "simplez".
Aquí, explicaré paso a paso las soluciones para los problemas en java que me voy encontrando.
Algunos son sencillísimos, con otros me he pasado días, y otras soluciones simplemente son traducciones de otros blogs.
Espero que os ayude.