java - para - Verificar y firmar un jar programáticamente
jarsigner download (1)
Soy nuevo en este tema, por lo tanto, espero utilizar el vocabulario correcto. ¿Es posible obtener la posibilidad de Jarsigner dentro de Java?
Necesito la posibilidad de hacer las siguientes cosas programáticamente:
- verificar si un contenedor está firmado con una determinada clave privada de un almacén de claves
- si se verifica el jar: suelte el frasco
- Firme el contenedor con otra clave privada de una autoridad certificadora oficial, que se encuentra en el mismo o en otro almacén de claves.
En pseudo-código me imagino algo como esto:
JarVerifier verifier = new JarVerifier(/*all needed parameters like the location of the keystore*/);
verifier.verify(jarFile); //returns a value which indicates the result (an Enum or an integer value)
Firmar el jar debería funcionar de manera similar:
JarSigner signer = new JarSigner(/*all needed parameters like the location of the keystore, passwords, alias*/);
signer.sign(jarFile);
Sé que este es un duplicado de muchas otras preguntas, pero no estoy contento con sus respuestas. La solución de estas respuestas es, en la mayoría de los casos, una clase auto escrita, una modificación de una clase encontrada en OpenJDK o una sugerencia de que el código aún debe escribirse y cómo se puede hacer. Esto no es aceptable para mí, porque no se mantienen (o tengo que escribir y mantener las clases yo mismo), no sé nada sobre su corrección (especialmente si tengo que escribir el código) y los problemas de licencia.
Lo que no entiendo es que parece que Oracle no ofrece ninguna solución fácil, especialmente porque es un tema tan crítico, donde un error puede llevar a un sistema inseguro.
Intento responder la pregunta yo mismo.
Verificando
Para verificar el Jar no parece haber una buena solución lista para usar. Por lo tanto, se debe escribir el código propio.
Firma
Está Ant Task SignJar, que puede firmar jars y es posible usar Ant Tasks dentro de Java
La clase para firmar los frascos puede verse así:
public class JarSigner extends SignJar {
public JarSigner() {
project = new Project();
project.init();
taskType = "signJar";
taskName = "signJar";
target = new Target();
}
public static void signJar(File jarToSign, String alias, String keypass, String keystore, String storepass) {
JarSigner signer = new JarSigner();
signer.setJar(jarToSign);
signer.setAlias(alias);
signer.setKeypass(keypass);
signer.setKeystore(keystore);
signer.setStorepass(storepass);
signer.setSignedjar(jarToSign);
signer.execute();
}
}
sin firmar
No lo necesitaba todavía