You are on page 1of 6

4/5/2019 Firmar JARs Java Web Sart – Jaehoo Weblog

Jaehoo Weblog

Blog personal de jaehoo

Firmar JARs Java Web Sart

abril 1, 2009octubre 18, 2012

(h p://picasaweb.google.com/lh/photo/oTISGlZHOGNdb5H16l6dkA?feat=embedwebsite)
Últimamente he investigado sobre applets, swing y JNLP y ha resultado un tema muy interesante, ya
que abarca conceptos de seguridad, diseño, arquitectura de cliente servidor, etc…

Como dato cultural: Java Web Start es un mecanismo desarrollado por SUN para ejecutar aplicaciones
de contenido rico (swing y applets) a través del navegador web, esto se realiza por medio del JNLP que
es un protocolo de comunicación que permite lanzar nuestras applicaciones desde un lugar remoto,
anteriormente esto se podia manejar mediante applets pero.. por razones de seguridad se les negaba
acceso a los recursos de la maquina, como carpetas de sistema, archivos, etc… ya que alguién puede
manipularlo de forma incorrecta y robar información de los que ejecuten el código.

Sobre todo en la seguridad, encontre este enlace donde explican màs a detalle cuales son las restricciones
de las aplicaciones (swing/applets):

h p://www.chuidiang.com/chuwiki/index.php?title=Firmar_Applets
(h p://www.chuidiang.com/chuwiki/index.php?title=Firmar_Applets)

Pero bueno al grano, para poder hacer que nuestras aplicaciones ejecuten con toda su funcionalidad y
sin restricciones debemos firmarlas, y claro!! que el usuario que lo ejecute, acepte esa firma, podemos
hacerlo de la siguiente manera:

1. Generar la llave: Es el identificador que va a validar nuestra aplicación, yo encontre estas dos formas
de hacerlo, la primera genera la llave por un tiempo determinado y la segunda la genera con vigencia de
un año, puedes utilizar cualquiera. Abrimos una terminal y escribrimos:

https://jaehoo.wordpress.com/2009/04/01/firmar-jars-java-web-sart/ 1/6
4/5/2019 Firmar JARs Java Web Sart – Jaehoo Weblog

#Comando para generar la llave con vigencia de un año


keytool -genkey -alias NOMBRE_LLAVE -validity 360 -v

#Genera la llave "MyKey" con la vigencia por un año (es el valor por defecto) y det
keytool -genkey -alias MyKey -keyalg rssa

Nota: Para comprobar que el certificado se ha generado correctamente se puede comprobar con el
siguiente comando, que listará todos los certificados que tenemos en nuestro keystore:

#Listar certificados en resumen


keytool --list#Listar certificados a detalle
keytool –list -v
2. Exportar el certificado (OPCIONAL): Esto es se utiliza cuando tienes que proporcionar el certificado
de seguridad , establece un contrato, un contrato con el navegador para asegurar el contenido que se
esta descargando proviene de una fuente segura, si quieres que tu aplicación sea validada tienes que
darle una copia del certificado al usuario que lo va a utilizar.

keytool -export -alias Mykey -file MyCert.crt


3. Comprimir tu applicación (OPCIONAL): Esto es para crear el archivo jar solamente si tienes tus
classes en carpetas, pero como hoy todo mundo utiliza algún IDE no creo que sea necesario que hagas
esto, solo busca donde se genero tu archivo y te pasas al siguiente punto para firmarlo

jar cvf file.jar main/


4. Firmar el jar: Aqui esta lo chido!!, en una terminal buscas tu jar y lo firmas con la llave que generaste:

jarsigner file.jar Mykey


5. Verificar la firma: Solo es para ver si realmente ya esta firmada nuestra aplicación.

jarsigner -verify -verbose -certs file.jar


Con esto nuestras applicaciones ya tienen permisos hasta para crear y modificar archivos en el cliente,
claro solo si el usuario acepta ejecutarlos jaja :p.

Si deseas más información YO recomiendo que visites la documentación de java


(h p://java.sun.com/docs/books/tutorial/deployment/webstart/index.html), realmente todo viene muy
bien explicado ahí.

(h p://picasaweb.google.com/lh/photo/tRFiiBne-
jX3DA086liWuw?feat=embedwebsite)

https://jaehoo.wordpress.com/2009/04/01/firmar-jars-java-web-sart/ 2/6
4/5/2019 Firmar JARs Java Web Sart – Jaehoo Weblog

De JavaWebStart (h p://picasaweb.google.com/Jaehoo/JavaWebStart?feat=embedwebsite)
Saludos

Publicado en: Java, Java Web Start

13 comentarios en “Firmar JARs Java Web Sart”


1.
ROBERTO dijo: octubre 8, 2009 a las 11:57 pm EDITAR RESPONDER
Hola amigo necesito que me ayudes tengo un proyecto en java con SWING necesito saber como
deshabilitar el teclado con JAVA en especial la tecla CTRL+C, CTRL+V, tecla espaciadora muchas
gracias por tu ayuda me dejas tu codigo fuente en roberto_8523@hotmail.com..

JAEHOO dijo: octubre 24, 2009 a las 3:18 am EDITAR RESPONDER


Lo siento mucho pero tu comentario me suena a “hazme la chamba y para q no me canse en
buscarlo me lo dejas en el mail” pero como la neta estoy ocupado no pienso hacerlo además mi
amigo en el pedir esta el dar…. hay que aprender a ser mas humildes… lo que si te voy a decir es
que lo que pides es algo muy fácil de hacer.. así q mucha suerte….
2.
JEBO dijo: marzo 29, 2010 a las 7:44 pm EDITAR RESPONDER
Compañero, el articulo me parece muy bueno, pero tengo una pregunta, para utilizar wl java web
start se necesitan firmar algunos jar, pero esto se hace en el servidor web?, pero si no se dispone de
un servicio web, si no de, por ejemplo una carpeta compartida?, como se firmarían estos jar? De
antemano gracias por tu ayuda.

JAEHOO dijo: marzo 30, 2010 a las 5:41 am EDITAR RESPONDER


Hola, la verdad no he entendido muy bien tu pregunta…. y ahora que lo mencionas creo que
debería reescribir el articulo ya que en varios puntos lo dejo todo al aire :p jaja pero bueno… eso
me pasa por querer dejar las cosas lo mas corto posibles….

Asi que veamos… tu tienes una aplicación java (swing o applet), java web start (JNLP) es un
protocolo de comunicación desarrollado por SUN que permite ejecutar estas aplicaciones a través
del navegador web, las aplicaciones swing son muy ricas en contenido y te permiten hacer
muchas cosas desde controlar eventos hasta usar recursos de la maquina, y para evitar que
alguien se aproveche de esta capacidad y la utilicen para robar datos se decidió crear la firma de
seguridad.

Esa firma sirve básicamente para 2 cosas:


1. Crea un mecanismo de validación que te permite saber si una aplicación es segura o no.
(pregunta al usuario si desea ejecutarla)
2. Otorga ciertos permisos a la aplicación para utilizar recursos de la maquina ( escribir archivos,
usar impresoras, etc…)

No es necesario un servicio web, simplemente la firma te ayuda a que tu aplicación pueda


ejecutarse a través del navegador (bajo ciertas condiciones), para firmarlos es muy facil… (ya he
reescrito la entrada, espero sea util n_n )

Saludos
https://jaehoo.wordpress.com/2009/04/01/firmar-jars-java-web-sart/ 3/6
4/5/2019 Firmar JARs Java Web Sart – Jaehoo Weblog

JEBO dijo: marzo 30, 2010 a las 8:40 pm EDITAR


Hola, gracias por tu ayuda, ya se como firmar los archivos JAR, te explico algo: en mi proyecto
tengo 3 JAR:
1: aplicacion.jar
2: libreria1.jar
3: libreria2.jar, esto

Al ejecutar el archivo JNLP, java web start me genera este error: “Falta una entrada firmada en
el recurso: libreria2.jar”, esta librería fue descargada de internet para conexión con BD MySql;
en vista que java web start solicitaba firmas, decidí firmar los JAR.

He podido firmas los 3 archivos sin ningún problema, pero cuando ejecuto el archivo JNLP,
me sale el error: “Se ha usado más de un certificado para firmar el recurso: libreria2.jar”; esta
ya habia sido firmada antes, entonces la pregunta es como puedo eliminar o actualizar la
firma?

He estado buscando la forma de hacerlo, pero hasta ahora no he podido encontrar nada.

JAEHOO dijo: marzo 30, 2010 a las 11:01 pm EDITAR


Ok, pues as mi me paso algo similar pero nunca pude agregar mas de un jar XD jaja, pero
bueno te doy un tip que se me ocurrio y a mi me funciono, descomprime tus otros jar y el de
tu app. en una carpeta y despues los recomprimes todos (fijate en el paso 3), asi con eso creas
un solo jar que contenga todos los archivos .class, despues lo firmas y lo intentas ejecutar.
Espero te sirva Saludos

JEBO dijo: abril 5, 2010 a las 2:58 pm EDITAR


Hola gracias por tu ayuda, ya pude agregar los jar, resulta que era específicamente el jar de
conexión el que estaba fallando, jeje.

Pero ahora tengo otra pregunta, has podido agregar al archivo JNLP un archivo de
propiedades?, es decir, si el jar principal necesita un archivos.properties, como lo cargas en el
archivo JNLP? Según he leído, hay un elemento del archivo JNLP, que se llama Property, pero
este me pide 2 atributos y la verdad es que no se que va en el segundo. he hecho pruebas y
nada que funciona, alguna vez has hacho algo como esto?

JAEHOO dijo: abril 5, 2010 a las 3:53 pm EDITAR


Orale que bien que ya te quedo, como te decia yo nunca pude agregar mas de un jar, aunq
encontre muchos ejemplos en internet de como hacerlo a mi simplemente no me funcionaba
ninguno, haber si un dia me pasas tu ejemplo, pero bueno por lo que me preguntas a mi se me
ocurre unicamente cargar tu properties agregandolo al class path (dentro de tu jar) aunq esto
podria resultar riesgoso ya que si alguien descarga tu jar obtendria los paramertos de conexion
a la base (si es que te quieres conectar a una).

Pero si, debe de haber forma de cargar el properties, hace mucho tuve que meterme de manera
ilegal a volarme una app asi jaja XD y de ahi aprendi varios truquillos de su jnlp :

El JNLP se puede ejecutar de dos formas:

A traves de una pagina web


Directamente desde escritorio (descargando el jnlp)
Por lo que yo vi puedes pasar 2 cosas:
https://jaehoo.wordpress.com/2009/04/01/firmar-jars-java-web-sart/ 4/6
4/5/2019 Firmar JARs Java Web Sart – Jaehoo Weblog

1. Argumentos: Te ayuda a pasar datos de la pagina web al jnlp, dentro de tu pagina tag del
jnlp declaras algo asi:
>param name='MiParametro' value='valor'>
y despues lo puedes recuperar en el codigo java asi :
getParameter("location")

nota: inverti las llaves porque no salen los tags.


2. Recursos: jars y propiedades, en tu jnlp declaras el tag y dentro colocas algo asi:
>resourcesproperty name=’apple.laf.useScreenMenuBar’ value=’true’/property
name=’apple.awt.window.position.forceSafeProgrammaticPositioning’ value=’false’/jar
href=’eLiveFull.jar’ main=’true’/jar href=’eLive.jar’// resources<
Yo me imagino que aqui podrias intentar meter el properties, pero el chiste seria probar.

Actualmente yo llevo una aplicación que se ejecuta a traves de JNLP, pero para resguardar esa
informacion tuve que separarla en dos partes, una que es la presentacion que se encarga de
ingresar/ mostrar los datos (el archivo jar, que lo unico que trae son pantallas, no hay logica de
negocio en el), y otra app en el servidor que se encarga de atender peticiones, procesar los
datos, y devolver una respuesta. asi no hay riesgo si alguien se vuela mi jar lo unico que
obtiene son pantallas sin datos que pongan en riesgo la información de mi app.

Espero ayude, saludos


3.
ALEJANDRO RAMÍREZ dijo: noviembre 26, 2010 a las 6:22 am EDITAR RESPONDER
Hola primero felicitarte por tu pagina esta mamalona jeje oye una consulta resulta que tengo una
aplicación que hice con el IDE Netbeans y tiene una conexión con una base de datos en MySQL
bueno genere el jar y el jnlp muy bonito, cuando me dispuse a ejecutar el archivo, sorpresa no
funcionaba ¬¬ busque y me encontré con tu articulo y dije a huevo, solo hay que fírmalo y lo hice
paso por paso como lo indicas y toda la cosa y para mi fortuna funciono, me pregunto si daba
permiso para establecer conexión con localhost y ya no, sin embargo solo jalo el primer jFrame que el
de login ahí le estuve moviendo y nada. será que le tengo que mandar algún parámetro para la
conexión con la base de datos en el jnlp?? me podrías ayudar jeje de cualquier forma gracias.

Nota: asi tengo el jnlp

ExamenesPHI
Alejandro

ExamenesPHI
ExamenesPHI
4.
ALEJANDRO RAMÍREZ dijo: noviembre 26, 2010 a las 6:53 am EDITAR RESPONDER
nota: hice lo q tu para que salga la info

>?xml version=”1.0″ encoding=”UTF-8″ standalone=”no”?>


>jnlp codebase=”” href=”launch.jnlp” spec=”1.0+”>
>information>
>title>ExamenesPHI
>vendor>Alejandro

https://jaehoo.wordpress.com/2009/04/01/firmar-jars-java-web-sart/ 5/6
4/5/2019 Firmar JARs Java Web Sart – Jaehoo Weblog

>homepage href=””/>
>description>ExamenesPHI
>description kind=”short”>ExamenesPHI

>/information>

>resources>
>j2se version=”1.5+”/>
>jar eager=”true” href=”ExamenesPHI.jar” main=”true”/>

>jar href=”lib/mysql-connector-java-5.1.6-bin.jar”/>
>jar href=”lib/substance.jar”/>
>jar href=”lib/substance.jar”/>
>/resources>
>application-desc main-class=”Pantallas.Login”>

>/application-desc>
>/jnlp>
5.
ALEJANDRO RAMÍREZ dijo: noviembre 26, 2010 a las 7:18 am EDITAR RESPONDER
que crees karnal ya no resolví solamente tenia que firmar el conector de Mysql jeje, tu pagina me a
sido de mucha ayuda sigue asi XD
6.
RICHARD dijo: febrero 4, 2011 a las 11:41 pm EDITAR RESPONDER
Te felicito, has hecho una publicación excelente. Mis respetos..!
7.
JT MARTIN dijo: agosto 7, 2012 a las 11:38 am EDITAR RESPONDER
buen dia yo tengo una bronca, hice una pagina web con eclipse usando jsps y me pidieron que con
un jnlp permita acceder a twi er tengo 4 archivos jar, pero no se como funciona esto, es la primera
ves que escucho el concepto de jnlp, además de que casi no se java soy novato, alguien podría
explicarme paso a paso? gracias

This site uses Akismet to reduce spam. Learn how your comment data is processed.

CREA UN BLOG O UN SITIO WEB GRATUITOS CON WORDPRESS.COM.

https://jaehoo.wordpress.com/2009/04/01/firmar-jars-java-web-sart/ 6/6

You might also like