java - yet - your security settings have blocked a self-signed application from running
Java SecurityException: la informaciĆ³n del firmante no coincide (14)
- Después del signo, accede: dist / lib
- Encuentra extra .jar
- Usando Winrar, extrae para una opción de carpeta (extraer a "nombre de carpeta")
- Acceso: META-INF / MANIFEST.MF
- Borre cada firma así:
Nombre: net / sf / jasperreports / engine / util / xml / JaxenXPathExecuterFactory.c lass SHA-256-Digest: q3B5wW + hLX / + lP2 + L0 / 6wRVXRHq1mISBo1dkixT6Vxc =
- Guarda el archivo
- Zip de nuevo
- Renaime ext. A .jar volver
- Ya
Recompuse mis clases como siempre, y de repente recibí el siguiente mensaje de error. ¿Por qué? ¿Cómo puedo arreglarlo?
java.lang.SecurityException: class "Chinese_English_Dictionary"''s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:776)
Basado en la respuesta de @Mohit Phougat, si está ejecutando un Groovy con anotaciones @Grab, podría intentar volver a ordenar tales anotaciones.
En mi caso, fue un conflicto de nombre de paquete. El proyecto actual y la biblioteca referenciada firmada tenían un paquete en el paquete package.foo.utils
. Simplemente cambié el nombre del paquete propenso a errores del proyecto actual a otra cosa.
En mi caso, había duplicado la versión de JAR de BouncyCastle en mi ruta de biblioteca: S
Esto puede ocurrir con los proxys instrumentados con cglib porque CGLIB usa su propia información de firmante en lugar de la información de firmante de la clase de destino de la aplicación.
Esto sucede cuando las clases que pertenecen al mismo paquete se cargan desde diferentes archivos JAR, y esos archivos JAR tienen firmas firmadas con diferentes certificados; o, tal vez con más frecuencia, al menos uno está firmado y uno o más otros no (que incluye clases cargadas). desde directorios ya que esos AFAIK no se pueden firmar).
Por lo tanto, asegúrese de que todos los JAR (o al menos los que contienen clases de los mismos paquetes) estén firmados con el mismo certificado, o elimine las firmas del manifiesto de archivos JAR con paquetes superpuestos.
Esto también ocurre si incluye dos veces un archivo con nombres diferentes o de ubicaciones diferentes, especialmente si se trata de dos versiones diferentes del mismo archivo.
Podría arreglarlo.
Causa raíz: este es un problema común cuando se utiliza la implementación de Sun JAXB con frascos firmados. Básicamente, la implementación de JAXB trata de evitar la reflexión generando una clase para acceder directamente a las propiedades sin usar la reflexión. Desafortunadamente, genera esta nueva clase en el mismo paquete que la clase a la que se accede y de donde proviene este error.
Resolución: agregue la siguiente propiedad del sistema para deshabilitar las optimizaciones de JAXB que no son compatibles con los archivos jar firmados: -Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize = true
R. Si usa maven, una forma útil de depurar jarrones conflictivos es:
mvn dependency:tree
Por ejemplo, para una excepción:
java.lang.SecurityException: class "javax.servlet.HttpConstraintElement"''s signer information does not match signer information of other classes in the same package
hacemos:
mvn dependency:tree|grep servlet
Su salida:
[INFO] +- javax.servlet:servlet-api:jar:2.5:compile
[INFO] +- javax.servlet:jstl:jar:1.2:compile
[INFO] | +- org.eclipse.jetty.orbit:javax.servlet.jsp:jar:2.2.0.v201112011158:compile
[INFO] | +- org.eclipse.jetty.orbit:javax.servlet.jsp.jstl:jar:1.2.0.v201105211821:compile
[INFO] | +- org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016:compile
[INFO] +- org.eclipse.jetty:jetty-servlet:jar:9.0.0.RC2:compile
muestra el enfrentamiento de servlet-api 2.5 y javax.servlet 3.0.0.x.
B. Otras sugerencias útiles (cómo depurar la excepción de seguridad y cómo excluir a los expertos) están en la pregunta que la información del firmante no concuerda .
Si agregó todos los archivos jar de bouncycastle.org (en mi caso de crypto-159.zip), simplemente elimine los que corresponden a los JDK que no se aplican a usted. Hay redundancias. Probablemente solo necesites los frascos "jdk15on".
Si lo está ejecutando en Eclipse, verifique los archivos de los proyectos agregados a la ruta de compilación; o haga control-shift-T y busque múltiples jar que coincidan con el mismo espacio de nombres. A continuación, elimine los archivos redundantes u obsoletos de la ruta de compilación del proyecto.
Tuve una excepción similar:
java.lang.SecurityException: class "org.hamcrest.Matchers"''s signer information does not match signer information of other classes in the same package
El problema principal fue que incluí la biblioteca Hamcrest dos veces. Una vez que usaste el archivo Maven pom. Y también agregué la biblioteca JUnit 4 (que también contiene una biblioteca de Hamcrest) a la ruta de compilación del proyecto. Simplemente tuve que eliminar JUnit de la ruta de compilación y todo estaba bien.
Un hilo un poco viejo, pero como estuve estancado durante bastante tiempo en esto, aquí está la solución (espero que ayude a alguien)
Mi escenario:
El nombre del paquete es: com.abc.def. Hay 2 archivos jar que contienen clases de este paquete, digamos jar1 y jar2, es decir, algunas clases están presentes en jar1 y otras en jar2. Estos archivos jar se firman usando el mismo almacén de claves pero en diferentes momentos de la compilación (es decir, por separado). Eso parece dar como resultado una firma diferente para los archivos en jar1 y jar2.
Puse todos los archivos en jar1 y los construí (y firmé) todos juntos. El problema desaparece
PD: Los nombres de los paquetes y los nombres de los archivos jar son solo ejemplos
Una forma sencilla de solucionarlo es simplemente cambiando el orden de los archivos jar importados que se pueden hacer desde (Eclipse). Haga clic derecho en su paquete -> Ruta de compilación -> Configurar ruta de compilación -> Referencias y bibliotecas -> Ordenar y exportar. Intente cambiar el orden de los frascos que contienen archivos de firma.