Cómo y por qué firmar los Applets (Java)

javaloading

¿Qué es un applet?

Un applet es una aplicación java enfocada a correr principalmente en un navegador web, según la Wikipedia, un Java applet es un código JAVA que carece de un método main, por eso se utiliza principalmente para el trabajo de páginas web, ya que es un pequeño programa que es utilizado en una página HTML y representado por una pequeña pantalla gráfica dentro de ésta.

Un applet por defecto tiene permisos un tanto más restrictivos que una aplicación normal, la razón de esto es para evitar que un usuario malintencionado escriba applets con código malicioso (alguno que borre el disco duro sin autorización del usuario por ejemplo), los publique en internet y posteriormente cualquier persona que ejecute dicho applet se vea afectada.

En algunas ocasiones es necesario que un applet acceda a ciertos recursos del locales con el fin de realizar su función cabalmente, solo que debido a las restricciones anteriormente mencionadas, no va a ser posible a menos que sea firmado digitalmente.

 

¿Qué sucede si ejecuto un applet no firmado en el navegador?

Si tratamos de ejecutar en el navegador un applet que accese a los recursos locales y que no esté firmado no se podrá ejecutar, en la consola de la JVM aparecerá un mensaje de error parecido al siguiente:

java.security.AccessControlException: access denied

 

¿Qué se necesita para firmar el applet y poderlo ejecutar?

Para firmar digitalmente un applet es necesario de un certificado (un archivo que contenga la firma), afortunadamente, el mismo jdk nos provee de las herramientas necesarias para crearlo y posteriormente aplicarlo a nuestro archivo .jar.

Dentro de la carpeta bin que posee el jdk (en Windows se encuentra normalmente en  C:\Archivos de programa\jdkx.xx.xx) existen un par de aplicaciones que nos servirán, dichas aplicaciones son las siguientes:

  • keytool: para generar los certificados
  • jarsigner: para firmar los archivos .jar

 

¿Cómo genero un certificado?

Para generar un certificado que posteriormente te servirá para firmar los applets solo basta ejecutar el siguiente comando desde la línea de comandos (en Windows puedes abrir la línea de comandos desde Inicio > Ejecutar > escribes cmd y presionas Enter):

keytool –genkey –alias Monillo –validity 365 –v

 

Donde:

  • Monillo es el alias que voy a utilizar (debes sustituirlo por el que tú deseas).
  • 365 son los días de validez del certificado.

Después de ejecutar el comando se te harán algunas preguntas (como se muestra en la imagen siguiente), debes contestarlas a tu preferencia (como te venga en gana pues).

image

Ya tengo mi certificado ahora, ¿cómo lo utilizo para firmar los applets?

Una vez que tienes tu certificado basta con ejecutar el siguiente comando para firmarlo:

jarsigner.exe AppletFirmado.jar Monillo –verbose

 

Después de esto te pedirá escribir la contraseña que definiste anteriormente, si es correcta el applet quedará firmado y listo para ejecutarse en el navegador.

Es importante que tomes en cuenta que si utilizas varios archivos jar en tu aplicación es necesario que todos estén firmados ya que de lo contrario seguirás sin poder ejecutarla.

Cuando ejecutes tu aplicación te aparecerá un mensaje parecido al siguiente:

image

Una vez que des clic en Ejecutar podrás trabajar con ella sin problemas.

 

Eso es todo. Alguna duda o algo qué decir? Deja tu comentario. Saludox.

