2009-05-26 11 views
39

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 he hecho hasta ahora:¿Cómo firmo un applet de Java para usar en un navegador?

  • Escribí un applet en NetBeans. Funciona bien en el visor de applets.
  • He creado un archivo .jar.
  • crea un certificado al hacer esto:
keytool -genkey -keyalg rsa -alias myKeyName 
keytool -export -alias myKeyName -file myCertName.crt 
  • lo firmó como esto wtih jarsigner:
jarsigner "C:\my path\myJar.jar" myKeyName 
  • hecho un archivo HTML que contiene lo siguiente:
<html> 
    <body> 
<applet code="my/path/name/myApplet.class" archive="../dist/myJar.jar"/> 
    </body> 
</html> 

Al abrir ese archivo html, nunca consiguen el cuadro de diálogo de confirmación de la seguridad (y por lo tanto obtener el "java.security.AccessControlException: Acceso denegado "error") Esto sucede en todos los navegadores.

¿Me falta un paso?

Respuesta

6

Quizás es porque está abriendo algunos archivos .class fuera de el archivo jar?

De esta manera es posible que no se muestre la advertencia. Intenté hacerlo de esa manera, 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.

Quizás su configuración específica u organización de archivos cause 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").

+0

Lo arreglé. El problema era que mis archivos jar no se estaban compilando de la misma manera que estaba haciendo referencia a los archivos de clase. Ahora funciona. ¡Gracias! – user107312

-1

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 firme el código. Si estás jugando con la seguridad de otras personas, entonces realmente deberías saber lo que estás haciendo.

JTextComponent debe permitir copiar y pegar texto, si eso es suficiente.

jarsigner -verify comprobará que su 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 se puede deshabilitar. 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 deberían 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".

+0

Según mis requisitos, el código debe estar firmado. Revisé mi archivo jar y dice que todo está bien. mi archivo de clase está etiquetado como smk: se verificó la firma, la entrada se muestra en manifiesto y se encontró al menos un certificado en el almacén de claves. La carpeta META-INF también se ve bien. La configuración también está bien en mi panel de control. Puedo ver otros applets autofirmados bien. – user107312

+3

Para ser justos, la firma de applets (y trabajar con certificados en general) puede ser un proceso bastante irritante. No necesariamente significa que el cartel "no sabe lo que está haciendo" en términos del código ... –

+0

El número de personas que "saben lo que están haciendo" en términos de seguridad parece ser bastante pequeño . –

1

Primero, sugiero que obtenga un certificado de firma de código válido. Puede obtener un certificado gratis llamando al 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 comprobar es asegurarse de que su navegador ejecute su último jar. Una forma de hacerlo es aumentar 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.

+0

Creo que se ha solucionado el problema del uso de certificados de correo electrónico para la firma de códigos. –

+0

Thawte ha suspendido los certificados de correo electrónico personal y el sistema de certificación de Web of Trust (WOT) – Massimo

1

Usted mencionó:

Al abrir ese archivo html, nunca consiguen el cuadro de diálogo de confirmación ...

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

+0

Estoy abriendo desde mi sistema local. ¿Estás diciendo que el diálogo de seguridad no aparecerá si se abre localmente? Si esto es cierto, ¿hay alguna forma de que aparezca localmente? Sería mucho más fácil probar mi proyecto. Mientras tanto, voy a probarlo en el servidor web para ver si este es el problema. – user107312

+0

Todavía no funciona, cuando se accede desde el servidor web. Solo necesito mis archivos .class, .jar y .html, ¿verdad? ¿Necesito algún archivo relacionado con los certificados? – user107312

1

Aquí hay una manera de firmar sus jarras y luego verifique que todos los archivos de 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 
29

3 sencillos pasos

  1. herramienta de claves -genkey -keystore myKeyStore me -alias

  2. herramienta de claves -selfcert -keystore myKeyStore me -alias

  3. jarsigner -keystore myKeyStore jarfile .jar me

+1

'-keystore myKeyStore' es incluso opcional, ¿no? Conseguí mi applet firmado, de esa manera, pero mi Clipboardproblem permanece. Sin embargo, la mejor aplicación (jarsigning) - tutorial que encontré en la web. :) –

Cuestiones relacionadas