Los archivos JAR, también conocidos como archivos Java, se utilizan para agrupar varios archivos de clase Java y sus datos asociados en un solo archivo. Desempeñan un papel esencial en la distribución de programas Java, permitiendo una distribución y operación sin complicaciones en diversas plataformas. Firmar los archivos JAR para garantizar su validez e integridad es un aspecto importante de la distribución de programas Java. Esto es especialmente crucial para proteger aplicaciones web y garantizar la fiabilidad de bibliotecas de terceros. La herramienta JarSigner es proporcionada por el Kit de Desarrollo de Java (JDK) para este propósito.
JarSigner crea un archivo de firma para el archivo JAR inicial. Este archivo incluye los hashes criptográficos de todo el contenido del archivo JAR. A continuación, la herramienta utiliza un algoritmo de firma digital para generar un segundo archivo de firma (RSA ). Estos dos archivos de firma, junto con los archivos iniciales, se almacenan en el archivo JAR. Durante el proceso de verificación, JarSigner extrae el archivo JAR inicial y sus archivos de firma correspondientes. Posteriormente, se calculan los valores hash del archivo JAR inicial y se comparan con los valores registrados en el archivo de firma. Si los valores hash coinciden, el archivo JAR se considera legítimo y confiable. De lo contrario, se considera inválido y no se puede ejecutar.
La adición de una firma digital facilita la verificación del origen y la identidad de los archivos JAR. Los algoritmos criptográficos desempeñan un papel importante para garantizar una protección robusta mediante la implementación de técnicas matemáticas avanzadas en el proceso de firma. Existen diversos métodos para firmar archivos JAR. A continuación, se ofrece una breve descripción de los distintos enfoques.
Firmar un archivo JAR con jarsigner, en resumen: puedes seguir
jarsigner -storetype Windows-My -sigalg SHA256withRSA -tsa <timestamp_server> <file.jar> <key_alias>utilizando el KSP de CodeSign Secure como proveedor de almacén de claves, luego verifique conjarsigner -verify <file.jar>La clave privada permanece en el HSM en todo momento; jarsigner nunca manipula el material de clave en bruto.
Puntos Clave
- Incluya siempre -tsa con un servidor de marcas de tiempo; sin él, la firma solo será válida mientras el certificado de firma sea válido, no indefinidamente.
- -storetype Windows-My le indica a jarsigner que utilice el almacén de certificados de Windows (donde el KSP de CodeSign Secure registra las claves) en lugar de un archivo de almacén de claves local; esto es lo que enruta la firma a través del HSM.
Matriz de entorno
| Componente | Requisito |
|---|---|
| jarsigner, incluido con el JDK (carpeta bin, por ejemplo C:\Archivos de programa\Java\jdk-20\bin) | |
| Instalación de Java | Obligatorio; descárguelo desde la página de descargas de JDK de Oracle. |
| Métodos de firma | CodeSign Secure KSP + jarsigner, jarsigner a través de la línea de comandos con la utilidad SignerMain de EC, Eclipse (proyecto Maven) o canalización de Jenkins. |
| Almacenamiento de claves | HSM a través de CodeSign Secure KSP; la clave privada nunca sale del módulo. |
| Algoritmos hash compatibles | SHA-256, SHA-384, SHA-512 (SHA-256 se muestra en los ejemplos) |
| Timestamp | Servidor de marcas de tiempo RFC 3161, especificado mediante -tsa |
Firmar archivos JAR con la herramienta JarSigner
Esta sección detalla cómo firmar archivos JAR con la herramienta JarSigner. Es necesario tener Java instalado para su funcionamiento. Descargue e instale Java desde https://www.oracle.com/java/technologies/downloads . Existen diferentes maneras de usar JarSigner: con CodeSign Secure KSP , mediante la línea de comandos , a través del IDE Eclipse o mediante una canalización de Jenkins.
Con CodeSign Secure KSP
- Navegue hasta la instalación del JDK de Java y acceda a la carpeta bin (generalmente ubicada en C:\Archivos de programa\Java\jdk-20\bin). Allí encontrará la aplicación JarSigner, “jarsigner.exe”.
- Puede arrastrar la aplicación a la línea de comando para obtener su ruta o simplemente navegar a esa carpeta usando cmd.
- En cmd, primero especificaremos el tipo de tienda mediante "-storetype Windows-My". Aquí es donde entra en juego nuestro KSP.
- Especifique el algoritmo de firma con: sigalg SHA256 con RSAPuede utilizar el algoritmo de firma que elija.
- Especificar servidor de marca de tiempo: –tsahttp://timestamp.digicert.com
- Especifique el archivo Jar que desea firmar.
- Especifique el alias de clave del certificado.
En resumen, el comando se parece al siguiente. Debe ejecutarse desde el directorio donde se encuentra la aplicación JarSigner.
jarsigner -storetype Windows-My -sigalg SHA256withRSA -tsa http://timestamp.digicert.com C:\Users\ja785\Desktop\test.jar “evcodesigning”

