Open vjimenez03 opened 2 years ago
Parece que el problema se puede esquivar configurando una de estas politicas: https://chromeenterprise.google/policies/#InsecurePrivateNetworkRequestsAllowed https://chromeenterprise.google/policies/#InsecurePrivateNetworkRequestsAllowedForUrls
Ya, añadiendo InsecurePrivateNetworkRequestsAllowed funciona. Es una solución temporal que puedo aplicar yo o una organización. Pero no puedo pedirle a un usuario de una web del Estado o de un Organismo público que se modifique el registro de seguridad de su sistema operativo (windows, linux, macos, ...) para permitir el acceso a urls no seguras.
Si se tienen configurados los servidores intermedios (por ejemplo para permitir firmas desde Android), se puede forzar a Chrome 98+ y superiores a usar los servidores intermedios , en cuyo caso no se produce este error y permite la firma
MiniApplet.setForceWSMode(true);
o si se usa AutoScript
AutoScript.setForceWSMode(true);
En resumen, Chrome 98 falla en el modo socket, pero si usamos el modo de servidores intermedios funciona
Nota: También afectará a Edge 98 cuando salga
Buenos días,
He comprobado que el nuevo mecanismo de comunicación basado en WebSockets funciona sin necesidad de hacer ningún cambio en la configuración de los equipos ni modificaciones en las aplicaciones. Sólo es necesario que la aplicación utilice el último JavaScript de despliegue (autoscript.js): https://administracionelectronica.gob.es/ctt/clienteafirma/descargas#.YfzSrPmZNPY
Este JavaScript es el antiguo "miniapplet.js" renombrado. Basta que le pongáis el nombre con el que lo tuvieseis integrado en vuestra aplicación y que sustituyáis un fichero por otro.
Buenas tardes,
Sí, hemos comprobado también la solución forzando el mecanismo de comunicación basado en WebSockets con autoscript.js y funciona correctamente con Google Chrome 98 para AutoFirma 1.71 o superior
En MacOs sigue fallando debido a que AutoFirma continua con la versión 1.6.5
Muchas Gracias
Buenas tardes,
Se acaba de publicar AutoFirma 1.7.1 para Linux y macOS. Esta versión ya permitiría a los usuarios utilizar Chrome v98.
La versión de macOS, sin embargo, tiene un problema con la instalación en Monterrey. El sistema no habilita la confianza en el certificado SSL "AutoFirma ROOT" durante la instalación, así que lo tendría que hacer el usuario accediendo al llavero, haciendo doble clic sobre este certificado y cambiando la configuración del campo “Al utilizar este certificado” al valor “Confiar siempre”. Se está trabajando en el instalador para que pueda hacer sólo este proceso. Esperamos que pronto se pueda publicar una nueva versión que ya corrija el problema.
Muchas gracias de nuevo.
Probado en macOS Big Sur y macOS Moterrey. La solución basada en WebSockets y autoscript.js funciona correctamente.
Nota: Edge se acaba de actualizar a la versión 98.
Tener siempre la última versión de Autofirma instalada. Usar Internet Explorer o Firefox en las administraciones que aún no estén adaptadas hasta que se adapten.
Actualizar a la última versión de autoscript
Tener siempre la última versión de Autofirma instalada.
Si intentamos firmar en una administración que aún no se ha adaptado, la solución más simple es usar Internet Explorer hasta que se solucione. Se puede usar Firefox, pero si no lo usamos habitualmente será necesario importar los certificados personales y puede que reinstalar autofirma (Firefox usa un almacén de certificados independiente. Explorer, Chrome y Edge usan el almacén de Windows)
Esta solución desactiva una comprobación de seguridad en Chrome
Aunque la comprobación de seguridad de momento está en pruebas y no está completamente activa, "rompe" Autofirma.
Si aplicamos la solución descrita es muy recomendable que pasado un tiempo la desactivemos.
Hay soluciones más restrictivas y seguras como indicar la lista de sitios con la directiva InsecurePrivateNetworkRequestsAllowedForUrls
, pero dado que la protección aún no es realmente activa aún, y que indicar las urls es mas tedioso, explicaré como configurar la directiva InsecurePrivateNetworkRequestsAllowed
.
Insisto : Solución provisional que desactiva una comprobación de seguridad: hay que deshacerla una vez que las administraciones con las que trabajemos se vayan actualizando
Si queremos usar Chrome, y no nos da miedo enredar en el registro, podemos aplicar la solución provisional propuesta en Junta de Andalucia
Sería copiar este texto, pegarlo en un archivo vacío y llamarlo autofirma_fix_98.reg, y luego ejecutarlo y confirmar que estamos seguros, cerrar el navegador y ya estaría.
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
"InsecurePrivateNetworkRequestsAllowed"=dword:00000001
Como root, crear los directorios de políticas de Chrome
mkdir -p /etc/opt/chrome/policies/managed
mkdir -p /etc/opt/chrome/policies/recommended
y luego crear un fichero /etc/opt/chrome/policies/managed/managed_policies.json
Con el siguiente contenido
{
"InsecurePrivateNetworkRequestsAllowed": true
}
como root crear los directorios de políticas de Chromium
mkdir -p /etc/chromium/policies/managed
mkdir -p /etc/chromium/policies/recommended
y luego crear un fichero /etc/chromium/policies/managed/managed_policies.json
Con el siguiente contenido
{
"InsecurePrivateNetworkRequestsAllowed": true
}
La solución definitiva sería utilizar los últimos scripts de autoscript.
Si tenemos configurados servidores intermedios (necesarios para firmar con dispositivos móviles) una solución rápida para aplicar mientras se planifica con mas tiempo utilizar los últimos scripts de autoscript es forzar el uso de servidores intermedios para Chrome y Edge 98. OJO: tenemos que tener ya configurados correctamente los servidores intermedios para que esto funcione. Si no los tenemos configurados quizás sea más rápido actualizar a la última versión de autoscript
Editamos nuestro MiniApplet.js o Autoscript.js, y buscamos la siguiente linea de código
if (!forceWSMode && !isIOS() && !isAndroid() && !isOldInternetExplorer() && !isEdge() && !isSafari10()){
y modificarla de forma que quede así:
// Detectamos Chrome 98 y superior (vale para todos los derivados: Edge, Chromium, Opera, etc)
var isChrome98= navigator.userAgent.indexOf("Chrome/98") > 0 || navigator.userAgent.indexOf("Chrome/99") > 0 || navigator.userAgent.indexOf("Chrome/1") > 0;
if (!forceWSMode && !isIOS() && !isAndroid() && !isOldInternetExplorer() && !isEdge() && !isSafari10() && !isChrome98){
De tal forma que al final nos queda así. Con lo que forzamos el uso de servidores intermedios para Chrome y Edge 98 y superiores. Es más lento que la comunicación por socket, pero nos vale provisionalmente hasta que actualicemos autoscript
var isChrome98 = navigator.userAgent.indexOf("Chrome/98") > 0 || navigator.userAgent.indexOf("Chrome/99") > 0 || navigator.userAgent.indexOf("Chrome/1") > 0;
if (!forceWSMode && !isIOS() && !isAndroid() && !isOldInternetExplorer() && !isEdge() && !isSafari10() && !isChrome98){
clienteFirma = new AppAfirmaJSSocket(clientAddress, window, undefined);
clienteFirma.setKeyStore(keystore);
clientType = TYPE_JAVASCRIPT_SOCKET;
}
else {
clienteFirma = new AppAfirmaJSWebService(clientAddress, window, undefined);
clienteFirma.setKeyStore(keystore);
clientType = TYPE_JAVASCRIPT_WEB_SERVICE;
}
Buenos días,
hemos visto que se ha publicado en https://firmaelectronica.gob.es/Home/Descargas.html la versión 1.7.2
¿pueden confirmar si esta versión corrige lo indicando en este ticket?
Muchas gracias.
Buenos días,
hemos visto que se ha publicado en https://firmaelectronica.gob.es/Home/Descargas.html la versión 1.7.2
¿pueden confirmar si esta versión corrige lo indicando en este ticket?
Muchas gracias.
Hola
La solución del problema depende de dos partes:
Gracias @albfernandez , en este caso lo consultaba desde el punto de vista de la administración. Pasaré nota a nuestros proveedores para que actualicen el script. Muchas gracias.
En Linux (Fedora 35) no funciona autofirma en Chrome pero sí en Firefox (tanto 1.6.5 como 1.7.1); no sé si el problema es de mi equipo o de la web de mi universidad. Ya he perdido la esperanza de que funcione con el DNIe, tanto en web como en la aplicación.
En Linux (Fedora 35) no funciona autofirma en Chrome pero sí en Firefox (tanto 1.6.5 como 1.7.1); no sé si el problema es de mi equipo o de la web de mi universidad. Ya he perdido la esperanza de que funcione con el DNIe, tanto en web como en la aplicación.
Con certificado software instalado en KDE Neon a mí tampoco me funciona en chrome, ni la 1.6.5 ni la 1.7.1
la versión 1.7.2 no soluciona el error en windows
Hola @albfernandez en tu comentario defines la variable var isCrome98 (sin 'h') y en el if la referencias como isChrome98 (con 'h') Un saludo.
Para ciudadanos, versión breve
Tener siempre la última versión de Autofirma instalada. Usar Internet Explorer en las administraciones que aún no estén adaptadas hasta que se adapten.
Para integradores de la administración, versión breve
Actualizar a la última versión de autoscript
Para ciudadanos, versión larga
Tener siempre la última versión de Autofirma instalada.
Si intentamos firmar en una administración que aún no se ha adaptado, la solución más simple es usar Internet Explorer hasta que se solucione. Se puede usar Firefox, pero si no lo usamos habitualmente será necesario importar los certificados personales y puede que reinstalar autofirma (Firefox usa un almacén de certificados independiente. Explorer, Chrome y Edge usan el almacén de Windows)
Si queremos usar Chrome, y no nos da miedo enredar en el registro, podemos aplicar la solución provisional propuesta en Junta de Andalucia
Ojo! esta opción desactiva una opción de seguridad. De momento está en pruebas y no será efectiva hasta dentro de al menos 3 meses (mayo 2022). Durante ese tiempo es igual de seguro activarla que desactivarla. Es recomendable que pasado ese tiempo borrar la clave.
Sería copiar este texto, pegarlo en un archivo vacío y llamarlo autofirma_fix_98.reg, y luego ejecutarlo y confirmar que estamos seguros, cerrar el navegador y ya estaría.
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome] "InsecurePrivateNetworkRequestsAllowed"=dword:00000001
Para integradores de la administración pública, versión larga
La solución definitiva sería utilizar los últimos scripts de autoscript.
Si tenemos configurados servidores intermedios (necesarios para firmar con dispositivos móviles) una solución rápida para aplicar mientras se planifica con mas tiempo utilizar los últimos scripts de autoscript es forzar el uso de servidores intermedios para Chrome y Edge 98. OJO: tenemos que tener ya configurados correctamente los servidores intermedios para que esto funcione. Si no los tenemos configurados quizás sea más rápido actualizar a la última versión de autoscript
Editamos nuestro MiniApplet.js o Autoscript.js, y buscamos la siguiente linea de código
if (!forceWSMode && !isIOS() && !isAndroid() && !isOldInternetExplorer() && !isEdge() && !isSafari10()){
y modificarla de forma que quede así:
// Detectamos Chrome 98 y superior (vale para todos los derivados: Edge, Chromium, Opera, etc) var isCrome98 = navigator.userAgent.indexOf("Chrome/98") > 0 || navigator.userAgent.indexOf("Chrome/99") > 0 || navigator.userAgent.indexOf("Chrome/1") > 0; if (!forceWSMode && !isIOS() && !isAndroid() && !isOldInternetExplorer() && !isEdge() && !isSafari10() && !isChrome98){
De tal forma que al final nos queda así. Con lo que forzamos el uso de servidores intermedios para Chrome y Edge 98 y superiores. Es más lento que la comunicación por socket, pero nos vale provisionalmente hasta que actualicemos autoscript
var isCrome98 = navigator.userAgent.indexOf("Chrome/98") > 0 || navigator.userAgent.indexOf("Chrome/99") > 0 || navigator.userAgent.indexOf("Chrome/1") > 0; if (!forceWSMode && !isIOS() && !isAndroid() && !isOldInternetExplorer() && !isEdge() && !isSafari10() && !isChrome98){ clienteFirma = new AppAfirmaJSSocket(clientAddress, window, undefined); clienteFirma.setKeyStore(keystore); clientType = TYPE_JAVASCRIPT_SOCKET; } else { clienteFirma = new AppAfirmaJSWebService(clientAddress, window, undefined); clienteFirma.setKeyStore(keystore); clientType = TYPE_JAVASCRIPT_WEB_SERVICE; }
¿Cómo queda la versión larga para ciudadanos con Linux?
Hola @albfernandez en tu comentario defines la variable var isCrome98 (sin 'h') y en el if la referencias como isChrome98 (con 'h') Un saludo.
gracias por el aviso, comentario editado
¿Cómo queda la versión larga para ciudadanos con Linux?
Hola @enriqueartal
Te contesto , he probado como configurar la política en Chrome 98
Como root, creas los directorios de políticas de Chrome
mkdir -p /etc/opt/chrome/policies/managed
mkdir -p /etc/opt/chrome/policies/recommended
y luego crear un fichero /etc/opt/chrome/policies/managed/managed_policies.json
Con el siguiente contenido
{
"InsecurePrivateNetworkRequestsAllowed": true
}
Nota: Simplemente he probado a definir la política y que Chrome la carga, lo puedes ver en chrome://policy
pero no he probado ninguna firma en una administración que falle.
Visita chrome://policy y ahi debería aparecer sin necesidad de reiniciar el navegador
Para chromium el proceso es el mismo pero el fichero tiene que llamarse /etc/chromium/policies/managed/managed_policies.json
¡Muchas gracias! He podido firmar un documento de prueba. ¿Cómo de inseguro es?
¡Muchas gracias! He podido firmar un documento de prueba. ¿Cómo de inseguro es?
@enriqueartal
Básicamente la nueva protección es bloquear o controlar de alguna forma que un javasript alojado en una página de internet pueda hacer peticiones a tu intranet.
Un ejemplo: visitas desde tu casa a una web maliciosa de internet que tiene un javascript que envía peticiones a tu router. Ese tipo de llamadas solo se pueden hacer desde un equipo de la red interna de tu casa, en este caso tu navegador. En este ejemplo de ataque intentarían adivinar las credenciales de tu router para poder controlarlo o infectarlo.
De momento ningún navegador -que yo sepa- te protege, ni si quiera Chrome: La funcionalidad aún está en pruebas pero realmente no hace el bloqueo, al menos en unos 4 meses no lo van a activar del todo. Durante ese tiempo , en cuanto a seguridad , te da igual que configuración de políticas tengas, y pasado ese tiempo espero que todas las administraciones se hayan actualizado para que la puedas eliminar
Al lanzar autofirma "afirma://service?ports=64117&v=1&idsession=deadbeef"
se mostraba este error:
java.lang.IllegalArgumentException: Cannot support TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 with currently installed providers
Tras instalar una versión más reciente de Java (la 17) ha dejado de salir el error, y ya he podido firmar desde el navegador (Firefox en mi caso).
Buenas tardes,
tras actualizar todos los clientes la versión de Chrome a 98.0.4758.82 ha dejado de funcionar la comunicación con Autofirma lanzada mediante custom protocol: afirma://service?ports=53397,57378,62508&v=1&idsession=UJUBCPTNDiOj049I1tcy
El error sólo se produce en esta versión de Chrome, funciona correctamente con las últimas versiones de Edge, Firefox y versiones anteriores de Chrome.