Firmando archivos JAR desde NetBeans

Archivo Jar firmado
Nada mas disculpe mi certificado de prueba 😛

El desarrollo de software empresarial trae consigo consideraciones que usualmente no se mencionan cuando esta haciendo un proyecto por su cuenta, uno de ellos es tener una forma de verificar que los ejecutables no hallan sido modificados por terceros y la plataforma Java le proporciona todas las herramientas para aplicar firmas con certificados digitales a sus archivos JAR.

Archivo JKS

Los certificados de seguridad para Java suelen almacenarse en archivos Java Key Storage o JKS, para poder firmar su archivo JAR va a necesitar uno de estos, la forma de generarlo para que contenga su certificado varia según su proveedor por lo que necesitara verificar como generarlo.

En todo caso al generar el archivo deberá tendrá la siguiente información ya sea por que su proveedor se la proporcionó o por que la ingreso al generar el JKS

  • El archivo JKS ya sea el archivo o el URL donde esté.
  • La contraseña del archivo JKS, referida como storepass.
  • El alias que identifica el certificado dentro del JKS.
  • La contraseña de acceso a ese certificado, referida como keypass.

Tenga a la mano esta información pues se requerirá mas adelanta.

Configurando el PATH en Windows

Para poder firmar nuestros archivos Jar desde NetBeans debemos asegurarnos que la herramienta jarsigner este disponible desde cualquier parte del sistema.

Para hacer esto localice la ubicación del ejecutable jarsigner, este estará en la carpeta bin de su instalación de Java, ya que halla localizado jarsigner copie la ruta completa de la carpeta donde esta ese ejecutable.

Vaya a las propiedades del sistema y presione el botón “Variables de Entorno”

Variables de Entorno
Variables de Entorno

Ahí seleccione la variable PATH y presione Editar

Variable PATH
Variable PATH

Y agregue la ruta a la carpeta donde este jarsigner, hecho esto reinicie NetBeans para que detecte los cambios.

Proceso de firmado

Para agregar la firma digital al flujo de trabajo de NetBeans necesitamos modificar el archivo build.xml, este archivo nos permite agregar operaciones y comandos cuando se construye nuestro proyecto y esta ubicado en la carpeta raíz del proyecto.

Ubicación de build.xml
Ubicación de build.xml

Justo antes de la etiqueta </project> al final del archivo agregue lo siguiente:

<target name="-post-jar" depends="signjar"> 
</target> 

<target name="signjar" depends="">
     <echo message="Signing ${dist.dir}/NOMBRE_ARCHIVO_JAR ..."/>
     <exec dir="${work.dir}" executable="jarsigner">
         <arg value="-verbose" />
         <arg value="-keystore" />
         <arg value="ARCHIVO_JKS" />
         <arg value="-storepass" />
         <arg value="CONTRASEÑA_ARCHIVO_JKS" />
         <arg value="-keypass" />
         <arg value="CONTRASEÑA_VERTIFICADO" />
         <arg value="${dist.dir}/NOMBRE_ARCHIVO_JAR" />
         <arg value="ALIAS_CERTIFICADO" />
     </exec>
 </target>

Aquí lo que estamos haciendo es indicarle a NetBeans que despues de generar el archivo Jar deseamos se ejecute el objetivo signjar, el cual llamara al comando jarsigner con los argumentos adecuados para firmar el archivo jar, los datos que debe de ingresar aparecen con mayúsculas en el ejemplo y significan lo siguiente.

  • NOMBRE_ARCHIVO_JAR – El nombre del archivo jar que genera su proyecto, la ruta y nombre de este lo puede consultar en las propiedades de su proyecto “Build”->”packaging”
  • ARCHIVO_JKS – La ruta a su archivo JKS
  • CONTRASEÑA_ARCHIVO_JSK – La clave para acceder al archivo JKS
  • CONTRASEÑA_CERTIFICADO – la clave para acceder a los datos del certificado dentro del JKS
  • ALIAS_CERTIFICADO – El nombre del certificado del archivo JKS que desea usar.

Ya que halla actualizado su archivo build.xml use el comando para limpiar y recompilar el proyecto (El icono del martillo con la escoba) para que se genere de nuevo su archivo jar y se aplique la firma digital, la salida del proceso de compilación se vera como la siguiente figura.

Archivo firmado
Archivo firmado

Proceso de Firmado en Maven

En el caso de que este usando Maven para manejar su proyecto también es perfectamente posible automatizar la firma digital del jar resultante, para esto sencillamente abra el archivo pom.xml de su proyecto.

Archivo pom.xml
Archivo pom.xml

Este es el archivo que controla como se construye un proyecto en Maven y como en el caso de build.xml basta con agregar un elemento mas para hacer que efectúe la firma, en este caso debe agregar un elemento <plugin> al pom.xml

Este elemento <plugin> se ubica dentro del elemento <plugins> que a su vez se localiza dentro del elemento <build> es muy común que su pom.xml no tenga esos elementos y si es ese caso nada mas agréguelos también como se ve en el ejemplo a continuación.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>mx.com.pydee</groupId>
    <artifactId>MavenFirma</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
    
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-jarsigner-plugin</artifactId>
                <version>1.4</version>
                <executions>
                    <execution>
                        <id>sign</id>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <keystore>myKeystore.jks</keystore>
                    <alias>myself</alias>
                    <storepass>123456789</storepass>
                    <keypass>123456789</keypass>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
</project>

Aquí hay cuatro elementos que debe llenar para poder aplicar la firma que son:

  • ARCHIVO_JKS – La ruta al archivo .jks que contiene su certificado
  • ALIAS_DEL_CERTIFICADO – El nombre que identifica su certificado dentro del .jsk
  • CLAVE_JKS – La clave de acceso a su achivo .jks
  • CLAVE_CERTIFICADO – La clave de acceso a los datos del certificado dentro del .jks

Y del mismo modo con usar el botón Limpiar y construir se generara el jar con la firma digital.

Creando Jar firmado desde Maven
Creando Jar firmado desde Maven

Verificando firma

Y si verifica su archivo jar con el comando jarsigner -verify

Archivo jar firmado
Archivo jar firmado

Puede ver que el jar aparece como verificado, indicando que el archivo esta firmado digitalmente, en caso de que no fuera asi el comando le habría regresado el mensaje “jar is unsigned. (signatures missing or not parsable)”.

(Nada mas disculpe los mensajes de advertencia, el certificado que tengo a la mano no es uno hecho para fines profesionales)

Espero que esta entrada les fuera de utilidad, nos vemos en la próxima y si desea cooperar con la causa.

Enlace a Ko-fi

2 comentarios sobre “Firmando archivos JAR desde NetBeans

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s