Assinatura digital no arquivo .CAB – usando ou criando sua assinatura

 

No artigo anterior, falamos sobre:

·         O que significa ser: Ser confiável no Internet Explorer;

·         Colocando a mão na massa: Como criar o arquivo de gabinete (.CAB)

 

Hoje falaremos sobre alguns temas bem complexos e delicados e depois passaremos a exemplos práticos.

 

Quando falamos em assinar o arquivo .CAB, precisamos observar alguns pontos, principalmente quando precisamos que o código  execute alguma coisa fora do modo seguro Java ou ainda sempre que precisemos instalar o código no computador local ou cliente a partir de uma página da Web. Para resolvermos isso, podemos assinar um arquivo .CAB usando o utilitário Signcode.exe, que está incluido no SDK para Java. Teremos a frente alguns exemplos.

 

No SDK, clique em Índice e clique em S. Scroll para encontrar "Assinando arquivos de gabinete com permissões Java". (trecho encontrado como referência no site da Microsoft, em www.microsoft.com/java.


Agora, vamos tratar de alguns pontos que devemos considerar:

  • As permissões Java mais precisas devem ser adicionadas à Virtual Machine da Microsoft e às ferramentas de assinatura no SDK para Java 2.0 e posteriores;
  • O uso das permissões mais precisas fará com que tenhamos a ajuda ao limitar sua exposição como desenvolvedor de um pacote Java. Com isso reduzimos o acesso permitido à exposição mínima exigida pelo seu projeto. Tal prática é altamente recomendada pois é tema de discussão e seminário por vários especialistas no assunto segurança;
  • O uso de permissões mais precisas serão solicitadas para o uso de um arquivo .ini no mesmo instante da assinatura.
  • E para terminarmos, é possível usar (ou criar!) um certificado de teste, com o simples intuito ou de desenvolvimento, mas um certificado real será desejado antes da implantação de seu aplicativo.

Marcando suas referências em um arquivo .CAB assinado

Há várias formas de criar um referência ao seu arquivo .CAB  que será assinado, em código, no HTML. Algumas desses parâmetros:

  • Cabbase  - Usando uma marca APPLET;
  • Cabinets  - Quando fazemos o uso de uma marca APPLET;
  • Useslibrary, useslibrarycodebase e useslibraryversion – ao usamos uma marca APPLET;
  • Cabbase - Para uma marca OBJECT;
  • Cabinets – Quando o suo de uma marca OBJECT;
  • Useslibrary, useslibrarycodebase e useslibraryversion – ao usar uma marca OBJECT.

 Agora que tal um exemplo?

 

Bem! Em determinados momentos é possível usar a seguinte classe Java com os três pequenos exemplos a seguir:

Atenção: Devemos nos Certificar que tenhamos instalada a versão jvc.exe no caminho do SDK para Java 2.0, via compilação 4337 ou mais atual, com isso simplificamos a permissão de declaração e haverá uma exibição de um MessageBox Win32, for quando executada.

 

package simple;

import com.ms.security.*;

public class Simple extends java.applet.Applet

{

   public void init()

   {

      try {

         if (Class.forName("com.ms.security.PolicyEngine") != null)

    PolicyEngine.assertPermission(PermissionID.SYSTEM);

      } catch (Throwable cnfe) {  }

      try {

 MessageBox(0, "MessageBox successfully called.", "Java", 0);

      } catch (UnsatisfiedLinkError ule) {

 System.err.println("Caught exception: " + ule);

 System.err.println("Probably wrong version of Java                             compiler.");

      }

    }

 

    /** @dll.import("USER32") */

static native int MessageBox(int hwndOwner, String text, String title, int style);

}

                                   

Observem que a inclusão de linha está inserida nas linhas de comando do Signcode.exe, (que falaremos no próximo artigo!)