TL;DR — Kurzzusammenfassung
Lösung für den Fehler java.security.AccessControlException: access denied im IDSE des IMSS. Bearbeiten Sie java.policy zur Zertifikatserneuerung.
Nota: Este artículo fue publicado originalmente en 2019. Algunos pasos o versiones de software pueden haber cambiado. Verifica la documentación actual de IMSS para la información más reciente.
Ahorita nos tocó nuevamente renovar el certificado del IDSE del IMSS. Como siempre, es un proceso que resulta engorroso, complicado, y depende de JAVA y políticas de baja seguridad para que funcione. Sigo sin entender porque el IMSS decidió irse por estos caminos tan poco usuales. No más de una vez me he metido al sitio y ni siquiera el certificado web está actualizado (just ahorita si te metes ya expiró). Pero bueno, regresando al tema: Hubieron dos problemas con los que nos topamos esta vez. El primero es que dice que para bajar tu certificado te va a llegar una liga por correo: MENTIRA. Ningún correo nos llegó, pero si puedes darle click en continuar y en la siguiente página puedes bajarlo sin mayor problema. Eso sí, si hablas a soporte técnico te mandan a las oficinas del IMSS con tu USB y archivos a que ellos te den el certificado… que burocracia más engorrosa.
El segundo problema que tuvimos es que para terminar de obtener nuestro certificado teníamos que permitir que leyera el sistema nuestra carta y firmarla… sin embargo el sistema no dejaba de mandar errores indicando “access denied, read”. Esto me llevó a sospechar que por alguna razón o política de seguridad los archivos no podían ser leídos. Volví a ejecutar el java policy que te pide el IMSS y nada. Finalmente encontramos una manera de hacerlo funcionar. Cabe mencionar, esta forma tiene riesgos de seguridad y si la van a usar es bajo su propio riesgo y sugiero hagan el cambio y reviertan a la configuración default cuando terminen de renovar su certificado, no usar ningún otro sitio web o aplicación en el momento, particularmente si usan java.
Solución
Leyendo el mensaje que más o menos va así: “java.security.AccessControlException access denied” y más adelante te indica que el error es de tipo “read” (osea, lectura). Usando esta información lo que nos dice es que Java no tiene permiso de leer los archivos que le estamos dando (y porque no tuvo problemas con la carta anterior es un misterio). Entonces, prosigamos:
Para corregir esta situación de falta de permisos de lectura, es necesario localizar el o los archivos llamados java.policy que se encuentran el carpeta de instalación de cada versión de Java (si sabes cual usa el IDSE, solo hay que cambiar esa… si no vas a tener que cambiar todas). Estos archivos se encuentran en el subdirectorio de cada instalación de java bajo \lib\security por ejemplo: C:\Program Files (x86)\Java\jre1.8.0_191\lib\security u otro ejemplo C:\Archivos de programa\Java\jre6\lib\security (la parte jre6 es la que cambia de acuerdo a la versión como pueden observar entre los dos ejemplos). Una vez localizados los archivos se tienen que editar, abran el bloc de notas (probablemente necesiten abrirlo como administrador para poder guardar los cambios) y prosigan a agregar insertar la siguiente línea justo en la línea antes del último corchete ( } ) :
permission java.io.FilePermission ”<>”, “read”;
NOTA: Esta solución permite a todos los programas de Java leer cualquier archivo en la máquina por lo que puede tener riesgos en la seguridad del equipo. Tan pronto terminen de renovar el certificado del IMSS se sugiere comenten o remuevan esta línea por seguridad.
Investigando más… es posible utilizar una ruta en vez de <> para todas las rutas. Mi sugerencia, es crear un folder donde por el momento pueda uno poner temporalmente ahí los archivos ya que cualquier aplicación java tendrá acceso de lectura a esa carpeta a partir de este cambio:
permission java.io.FilePermission “C:/Imss/Temp/-”, “read”;
Y listo! Ya con eso nos funcionó y pudimos terminar de renovar nuestro certificado digital del IMSS y utilizar nuevamente la plataforma del IDSE para nuestras altas, bajas y modificaciones obrero patronales.
Kompatible Browser
Viele Benutzer, die den Fehler AccessControlException erhalten, haben auch Kompatibilitätsprobleme mit modernen Browsern, da Java-Applets in den meisten Browsern eingestellt wurden. Beachten Sie Folgendes:
- Internet Explorer 11 ist der einzige Browser, der noch Java-Plugins unterstützt. Stellen Sie sicher, dass Sie die 32-Bit-Version von IE verwenden (
C:\Program Files (x86)\Internet Explorer\iexplore.exe), da die 64-Bit-Version die Applets nicht korrekt lädt. - Chrome, Firefox und Edge haben die Unterstützung für NPAPI/Java-Plugins seit 2015-2017 entfernt. Sie funktionieren nicht für den Signaturprozess des IDSE, der Java erfordert.
- Alternative ohne Java: Das IMSS hat einen Virtuellen Desktop eingerichtet, der unter
idse.imss.gob.mxerreichbar ist und IDSE-Vorgänge ohne Java oder einen bestimmten Browser ermöglicht. Wenn Ihr digitales Zertifikat gültig ist, vermeidet diese Option die Java-Kompatibilitätsprobleme vollständig.
Zusammenfassung
- Der Fehler
java.security.AccessControlException access denied readbei der Erneuerung des IDSE-Zertifikats des IMSS entsteht, weil Java das Lesen lokaler Dateien durch Sicherheitsrichtlinien blockiert. - Der “Access denied Error 15” auf
serviciosdigitales.imss.gob.mxhat dieselbe Ursache: Die JVM kann die Zertifikatsdatei auf dem lokalen Datenträger nicht lesen. - Die Lösung besteht darin, die Datei
java.policyim Verzeichnislib/securityder vom IDSE verwendeten Java-Version zu bearbeiten und die Zeilepermission java.io.FilePermission "<>", "read";vor der letzten schließenden Klammer einzufügen. - Für mehr Sicherheit verwenden Sie einen spezifischen Pfad (
"C:/Imss/Temp/-") anstelle von<>(alle Pfade), um den Lesezugriff auf das Zertifikatsverzeichnis zu beschränken. - Der Fehler
0x8009030dweist darauf hin, dass das Zertifikat im Systemspeicher nicht verfügbar ist; überprüfen Sie den Import der.cer-Datei in Windows zusätzlich zu den Java-Berechtigungen. - Machen Sie die Änderung in
java.policysofort nach Abschluss der Erneuerung rückgängig, um die Standardsicherheit wiederherzustellen.