Ir al contenido principal

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.

Comentarios

  1. 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

    ResponderBorrar
  2. Qué tal,

    Te comento que es exactamente el mismo procedimiento.

    Saludox.

    ResponderBorrar
  3. excelente información
    gracias =)

    ResponderBorrar
  4. 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

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

    Saludox

    ResponderBorrar
  6. 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

    ResponderBorrar
  7. 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

    ResponderBorrar
  8. 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

    ResponderBorrar
  9. 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?

    ResponderBorrar
  10. 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.

    ResponderBorrar
  11. 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)

    ResponderBorrar
  12. 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

    ResponderBorrar
  13. 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!!!

    ResponderBorrar
  14. 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

    ResponderBorrar
  15. 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

    ResponderBorrar
  16. 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.

    ResponderBorrar
  17. 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.

    ResponderBorrar
  18. Qué tal Gustavo,

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

    Saludox.

    ResponderBorrar
  19. 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 :)

    ResponderBorrar
  20. 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.

    ResponderBorrar
  21. 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

    ResponderBorrar
  22. 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.

    ResponderBorrar
  23. 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)

    ResponderBorrar
  24. 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.

    ResponderBorrar
  25. 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

    ResponderBorrar
  26. Qué tal,

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

    Saludox.

    ResponderBorrar
  27. 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

    ResponderBorrar
  28. excelente.:!:!:! de gran ayuda !!

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

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

    ResponderBorrar
  31. 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.

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

    Saludos

    ResponderBorrar
  33. 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

    ResponderBorrar
  34. 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.

    ResponderBorrar
  35. muchas gracias!! de gran utilidad

    ResponderBorrar
  36. 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?

    ResponderBorrar
  37. 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.

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

    ResponderBorrar
  39. Felicidades Luis N.... excelente ayuda.

    ResponderBorrar
  40. :y: Excelente blog amigo.

    ResponderBorrar
  41. 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

    ResponderBorrar
  42. 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.

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

    ResponderBorrar
  44. 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

    ResponderBorrar

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.

Entradas más populares de este blog

3 sencillos pasos para tramitar la ayuda por desempleo de la AFORE

¿Tienes dinero ahorrado en tu AFORE y en este momento no estás trabajando o estás trabajando pero no tienes seguro social? Si respondiste sí a la pregunta anterior entonces hay una buena noticia para ti: puedes retirar una parte del dinero que tienes ahorrado. Y lo mejor, es muy sencillo. En este artículo te diré paso a paso qué hacer para obtener ese dinero, sin tecnicismos legales ni nada por el estilo, simple y sencillamente lo que necesitas saber. Paso Número 1: Obtener los últimos 2 estados de cuenta de tu Afore Esto en la mayoría de los casos es sumamente sencillo ya que dichos estados de cuenta llegan directamente al domicilio del ahorrador, si este es tu caso puedes saltar lo restante en este punto y continuar con el paso número 2, en caso contrario sigue leyendo… Si no tienes tus estados de cuenta debes ponerte en contacto con la empresa encargada de administrar tu ahorro para que te los proporcione, normalmente te van a pedir una identificación oficial, comprobante de

Conectar una base de datos en MySQL con NetBeans

NetBeans es una plataforma para el desarrollo de aplicaciones de escritorio usando Java y a un Entorno integrado de desarrollo (IDE) desarrollado usando la Plataforma NetBeans. Si eres un programador y desarrollas tus aplicaciones en Java seguramente necesitarás conectar una base de datos tipo MySQL a este entorno algún día, bueno, si lo necesitas ahora, he aquí una explicación paso a paso de cómo conectar ambas herramientas.

4 extraordinarias aplicaciones espía para Android

Le andas haciendo al James Bond y necesitas grabar video, voz o tomar fotos desde tu dispositivo Android sin ser notado? Aquí 4 excelentes aplicaciones que facilitarán tus hazañas de 007 en menos de lo que canta un gallo.

c606 c6nf5g4r6 e3 tec3ad6 [Como configurar el teclado]

¿Problemas al escribir con el teclado? ¿Tratas de escribir la letra ‘o’ y sale el número ‘6’ o algo por el estilo? La solución puede ser más simple de lo que parece. La solución a tu problema tras el salto...

Conexión, consulta y ejecución de sentencias en MySQL con Java

Anteriormente escribí este mismo artículo pero para bases de datos en Oracle . En este artículo prácticamente me copio y pego para explicar paso a paso cómo realizar la conexión a MySQL en Java, así como la forma de realizar consultas a los registros existentes y ejecutar sentencias de inserción, borrado y actualización de datos. Al final del artículo tendremos una clase que encapsulará todos los procedimientos necesarios para trabajar con la base de datos.