Podemos ejecutar el verificador Jar Signer para comprobar si los archivos Jar han sido firmados o no.
Se realiza en el mismo directorio que el del firmante y con el siguiente comando.
jarsigner -verificar

Con símbolo del sistema
A continuación se muestra una lista de los parámetros de comando disponibles y una breve explicación de sus funciones.
| -s o –signo | Archivo jar a firmar. |
| -v o –verificar | Archivo jar a verificar. |
| -c o –cert-path | Ruta del archivo del certificado. |
| -u o –usuario | Nombre de usuario. Un nombre de usuario en el servidor de Encryption Consulting. |
| -k o –tecla | Clave para firma/verificación proporcionada por el servidor de Encryption Consulting. |
| -a o –algoritmo | Algoritmo para la firma/verificación. Se debe utilizar una de las siguientes opciones: SHA-256 SHA-384 SHA-512 |
| -o o –salida | Archivo de salida a la ruta como el archivo firmado. |
| -h o –ayuda | Ayuda |
| -versión | Mostrar número de versión |
| -verboso | Mostrar registros de depuración |
Para firmar un archivo jar usando JarSigner, primero abra un símbolo del sistema de administrador e ingrese este comando:
cd C:\Users\Administrator\Desktop\JarSigner-main (1)\JarSigner-main\JarSignerAgent\target
El comando para firmar es el siguiente, recuerda el contenido en son entradas de ejemplo, deberá especificar los nombres de archivos y rutas específicos:
java -classpath .;jarsigner-jar-with-dependencies.jar;”C:\Archivos de programa\Java\jdk1.8.0_202\lib\tools.jar” com.security.SignerMain -s “
El resultado esperado es el siguiente:

Para verificar un archivo jar usando JarSigner, ingrese este comando:
java -classpath .;jarsigner-jar-with-dependencies.jar;”C:\Archivos de programa\Java\jdk1.8.0_202\lib\tools.jar” com.security.SignerMain -v “
El resultado esperado es el siguiente:

Con Eclipse (Proyecto Maven)
Para firmar un archivo jar usando el IDE Eclipse, primero necesitarías instalar Eclipse.
- Cuando aparezca el asistente de instalación, seleccione Eclipse IDE para desarrolladores Java y haga clic en instalar.

- Asegúrese de que el archivo CodeSignerAgent.zip esté descomprimido. Luego, en la interfaz de Eclipse, haga clic en "Importar" en la esquina superior izquierda de la ventana.

- Luego seleccione Importar proyectos Maven existentes.

- Luego seleccione el directorio CodeSignerAgent en el navegador como se muestra a continuación:

- Cree una biblioteca JDK haciendo clic en la biblioteca del proyecto. Seleccione JDK 1.8 como ruta de la biblioteca. Instale JDK 1.8 si no está disponible.
Referencia: https://www.oracle.com/in/java/technologies/javase/javase8-archive-downloads.html


- Añade esta biblioteca JDK a la biblioteca del proyecto. Elimina la biblioteca JRE.

