Reconhecimento de assinatura utilizando JWS

Gente, estou tendo problemas no reconhecimento de assinatura de
um aplicativo.
Preciso liberar o acesso ao disco e a outros itens de segurança
e não estou conseguindo.
Abaixo descreverei todos os passos efetuados:

Código fonte do MainFrame.java, bem simples:

[code]package br.com.teste;
import java.io.File;
import javax.swing.JFrame;

public class MainFrame extends JFrame {
public static void main(String args[]) {
try {
MainFrame frame = new MainFrame();
frame.setVisible(true);
frame.securityTest();
} catch (Exception e) {
e.printStackTrace();
}
}

public MainFrame() {
	super("Teste de Assinatura");
	setBounds(100, 100, 400, 300);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void securityTest() {
	File file = new File("teste.ini"); // ** aqui está problema de acesso **
	if (file.isDirectory()) System.out.print("É um diretório");
	else System.out.println("Não é um diretório");
	if (file.isFile()) System.out.print("É um arquivo");
	else System.out.println("Não é um arquivo");
	if (file.exists()) System.out.print("EXISTE");
	else System.out.println("NÃO EXISTE");
}

}[/code]

Este arquivo foi compilado utilizando o Java 1.5.0_09 em Linux, utilizando
o mandriva powerpack+ 2006:

[code]$ javac -version
javac 1.5.0_09
$

uname -a

Linux beyond 2.6.12-12mdksmp #1 SMP Fri Sep 9 17:43:23 CEST 2005 i686 Intel® Pentium® 4 CPU 3.40GHz unknown GNU/Linux
#[/code]

No eclipse, pego o projeto que contem o código acima e gero o arquivo teste.jar

Seguindo a orientação do site: http://java.sun.com/products/javawebstart/1.2/docs/developersguide.html
gerei os arquivos de chaves para testes da seguinte forma:

[code]$ keytool -genkey -keystore testeKeystore -alias teste
Enter keystore password: testeteste
What is your first and last name?
[Unknown]: teste
What is the name of your organizational unit?
[Unknown]: teste
What is the name of your organization?
[Unknown]: teste
What is the name of your City or Locality?
[Unknown]: teste
What is the name of your State or Province?
[Unknown]: SC
What is the two-letter country code for this unit?
[Unknown]: BR
Is CN=teste, OU=teste, O=teste, L=teste, ST=SC, C=BR correct?
[no]: yes

Enter key password for
(RETURN if same as keystore password):
$[/code]

E depois:

$ keytool -selfcert -alias teste -keystore testeKeystore Enter keystore password: testeteste $

Para verificar:

[code]$ keytool -list -keystore testeKeystore
Enter keystore password: testeteste

Keystore type: jks
Keystore provider: SUN

Your keystore contains 1 entry

teste, 31/10/2006, keyEntry,
Certificate fingerprint (MD5): B9:CA:5E:8A:7B:C2:2F:F2:A5:3D:40:1D:81:05:57:32
$[/code]

Assinando o teste.jar:

[code]$ jarsigner -keystore testeKeystore /home/robert/workspace/Web/web/app/teste.jar teste
Enter Passphrase for keystore: testeteste

Warning: The signer certificate will expire within six months.
$[/code]

Verificação da assinatura no jar:

[code]$ jarsigner -verify teste.jar
jar verified.

Warning: This jar contains entries whose signer certificate will expire within six months. Re-run with the -verbose and -certs options for more details.
$[/code]

Agora a parte “web”…
Aqui está o arquivo jnlp utilizado:

[code]<?xml version="1.0" encoding="utf-8"?>

TESTE TESTE Teste Teste Teste Teste
	<jar href="teste.jar"/>
</resources>
<application-desc main-class="br.com.teste.MainFrame" />
</application-desc>
<security>
	<all-permissions/>
</security>

[/code]

versão do apache:

# httpd -version Server version: Apache/2.0.54 Server built: Sep 12 2005 13:03:32 #
O que foi incluido no arquivo /etc//httpd/conf/mime.types:

application/x-java-jnlp-file	JNLP jnlp

O arquivo index.html utilizado:

[code]

TESTE JAVA WEB START


TESTE DE ASSINATURA






Executar aplicativo

[/code]

Bom, e no cliente, acessando via Internet Explorer versão 6.0.2600.0000
e utilizando o Java Versão 1.5.0 (build 1.5.0_06-b05)
Que é uma versão inferior a utilizada na compilação em linux, mas
certamente não está aí o problema, pois já compilei até na 1.4.2
e também não funcionou.

Continuando…

Então acessando o endereço web do tal arquivo index.html e clicando sobre
o link que leva ao teste.jnlp, inicia-se normalmente o carregamento do JWS.
O JWS pede para criar os atalhos tradicionais que após confirmados, inicia-se
o aplicativo, mas com o seguinte detalhe no Java Console ativado do JWS:

java.security.AccessControlException: access denied (java.io.FilePermission teste.ini 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.isDirectory(Unknown Source) at br.com.teste.MainFrame.securityTest(MainFrame.java:30) at br.com.teste.MainFrame.main(MainFrame.java:14) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.sun.javaws.Launcher.executeApplication(Unknown Source) at com.sun.javaws.Launcher.executeMainClass(Unknown Source) at com.sun.javaws.Launcher.continueLaunch(Unknown Source) at com.sun.javaws.Launcher.handleApplicationDesc(Unknown Source) at com.sun.javaws.Launcher.handleLaunchFile(Unknown Source) at com.sun.javaws.Launcher.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
Ou seja, o aplicativo JWS não está tendo acesso ao disco local por problemas
de permissão, como se não existisse uma assinatura.
Um fato muito estranho é que não é apresentado nenhuma informação referente
a assinatura nem ao fornecedor do aplicativo.

Alguém saberia me dizer o que poderia estar errado em todo esse processo?

Agradeço antecipadamente qualquer comentário ou sugestão!

[]'s

Robert Mauro Lang

Tente limpar o cache da JVM da maquina que roda o browser. É só ir em “Java Control Panel” e dar “Delete Files…”.

Quando você carrega o JNLP ele apresenta alguma mensagem informando que o certificado não é válido e pedindo para confirmar se quer realmente rodar o programa? Como o certificado é auto-assinado, deveria dar esta mensagem.

Bem, se nada disso funcionar, aumente o nivel de log para ver se pega algum erro: “Java Console Panel” -> pasta “Advanced” -> “Debugging” e click em todas as opções.

Oyama,

Obrigado por responder.
Sobre o cache do javaws, java control panel e delete files, eu já havia feito isso várias vezes e não resolveu.

Sobre alguma mensagem sobre certificado, não é mostrada nenhuma mensagem, o que é bem estranho.

E finalmente, no debbugging, já está tudo habilitado e se for olhar nos arquivos de log em
C:\Documents and Settings\Robert\Dados de aplicativos\Sun\Java\Deployment\log
o arquivo javaws7250.trace possui o mesmo conteúdo do console que citei anteriormente.
É uma situação bem estranha, pois já havia feito isso várias vezes sem problema
em outro computador com configurações semelhantes, mudando o hardware e a versão do java que era 1.4.2.
O agravante é que realmente preciso muito disso.

Se tiveres mais alguma sugestão, por favor poste.

Obrigado!