En la empresa para la que trabajo, uno de módulos del ERP que desarrollamos, genera archivos en txt para dar altas y bajas del personal de campo y una de las preguntas más comunes de los encargados de esta actividad es: "¿Por qué no puedo acceder al IDSE utilizando Chrome o Firefox?
Introducción
Dos de los navegadores más utilizados en la actualidad son Google Chrome y Mozilla Firefox, por lo que es habitual que se intente acceder al IDSE utilizando uno de estos.
Solución
Respuesta corta:
- Los desarrolladores del IDSE no han actualizado el código para cumplir con los nuevos (desde el 2002) lineamientos de seguridad.
Respuesta larga:
- Vamos a revisar el código para encontrar el problema.
Dentro de la pagina del IDSE, al dar click en el botón "iniciar sesión", manda a llamar la función de javascript "Sing()", la cual en su sexta línea de código contiene:
var pkcs12 = document.firmaForm.certificado.value;
Esto quiere decir que la variable "pkcs12" contiene el nombre del certificado que seleccionamos en el input "certificado digital".
Hacemos un paréntesis en este punto, para recordar que unos de los pasos para acceder a IDSE con Internet Explorer es habilitar la opción "Incluir el directorio local cuando se suban archivo al servidor". Esto hace que la ruta de nuestro archivo se muestre como (igual que el valor de la variable "pckcs12"):
- Internet Explorer - "C:\Usuarios\UsuarioA\Desktop\certificadoIMSS.pfx"
Por cuestiones de seguridad Chrome/Firefox no incluyen la ruta completa (me parece bastante razonable), dándole a la variable "pckcs12" el valor de:
- Firefox - "certificadoIMSS.pfx"
- Chrome - "C:\fakepath\certificadoIMSS.pfx"
Teniendo en cuenta esto, si tratamos de iniciar sesión nos mostrará el error:
- "El archivo no existe o se modificó la ruta del archivo. Por favor verifique y actualice la información".
Continuamos con nuestro análisis hasta llegar a la línea 371 de uno de los applets, la cual dice:
FileInputStream localFileInputStream = new FileInputStream(paramFile);
Esta línea trata de obtener los bytes del certificado (paramFile=pckcs12) y debido a que Chrome/Firefox no incluyen la ruta absoluta, devuelve el error antes mencionado (no encuentra el archivo en la computadora del cliente).
Soluciones
Algunas de las soluciones son:
1.- Que los desarrolladores actualicen el código / La mejor opción
* La mejor pero menos probable (por los cambios que implica) es que se actualice la forma en que se realiza el "login" en el sistema IDSE, el sistema debe subir el certificado al servidor o crear un nuevo applet para "login" y así poder seleccionar al archivo desde java (no por javascript).
2.- Instalar el complemento IETab.net en Chrome / Probable
* Este complemento es un emulador de Internet Explorer, que tiene habilitada por default la opción para incluir la ruta absoluta de los archivos.
3.- Seguir utilizando Internet Explorer / No recomendable
* Con todos los problemas de seguridad no es recomendable seguir utilizando este navegador.
4.- Crear el directorio C:\fakepath / Chistoso - No recomendable
* Creando el directorio mencionado y agregando a esa ruta el certificado, Chrome pasará la ruta absoluta utilizando el "fakepath" por lo que el applet encontrará el archivo.