46 comentarios:

  1. Anónimo dijo...:

    Como puedo hacer si quiero publicar el Applet en la web que todos puedan usarlo, osea que cuando el usuario entre a la pagina del applet le pregunte si quiere instalar el certificado y trabaje perfectamente con este,
    saludos

  1. Monillo007 dijo...:

    Qué tal,

    Te comento que es exactamente el mismo procedimiento.

    Saludox.

  1. Matías dijo...:

    excelente información
    gracias =)

  1. Adry dijo...:

    Gracias por esta informacion, justamente estoy trabajando con el comando save() y saveToWeb en processing y en el applet no funciona. Solo una pregunta, estuve chequeando la carpeta Bin y no veo el jarsinger, puede ser que este oculto??.

    Saludos y gracias.
    Adry

  1. Monillo007 dijo...:

    Normalmente no viene oculto pero puedes revisarlo, en caso de que no lo encuentres te recomiendo descargar nuevamente el jdk.

    Saludox

  1. Adry dijo...:

    Hola Monillo

    Muchas gracias por tu ayuda, te cuento que estuve averiguando y al parecer a partir de nuevas versiones sacaron el jarsigner, hay que tratar de conseguir el kit jdk-6u16-windows-i586.exe que pesa unos 70 MB, lo aclaro porque vi algunos de 16 que los reinstale y ninguno tiene el jarsigner, a mi me lo esta pasando un amigo, no lo encontre en la red, voy a probar de instalarlo y ver que pasa, y si funciona vere donde lo puedo subir y paso el link. Saludos y muchas gracias.

    Adry

  1. Anónimo dijo...:

    Hola Montillo excelente informacion amigo me ha servido mucho pero aun estoy barado en alg me gustaria saber los siguientes paso luego de generar el certificado es decir al momento de usar el jarsigner

  1. Anónimo dijo...:

    Montillo disculpa mi ignorancia ya vi el paso para agregarle la firma a mi jar ahora pregunto tengo que trasladar mi jar hasta la carpeta bin firmarlo y luego volverlo a copiar en donde estaba mi proyecto esta en netbeans y mi ruta esta en la carpeta netbans de mi equipo

  1. hola, mira que estoy intentando firmar un applet y me sale este error:
    cuando aplico la primer linea que tu hiciste me sale este error

    error de keytool: java.lang.RuntimeException: Error de uso, ûgenkey no es un comando legal

    me puedes decir a que se debe?

  1. Monillo007 dijo...:

    Se debe a que el comando que ejecutaste seguramente fue pegado del portapapeles del sistema operativo, te recomiendo escribir el comando manualmente (sin pegar).

    Saludos.

  1. felipetamayo dijo...:

    hola estoy tratando de firmar mi applet y lo he intentado haciendo los pasos q describes en esta pagina, pero no he conseguido ver mi applet en internet ademas de esto he realizado los pasos descritos en esta pagina.

    http://new.taringa.net/posts/info/5002004/Firmar-Applets-de-Java_.html

    no se q puede ser: el error q aparece es:

    java.security.AccessControlException: access denied (java.io.FilePermission nombredemiarchivo read)

  1. felipetamayo dijo...:

    se me olvidaba estoy trabajando bajo netbeans, debo hacer algo adicional por utilizar este ide? , de verdad estoy muy embalado y no se que hacer ya, espero me puedas ayudar

    no se si lo del otro link deba realizarse sin embargo
    deacuardo al otro link yo llene el codebase asi:
    file:/C:/home/felipe/NetBeansProjects/applet_informator
    quisas este comentiendo un error en esta linea?


    gracias

  1. felipetamayo dijo...:

    hola he descubierto esto:

    jarsigner -verify hmm.jar

    con esto verifico si mi applet esta bien firmado.
    me aparece esto:

    “jar verify”
    lo q muestra q si esta bien firmado sin embargo el problema persiste que puede ser???

    ayudaaaa!!!

  1. fede dijo...:

    Hola,
    he creado mi primer applet de java pero no se bien porke no puedo visualizarlo en FireFox, pero si en IE6, ¿alguien tiene idea de pk no puedo ejecutarlo en FireFox? FireFox no es el navegador por defecto, es IE ¿puede ser debido a esto?

    Gracias:D

  1. Anónimo dijo...:

    Hola Yo se que este tema es viejo pero necesito una idea. He desarrollado un applet que habre un jdialog y de este un jfilechooser. Lo hace todo pero cuando trato de abrir el jfilechooser me da el siguente error(navegador firefox). Lo firmo per nada, ademas nunca me sale el cartel de la figura Advertencia - Seguridad



    Exception occurred during event dispatching:
    java.security.AccessControlException: access denied (java.io.FilePermission C:\Users\nemesis\Documents read)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkRead(Unknown Source)
    at java.io.File.exists(Unknown Source)
    at java.io.Win32FileSystem.canonicalize(Unknown Source)
    at java.io.File.getCanonicalPath(Unknown Source)
    at sun.awt.shell.Win32ShellFolderManager2.createShellFolder(Unknown Source)
    at sun.awt.shell.Win32ShellFolderManager2.getPersonal(Unknown Source)
    at sun.awt.shell.Win32ShellFolderManager2.get(Unknown Source)
    at sun.awt.shell.ShellFolder.get(Unknown Source)
    at javax.swing.filechooser.FileSystemView.getDefaultDirectory(Unknown Source)
    at javax.swing.JFileChooser.setCurrentDirectory(Unknown Source)
    at javax.swing.JFileChooser.(Unknown Source)
    at javax.swing.JFileChooser.(Unknown Source)

    Pro favor respondanme, gracias

  1. Monillo007 dijo...:

    Qué tal!

    Te comento que si no estás viendo el mensaje de Advertencia lo más seguro es que no se esté realizando la firma de manera correcta, revisa el procedimiento nuevamente y verifica que al momento de firmar el .jar incremente de tamaño, esta es la manera más fácil notarlo.

    De igual manera te recomiendo borrar los archivos temporales e intentarlo nuevamente.

    Me cuentas cómo te fue, saludox.

  1. Gustavo Salgado dijo...:

    hola! , Muy buena guía para firmar Applets ; tengo una pequeña duda ; realice todo el procedimiento y el applet tiene permisos pero cuando se va a desplegar me dice Editor : DESCONOCIDO ; revisando la imagen del post (http://goo.gl/3pGbE) aparece el nombre Correcto del Autor. Me podrían echar una mano con ese detalle. gracias de antemano.

  1. Monillo007 dijo...:

    Qué tal Gustavo,

    Si puedes por favor incluye el mensaje que te aparece en la consola al ejecutar el applet.

    Saludox.

  1. Gustavo Salgado dijo...:

    Hola! Monillo007, cuando ejecuto el Applet no aparece ningún mensaje en Consola, ninguna excepción ni nada; dentro de lo que busque veo que utilizan algo como un .cer que "certifica" que si es el autor; pero la verdad no entiendo muy bien esa parte. Saludos y gracias :)

  1. Monillo007 dijo...:

    Igual te recomiendo entonces reinstalar el JDK y repetir el proceso de firmado, puede ser que la versión que tienes tenga algún conflicto. Inténtalo y me comentas qué pasó...

    Saludox.

  1. Anónimo dijo...:

    amigo mi nombre es Fernando Silva, muy bueno tu tutorial, tengo una pregunta, el applet que firme necesita conectarse a MYSQL, pero veo que no tengo la coneccion, creo que el problema esta en que el conector o driver de MYSQL no esta instalado, como lo puedo instalar en el applet firmado, desde Netbeans no tengo problema si se conecta, pero desde algun navegador no se conecta a la base despues de firmarlo

    mi mail es ferchochu@hotmail.com

    Ayudame con esto por favor, es muy importante, y estare toda la vida agradeciendo

    Gracias

  1. Luis Navarro dijo...:

    Qué tal Fernando,

    Para empezar el driver MySQL debe estar firmado también y, debido a que lo ejecutas del navegador, deberás colocarlo dentro del JRE y no dentro del JDK, la ruta exacta sería algo así Ruta del Java/jreX.XX.XX/lib/ext
    donde jreX.XX.XX es la versión más reciente del JRE instalado.

    Espero haberte ayudado. Saludox.

  1. Anónimo dijo...:

    otra vez son Fernando Silva,

    ya realice lo que indicas pero no me funciono, me da el siguiente error, tienes otra idea????

    select * from profesional where NOMBRE_APELLIDOS='dfsd' and CLAVE=sdf
    Exception in thread "AWT-EventQueue-2" java.lang.NullPointerException
    at capa_logica.Metodos.Seleccionar(Metodos.java:30)
    at htp.inicio.jButton1ActionPerformed(inicio.java:123)
    at htp.inicio.access$100(inicio.java:12)
    at htp.inicio$2.actionPerformed(inicio.java:54)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

  1. Luis Navarro dijo...:

    Acorde al error aparentemente estás utilizando un objeto antes de inicializarlo, esto en la línea 30 de la clase Metodos, verifica que tu conexión a la bd se esté realizando correctamente antes de utilizarla ya que ahí es donde puede estar el problema.

    Igual noto que en CLAVE=sdf no encierras la cadena sdf con los apostrofes correspondientes por lo que puede ser que el ResultSet igual sea nulo.

    Checalo y me dices. Saludox.

  1. Anónimo dijo...:

    Ya funciono amigo, Muchas gracias, tengo otra pregunta, perdon que te moleste, sabes como llamar desde un applet firmado corriendo el navegador a otro applet con otra pantalla??, necesito abrir otro applet y debe ser abierto desde el applet que esta corriendo desde el navegador

    Mil gracias

  1. Luis Navarro dijo...:

    Qué tal,

    Para lo que comentas está el response.sendRedirect("URL_destino") desde el applet.

    Saludox.

  1. Anónimo dijo...:

    Amigo,

    cuando pongo el metodo que me indicas me indica que no lo encuentra, los estoy poniendo en el boton de un applet y quiero llamar a otro applet

    response.sendRedirect

    Lo coloco en el Boton del aplet?? o donde lo coloco??

    Gracias

  1. Anónimo dijo...:

    excelente.:!:!:! de gran ayuda !!

  1. Anónimo dijo...:

    no me funciona para mi archivo.jcw
    esk yo hago en Jcreator
    pero igual no me sale
    como porfavor

  1. Anónimo dijo...:

    Excelente aporte gracias.
    Una pregunta, tengo varios archivos jar firmados pero quiero quitarles la firma como puedo hacer??

  1. Luis Navarro dijo...:

    Qué tal,

    Para quitar la firma a un jar es un poco más 'primitivo' ya que debes extraer todo el contenido del archivo .jar (con una herramienta como Winrar), posteriormente ir a la carpeta META-INF y eliminar los archivos que comiencen con el nombre del certificado, usualmente son los de extensión .SF y .DSA.

    Una vez hecho esto podrás volver a empaquetar la carpeta a un archivo .jar y listo! la firma se elimina.

    Igual voy a detallar un poco más en un artículo en estos días, mantente al tanto.

    Saludos.

  1. Anónimo dijo...:

    Gracias por la respuesta, intentare realizarlo con la explicación dada, mientras estaré al tanto del artículo.

    Saludos

  1. Belen Zapata dijo...:

    como firmar los archivos .rar que no se encuentran en la bin
    en mi applet utilizo una librería externa y no se como firmarla

  1. Luis Navarro dijo...:

    Qué tal Belen,

    Puedes agregar la carpeta bin al PATH del sistema operativo para que puedas firmarla sin problemas, o algo más sencillo sería copiar el .jar a la carpeta bin, firmarlo y posteriormente volverlo a copiar a la carpeta origen.

    Espero haberte ayudado. Saludos.

  1. Anónimo dijo...:

    muchas gracias!! de gran utilidad

  1. Anónimo dijo...:

    hola tengo una duda, es posible firmar un applet que tenga jars adjuntos, por ejemplo un applet que se conecta a una bd necesita el jar driver jdbc?

  1. Luis Navarro dijo...:

    Qué tal,

    Para los jar's que tengan acceso al sistema de archivos o a un recurso local igualmente debes aplicar la firma con el mismo procedimiento.

    Saludos.

  1. JULIAN71 dijo...:

    Buen dia compañero, como realizo el procedimiento desde java 7, ahi no esta el comando

  1. Anónimo dijo...:

    Felicidades Luis N.... excelente ayuda.

  1. Anónimo dijo...:

    :y: Excelente blog amigo.

  1. Adrián dijo...:

    Hola Monillo

    Excelente blog y de mucha ayuda. Todo funcionó perfectamente solo que ahora mi jefe quiere que el sistema pase a ambiente productivo y que no aparezca el mensaje de que la firma digital no se puede verificar. Que debo hacer?

    Saludos

  1. Luis Navarro dijo...:

    Qué tal Adrián,

    Es necesario adquirir un certificado digital con alguna de las instituciones dedicadas a ello para posteriormente utilizarlo al firmar los applets y que el navegador la marque como segura.

    Espero haberte ayudado. Saludos.

  1. Adrián dijo...:

    Muchas gracias Luis Navarro

  1. Mil gracias me ha sido de utilidad !

  1. Anónimo dijo...:

    Estimado he realizado los pasos pero no he podido visualizar mi applet desde el explorador.
    Solo lo puedo ver con el AppletViewer de java

  1. Anónimo dijo...:

    Hola que tal a todos, en base al tema sobre firmar applets, con la nueva actualización del JDK (8u20) existe una forma de configurar Java para poder ejecutarlas sin necesidad de firmarlas...

    Les comparto lo que encontre, apoyemos dando me gusta al video almenos a mi me funcionó...

    http://www.youtube.com/watch?v=3gvxXuaWSWs

Publicar un comentario

Este es un espacio abierto, puedes escribir lo que gustes respetando los siguientes puntos:

1.- Lo que escribas esté relacionado con el post, si gustas contactarme puedes hacerlo aqui.

2.- Todo es cuestionable, aunque ten en cuenta que existen formas de hacerlo, evita las agresiones y revisa tu lenguaje antes de publicar un comentario.

3.- Siempre hay tres verdades: tu verdad, mi verdad y la verdad, por lo que opiniones diferentes no necesariamente son equivocadas.

4.- Los comentarios son una forma de discusión abierta, por lo que al publicar uno, implícitamente entras a una discusión, con todo lo que esto representa.

5. Me reservo el derecho de eliminar comentarios que no respeten las condiciones mencionadas anteriormente.

Toma en cuenta que puedes utilizar emoticones en tu comentario, para ver una lista de los disponibles da clic en este enlace.

 
Monillo007 © 2010 | Designed by Trucks, Manual Bookmarking | Elegant Themes