¿Cómo firmo un applet de Java para usar en un navegador?

Estoy tratando de implementar un applet de Java en mi sitio web. También necesito firmarlo, porque necesito acceder al portapapeles. He seguido todos los tutoriales de firma que pude encontrar pero no he tenido éxito. Esto es lo que hice hasta ahora:

  • Escribió un applet en NetBeans. Funciona bien en el visor de applets.
  • Hizo un archivo .jar fuera de él.
  • Creó un certificado al hacer esto:
keytool -genkey -keyalg rsa -alias myKeyName keytool -export -alias myKeyName -file myCertName.crt 
  • Lo firmé con jarsigner así:
 jarsigner "C:\my path\myJar.jar" myKeyName 
  • Hizo un archivo html que contiene esto:
      

Cuando abro ese archivo html, nunca obtengo el cuadro de diálogo de confirmación de seguridad (y así obtengo el error “java.security.AccessControlException: access denied”). Esto sucede en todos los navegadores.

¿Me estoy perdiendo un paso?

¿Quizás sea porque estás abriendo algunos archivos .class fuera del archivo jar?

De esa forma, es posible que no muestre la advertencia. Intenté hacerlo de esa forma, pero aún así me mostró la advertencia del certificado y, en un caso simple, en realidad me impidió acceder a una clase del JAR con la clase separada.

Tal vez su configuración específica o organización de archivos causa ese comportamiento. Si puede diseñar eso con más detalle podríamos ayudarlo mejor (o más bien, intente poner todos esos archivos .class en otro Jar firmado y agregarlo al archivo “…, anotherJar.jar”).

3 sencillos pasos

  1. keytool -genkey -keystore myKeyStore -alias yo

  2. keytool -selfcert -keystore myKeyStore -alias yo

  3. jarsigner -keystore myKeyStore jarfile.jar me

Primero, sugeriría obtener un certificado de firma de código válido. Puede obtener un cert gratuito de Thawte . Aunque generalmente estos certs se usan para S / MIME, también son válidos para la firma de código.

La segunda opción es importar su certificado autofirmado en el archivo cacert del JRE que su navegador está invocando.

Lo siguiente que debe verificar es asegurarse de que su navegador ejecute su último jar. Una forma de hacerlo es boost siempre el número de versión. La otra opción es que borre su caché de applet de Java. Por lo general, borro la memoria caché de mi navegador también, pero esto no debería ser necesario.

Mencionaste:

Cuando abro ese archivo html, nunca obtengo el cuadro de diálogo de confirmación de seguridad …

¿Está abriendo el archivo desde su sistema de archivos local, o mediante una URL a un servidor web que aloja el archivo HTML y el / los archivo (s) de applet (es)? Esa podría ser la razón por la que no recibes ninguna advertencia.

Aquí hay una forma de firmar sus jarras y luego verifique que todos los archivos de la clase estén firmados con su almacén de claves.

 #!/bin/bash KEYSTORE=/home/user/NetBeansProjects/sign/keystore FILES=`find /home/user/NetBeansProjects/Project/dist/ -name "*.jar"` for f in $FILES; do echo password | /usr/bin/jarsigner -keystore $KEYSTORE -verbose $f myself; echo "Signed $f"; /usr/bin/jarsigner -verify -verbose -certs $f | grep X.509 | sort -u; done 

Editar: Esta respuesta es histórica. JDK9 aparentemente desaprobará los applets. En el momento de la redacción (1 de enero de 2017), debe firmar applets pero no otorgarles privilegios adicionales, luego pasar a una tecnología más actual.

Sugiero que no firmes el código. Si estás jugando con la seguridad de otras personas, entonces realmente deberías saber lo que estás haciendo.

JTextComponent debería permitir copiar y pegar texto, si eso es suficiente.

jarsigner -verify que tu jar esté firmado. También puede echar un vistazo rápido al archivo y archivos de manifiesto dentro de META-INF/ .

El cuadro de diálogo emergente para confiar certificados puede estar deshabilitado. En la implementación de Sun: abra el Panel de control de Java; ve a la pestaña Avanzado; expanda el nodo Seguridad; las dos tickboxes superiores deben ser “Permitir que el usuario conceda permisos al contexto firmado” y “Permitir que el usuario conceda permisos al contenido de una autoridad que no sea de confianza”.

Intereting Posts