Reconhecimento de assinatura utilizando JWS

1 resposta
R

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:
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");
	}
}
Este arquivo foi compilado utilizando o Java 1.5.0_09 em Linux, utilizando o mandriva powerpack+ 2006:
$ 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(R) Pentium(R) 4 CPU 3.40GHz unknown GNU/Linux
#

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

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

$ 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 <teste>
        (RETURN if same as keystore password):
$
E depois:
$ keytool -selfcert -alias teste -keystore testeKeystore
Enter keystore password:  testeteste
$
Para verificar:
$ 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
$
Assinando o teste.jar:
$ 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.
$
Verificação da assinatura no jar:
$ 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.
$
Agora a parte "web"... Aqui está o arquivo jnlp utilizado:
<?xml version="1.0" encoding="utf-8"?>

<jnlp codebase="http://192.168.0.10/web/app/" href="teste.jnlp">
	<information>
		<title>TESTE</title>
		<vendor>TESTE</vendor>
		<homepage href="http://www.teste.com.br"/>
		<description>Teste</description>
		<description kind="one-line">Teste</description>
		<description kind="tooltip">Teste</description>
		<description kind="short">Teste</description>
		<shortcut online="true">
			<desktop/>
			<menu submenu="Teste"/>
		</shortcut>
		<offline-allowed/>
	</information>
	<resources>
		<j2se version="1.5" initial-heap-size="64m" max-heap-size="64m"/>

		<jar href="teste.jar"/>
	</resources>
	<application-desc main-class="br.com.teste.MainFrame" />
	</application-desc>
	<security>
		<all-permissions/>
	</security>
</jnlp>
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:
<HTML>
	<HEAD>
		<TITLE>TESTE JAVA WEB START</TITLE>
	</HEAD>
	<BODY>
		TESTE DE ASSINATURA
		<BR>
		<BR>
		<BR>
		<A HREF="app/teste.jnlp">Executar aplicativo</A>
	</BODY>
</HTML>

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

1 Resposta

V

Cara vi que seu tópico era antigo e sem resposta, decidi mandar uma mensagem se você conseguiu resolver o problema??? pois estou com o mesmo problema, se sim o que estava dando errado? como conseguiu resolver o problema?

Criado 31 de outubro de 2006
Ultima resposta 21 de nov. de 2006
Respostas 1
Participantes 2