- Luego abra el archivo pom.xml del proyecto y cambie la ruta JDK 1.8 según su máquina.

- Luego haga clic derecho en el proyecto y seleccione Ejecutar como: Instalación de Maven

- La compilación exitosa se mostrará a continuación y, en la carpeta de destino del proyecto, se creará JarSigner.jar.


Oleoducto Jenkins
Usar JarSigner en una pipeline puede ser útil para probar posibles actualizaciones y nuevas compilaciones. El proyecto JarSigner está preconfigurado en el panel de Jenkins.
Para iniciar sesión, abra un navegador web (preferiblemente Google Chrome) y escriba http://localhost:8080/ para acceder al panel de control de Jenkins.

Aquí podrás ver todas las builds y algo de información general sobre ellas.
En el panel de Jenkins, siga los pasos a continuación:
- Desde el Panel de Control, haga clic en Nuevo Elemento.

- Ingrese cualquier nombre de elemento y haga clic en Proyecto Freestyle y haga clic en Aceptar.

- En la página de configuración, en General, coloque una descripción como desee.

Aquí es donde se ejecuta el código de JarSigner; al agregar un paso de compilación que ejecuta un comando por lotes de Windows, podemos llamar al código de JarSigner y ejecutarlo a través de la canalización de Jenkins.

Guarda los cambios haciendo clic en Guardar en la parte inferior.
Una vez guardado, haz clic en «Compilar ahora» y verás el número de compilación en pantalla. Para obtener más información sobre los pasos de compilación y la configuración general, haz clic en «Configurar» junto al botón «Compilar ahora».

En la parte inferior izquierda de la lista de botones, haga clic en la flecha hacia arriba de «Historial de compilación» para ver las compilaciones más recientes del proyecto. Seleccione la más reciente y verá la página de información de compilación. Para ver el resultado de la compilación, haga clic en el botón «Salida de consola» en la parte izquierda de la pantalla.

También puede ver la salida de la consola en formato de texto plano haciendo clic en " Ver como texto plano" debajo del botón " Salida de la consola" . Como se muestra a continuación, esta compilación ejecuta JarSigner.

Preguntas frecuentes
¿Qué hace exactamente el parámetro -storetype Windows-My?
Esto le indica a jarsigner que busque la clave de firma en el almacén de certificados de Windows en lugar de en un archivo de almacén de claves local. De esta manera, la operación de firma se enruta a través del KSP de CodeSign Secure, que registra las claves allí mientras mantiene la clave privada en el HSM.
¿Qué sucede si firmo un archivo JAR sin especificar -tsa?
La firma solo es válida mientras el certificado de firma esté vigente. Una vez que el certificado caduca, la firma del archivo JAR también se considera caducada, incluso si el archivo nunca se modificó. Para evitar esto, especifique siempre un servidor de marcas de tiempo.
Conclusión
En conclusión, comprender los conceptos de la firma de archivos JAR y el uso de la herramienta "jar signer" es esencial tanto para desarrolladores como para usuarios de Java. Al aprovechar esta funcionalidad, se puede mejorar la seguridad y la fiabilidad de las aplicaciones, protegiéndolas contra posibles manipulaciones y garantizando la fiabilidad de las bibliotecas de terceros. Dado que la seguridad de las aplicaciones web sigue siendo una prioridad, familiarizarse con el proceso de firma de archivos JAR resultará fundamental para mantenerse a la vanguardia en este panorama en rápida evolución.
En Encryption Consulting comprende la necesidad de firmar archivos y aplicaciones en esta era digital. Nuestra plataforma de firma de código, CodeSign Secure , demuestra nuestro compromiso con la seguridad. Ofrecemos generación de firmas con módulos de seguridad de hardware , junto con hash del lado del cliente y análisis de virus. Estamos comprometidos con su seguridad y estamos aquí para brindarle la información y las herramientas que necesita para proteger lo que más le importa. Visite www.encryptionconsulting.com para obtener más información sobre cualquiera de nuestros productos o para solicitar una demostración de CodeSign Secure.
