¿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).
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:
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.
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,
ResponderBorrarsaludos
Qué tal,
ResponderBorrarTe comento que es exactamente el mismo procedimiento.
Saludox.
excelente información
ResponderBorrargracias =)
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??.
ResponderBorrarSaludos y gracias.
Adry
Normalmente no viene oculto pero puedes revisarlo, en caso de que no lo encuentres te recomiendo descargar nuevamente el jdk.
ResponderBorrarSaludox
Hola Monillo
ResponderBorrarMuchas 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
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
ResponderBorrarMontillo 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
ResponderBorrarhola, mira que estoy intentando firmar un applet y me sale este error:
ResponderBorrarcuando 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?
Se debe a que el comando que ejecutaste seguramente fue pegado del portapapeles del sistema operativo, te recomiendo escribir el comando manualmente (sin pegar).
ResponderBorrarSaludos.
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.
ResponderBorrarhttp://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)
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
ResponderBorrarno 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
hola he descubierto esto:
ResponderBorrarjarsigner -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!!!
Hola,
ResponderBorrarhe 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
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
ResponderBorrarException 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
Qué tal!
ResponderBorrarTe 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.
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.
ResponderBorrarQué tal Gustavo,
ResponderBorrarSi puedes por favor incluye el mensaje que te aparece en la consola al ejecutar el applet.
Saludox.
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 :)
ResponderBorrarIgual 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ó...
ResponderBorrarSaludox.
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
ResponderBorrarmi mail es ferchochu@hotmail.com
Ayudame con esto por favor, es muy importante, y estare toda la vida agradeciendo
Gracias
Qué tal Fernando,
ResponderBorrarPara 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.
otra vez son Fernando Silva,
ResponderBorrarya 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)
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.
ResponderBorrarIgual 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.
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
ResponderBorrarMil gracias
Qué tal,
ResponderBorrarPara lo que comentas está el response.sendRedirect("URL_destino") desde el applet.
Saludox.
Amigo,
ResponderBorrarcuando 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
excelente.:!:!:! de gran ayuda !!
ResponderBorrarno me funciona para mi archivo.jcw
ResponderBorraresk yo hago en Jcreator
pero igual no me sale
como porfavor
Excelente aporte gracias.
ResponderBorrarUna pregunta, tengo varios archivos jar firmados pero quiero quitarles la firma como puedo hacer??
Qué tal,
ResponderBorrarPara 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.
Gracias por la respuesta, intentare realizarlo con la explicación dada, mientras estaré al tanto del artículo.
ResponderBorrarSaludos
como firmar los archivos .rar que no se encuentran en la bin
ResponderBorraren mi applet utilizo una librería externa y no se como firmarla
Qué tal Belen,
ResponderBorrarPuedes 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.
muchas gracias!! de gran utilidad
ResponderBorrarhola 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?
ResponderBorrarQué tal,
ResponderBorrarPara 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.
Buen dia compañero, como realizo el procedimiento desde java 7, ahi no esta el comando
ResponderBorrarFelicidades Luis N.... excelente ayuda.
ResponderBorrar:y: Excelente blog amigo.
ResponderBorrarHola Monillo
ResponderBorrarExcelente 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
Qué tal Adrián,
ResponderBorrarEs 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.
Muchas gracias Luis Navarro
ResponderBorrarMil gracias me ha sido de utilidad !
ResponderBorrarEstimado he realizado los pasos pero no he podido visualizar mi applet desde el explorador.
ResponderBorrarSolo lo puedo ver con el AppletViewer de java
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...
ResponderBorrarLes comparto lo que encontre, apoyemos dando me gusta al video almenos a mi me funcionó...
http://www.youtube.com/watch?v=3gvxXuaWSWs