Como fazer com que o seu código Java seja confiável no Internet Explorer

Traduções deste artigo Traduções deste artigo
ID do artigo: 193877 - Exibir os produtos aos quais esse artigo se aplica.
Observação A Microsoft Java Virtual Machine (MSJVM) e o Microsoft SDK para Java não estão mais disponíveis para distribuição a partir da Microsoft. Não haverá mais aperfeiçoamentos para a MSJVM ou para o SDK para Java. Para obter informações adicionais sobre recursos para desenvolvedores de Java, visite o seguinte site da Microsoft (em inglês):
http://www.microsoft.com/mscorp/java
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Considere diversos fatores quando seu código Java for executado como totalmente confiável, parcialmente confiável ou não-confiável no Microsoft Internet Explorer. Este artigo explica diversas considerações e aponta alguns recursos que podem ajudar a garantir que o código Java tenha o nível correto de confiança quando executado no navegador.

Mais Informações

Carregador de classe

É importante entender o significado do carregador de classe no Java. Ele controla a segurança e o acesso concedido a uma classe. O seguinte artigo na Base de Dados de Conhecimento explica quando a máquina virtual da Microsoft (Microsoft VM) usa carregadores diferentes:
177168 Como a máquina virtual procura as classes Java?
Com essas informações, é possível tomar uma melhor decisão sobre qual método de obtenção de permissões adicionais é mais adequado ao seu projeto.

O que significa ser confiável

O termo confiável significa que o código não fica mais confinado ao modo seguro Java. O modo seguro restringe a execução de operações confiáveis por um código não-confiável, como:
  • Chamar código nativo
  • Usar COM
  • Usar J/Direct
  • Conectar a computadores remotos
  • Impressão
  • Usar JDBC
  • Criar janelas em nível superior que não tenham o aviso de miniaplicativo
Para que suas classes sejam executadas com permissões acima do nível de modo seguro, as classes devem ser entregues ao computador cliente dentro de um arquivo de gabinete (CAB). Ao assinar o arquivo CAB, também é necessário especificar as permissões solicitadas pelas classes contidas. Há três níveis predefinidos de permissões (BAIXO, MÉDIO e ALTO) no Microsoft Internet Explorer 4.x:
  • As permissões ALTO são equivalentes ao modo seguro Java. A única vantagem da assinatura nessa situação é que você pode garantir a um usuário que o código dele não foi alterado por terceiros.
  • As permissões MÉDIO são as mesmas de ALTO, mas permite o acesso a uma área de criação no computador local.
  • As permissões BAIXO essencialmente concedem acesso a todas as operações mencionadas anteriormente.

Declarando permissão

O seguinte artigo da Base de Dados de Conhecimento da Microsoft fornece informações suficiente para compreender quando, por que e como você deve declarar permissão no código Java:
175622 Exceção SecurityExceptionEx executando um miniaplicativo Java

Criando o arquivo de gabinete (CAB)

Agora que você entende o conceito dos carregadores, confiança e permissões, a próxima etapa é saber como criar o arquivo de gabinete (CAB). Neste estágio, é necessário decidir se quer instalar seu código no computador do usuário ou simplesmente compactá-lo em um arquivo CAB para um download mais rápido em cada visita à página.

Se não quiser instalar o código no computador local, é possível simplesmente criar um arquivo CAB usando o utilitário Cabarc.exe e fazer referência ao CAB a partir de um parâmetro passado ao miniaplicativo a partir do HTML. Isso será mostrado no Exemplo 1 posteriormente nesse artigo.

Observação Esse método não requer que você assine o arquivo CAB se não precisar que seu código seja executado como confiável. É possível, ainda, obter os benefícios de possuir apenas um arquivo compactado para download em vez de arquivos individuais de classe.

Se quiser instalar o código no computador local, existem duas maneiras. Uma é criar a Unidade de distribuição (DU) usando o utilitário Dubuild.exe no SDK para Java. Esse utilitário cria um arquivo CAB e inclui um arquivo .osd gerado automaticamente. Consulte o Exemplo 2 posteriormente nesse artigo.

A outra maneira para instalar o código no computador local é usar um arquivo .inf. Esse método é mais manual e mais propenso a erro, mas possui a vantagem adicional de ser o único método que funciona no Internet Explorer 3.x e mais recentes. Consulte o Exemplo 3 posteriormente nesse artigo.

Cada um desses métodos tem a vantagem de baixar o código na primeira visita à página e não requer outro download em visitas posteriores, a não ser que uma versão mais nova seja disponibilizada. No entanto, eles requerem algum espaço permanente na unidade local do usuário.

Usando uma assinatura digital no arquivo CAB

É necessário assinar o CAB sempre que o código precisar executar algo fora do modo seguro Java ou sempre que você quiser instalar o código no computador local a partir de uma página da Web. Você assina um CAB usando o utilitário Signcode.exe no SDK para Java. Os exemplos mencionados posteriormente neste artigo mostram algumas situações de assinatura comuns. É possível encontrar informações adicionais no tópico "Assinando arquivos de gabinete com permissões" da documentação e dos exemplos do SDK para Java no seguinte local (em inglês):
http://www.microsoft.com/mscorp/java/
No SDK, clique em Índice e clique em S. Scroll para encontrar "Assinando arquivos de gabinete com permissões Java".

A seguir, alguns pontos-chave a serem considerados:
  • As permissões Java mais precisas foram adicionadas à VM da Microsoft e às ferramentas de assinatura no SDK para Java 2.0 e posterior.
  • O uso das permissões mais precisas pode ajudar a limitar sua exposição como desenvolvedor de um pacote Java reduzindo o acesso permitido à exposição mínima exigida pelo seu projeto.
  • As permissões mais precisas são solicitadas pelo uso de um arquivo .ini no mesmo momento da assinatura. Consulte a documentação SDK para Java denominada "Referência de valores .ini das permissões Java" para informações adicionais.
Finalmente, é possível usar um certificado de teste para fins de desenvolvimento (como será visto nos exemplos posteriores neste artigo), mas um certificado real será desejado antes da implantação de seu aplicativo. Um certificado real pode ser obtido por uma Autoridade de certificação. VeriSign está emitindo agora certificados de assistência total para uso com Authenticode. É possível entrar em contato com a VeriSign no seguinte local (em inglês):
http://digitalid.verisign.com/
Para obter informações adicionais sobre como criar, exibir e gerenciar certificados, visite o seguinte site da Microsoft Developer Network (MSDN) (em inglês):
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/seccrypto/security/creating_viewing_and_managing_certificates.asp

Marcas para referência ao seu arquivo CAB assinado

Existem diversas opções de referência ao seu arquivo CAB assinado no HTML. A seguir, uma lista e uma breve comparação dos diversos métodos:
  • parâmetros cabbase para uma marca APPLET
  • parâmetros cabinets para uma marca APPLET.
  • parâmetros useslibrary, useslibrarycodebase e useslibraryversion para uma marca APPLET
  • parâmetros cabbase para uma marca OBJECT
  • parâmetros cabinets para uma marca OBJECT
  • parâmetros useslibrary, useslibrarycodebase e useslibraryversion para uma marca OBJECT

Código confiável no Internet Explorer para Macintosh

O código de autenticação não é oferecido no Internet Explorer para Macintosh. Para habilitar o acesso ao código baixado fora do modo seguro Java, o usuário deve adicionar o servidor à lista de Sites confiáveis e definir as permissões do site para as solicitadas pelo código.

EXEMPLOS

É possível usar a seguinte classe Java com os três pequenos exemplos a seguir. Recorte e cole esse texto em um arquivo denominado Simple.java.

Observação Certifique-se de que tenha a versão jvc.exe no caminho do SDK para Java 2.0 (compilação 4337) ou mais recente. Essa classe simplificará a permissão de declaração e exibirá um Win32 MessageBox 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);
}
				
Observação A alimentação de linha é inserida nas linhas de comando para o Signcode.exe abaixo. Essas linhas de comando são muito extensas para caber em uma linha na Base de Dados de Conhecimento da Microsoft, mas devem ser editadas nos arquivos de lote para que fiquem em uma única linha.

Exemplo 1 - Simple1

Esse exemplo mostra um arquivo CAB assinado que não instala no computador local.

É possível usar os comandos abaixo para compilar Simple.java, criar um arquivo CAB que contém Simples.class, habilitar a raiz de teste no computador local, criar um certificado de teste, assinar o arquivo CAB com permissões Java BAIXO usando o certificado de teste e abrir a página Simple1.html no navegador. Recorte e cole esses comandos em um arquivo em lote denominado go1.bat e salve-o no mesmo diretório do arquivo Simple.java criado acima:
jvc /d . Simple.java
cabarc -p n mycab1.cab simple/Simple.class
del simple\Simple.class
setreg 1 true
makecert -sk MyKeyName -n "CN=My Publisher Name" MyTestCert.cer
cert2spc MyTestCert.cer MyTestCert.spc
signcode -j javasign.dll -jp LOW -spc MyTestCert.spc -k MyKeyName
  mycab1.cab
start Simple1.html
				
Antes de executar o go1.bat, recorte e cole o HTML em um novo arquivo denominado Simple1.html e deixe-o no mesmo diretório dos arquivos denominados Simple.java e go1.bat criados anteriormente:
<HTML>
 <APPLET CODE="simple.Simple" WIDTH=100 HEIGHT=100>
 <PARAM NAME="cabbase" VALUE="mycab1.cab">
 </APPLET>
</HTML>
				
Observação Um parâmetro "cabinets" funciona em intercâmbio com um parâmetro "cabbase" em computadores com Internet Explorer 4.0 e mais recente. O parâmetro "cabinets" tem a funcionalidade extra de permitir a referência de diversos arquivos CAB a partir da mesma marca APPLET.

Exemplo 2 - Simple2

Esse exemplo mostra um arquivo CAB assinado que instala no JPM do computador local.

É possível usar os comandos abaixo para compilar Simple.java, criar um arquivo CAB que contém Simples.class e um arquivo .osd gerado por dubuild, habilitar a raiz de teste no computador local, criar um certificado de teste, assinar o arquivo CAB com permissões Java BAIXO usando o certificado de teste e abrir a página Simple2.html no navegador. Recorte e cole esses comandos em um arquivo em lote denominado go2.bat e salve-o no mesmo diretório do arquivo Simple.java criado anteriormente:
jvc /d . Simple.java
dubuild mycab2.cab . /D "JPM Simple2" /I *.class /V 1,1,23,0
del simple\Simple.class
setreg 1 true
makecert -sk MyKeyName -n "CN=My Publisher Name" MyTestCert.cer
cert2spc MyTestCert.cer MyTestCert.spc
signcode -j javasign.dll -jp LOW -spc MyTestCert.spc -k MyKeyName
  mycab2.cab
start Simple2.html
				
Antes de executar go2.bat, recorte e cole o HTML em um novo arquivo denominado Simple2.html e deixe-o no mesmo diretório dos arquivos denominados Simple.java e go2.bat criados anteriormente:
<HTML>
 <APPLET code="simple.Simple" WIDTH=100 HEIGHT=100>
 <PARAM NAME=useslibrary VALUE="JPM Simple2">
 <PARAM NAME=useslibrarycodebase VALUE="mycab2.cab">
 <PARAM NAME=useslibraryversion VALUE="1,1,23,0">
 </APPLET>
</HTML>
				
Quando um pacote estiver instalado no computador local que usa JPM, ele estará na pasta "<windir>\Downloaded Program Files". Use essa pasta para exibir e remover os pacote instalados usando o Internet Explorer.

Exemplo 3 - Simple3

Esse exemplo mostra um arquivo CAB assinado que instala o arquivo Simple.class no diretório <windir>\java\lib\simple de seu computador local. É possível usar os comandos abaixo para compilar Simple.java, criar um arquivo CAB que contém Simples.class e um arquivo .inf criado, habilitar a raiz de teste no computador local, criar um certificado de teste, assinar o arquivo CAB com permissões Java BAIXO usando o certificado de teste e abrir a página Simple3.html no navegador. Recorte e cole esses comandos em um arquivo de lote denominado go3.bat e salve-o no mesmo diretório do arquivo Simple.java criado anteriormente:
jvc /d . Simple.java
cabarc -p n mycab3.inner.cab simple/Simple.class
del simple\Simple.class
cabarc n mycab3.cab mycab3.inner.cab simple.inf
setreg 1 true
makecert -sk MyKeyName -n "CN=My Publisher Name" MyTestCert.cer
cert2spc MyTestCert.cer MyTestCert.spc
signcode -j javasign.dll -jp LOWX -spc MyTestCert.spc -k MyKeyName
  mycab3.cab
start Simple3.html
				
Antes de executar go3.bat, é necessário recortar e colar o seguinte HTML em um arquivo denominado Simple3.html e deixá-lo no mesmo diretório dos arquivos denominados Simple.java e go3.bat criados anteriormente:
<HTML>
 <OBJECT    CLASSID="clsid:99999999-9999-9999-9999-999999999999"
 CODEBASE="mycab3.cab#Version=1,1,23,0">
 </OBJECT>

 <APPLET CODE="simple.Simple" WIDTH=100 HEIGHT=100>
 </APPLET>
</HTML>
				
Observação Substitua o guid acima "99999999-9999-9999-9999-999999999999" por um criado para o arquivo .inf nas seguintes instruções.

Execute estas etapas para criar o arquivo simple.inf que está para ser incluso no arquivo CAB externo:
  1. Copie master.inf do diretório <sdk-dir>\bin\packsign.
  2. Renomeie a nova cópia de master.inf como simple.inf.
  3. Abra o arquivo simple.inf em um editor de texto.
  4. Altere as seguintes linha de:
    run=extrac32.exe /e /a /y /l %49000% CabFileName.cab
    						
    Para:
    run=extrac32.exe /e /a /y /l %49000% mycab3.inner.cab
    						


    De:
    InfFile=master.inf
    						
    Para:
    InfFile=simple.inf
    						


    De:
    ClassId="{99999999-9999-9999-9999-999999999999}"
    						
    Para:
    1. Execute guidgen.exe (do diretório <sdk-dir>\bin).
    2. Selecione a opção número 4 "Formato do Registro".
    3. Pressione o botão "Novo GUID".
    4. Pressione o botão "Copiar".
    5. Cole o novo guid da área de transferência na linha acima no arquivo simple.inf assim como no HTML acima.


    De:
    PackageName="name"
    						
    Para:
    PackageName="SIMPLE3"
    						


    De:
    HKLM,"SOFTWARE\Classes\CLSID\%ClassId%\InstalledVersion",,,"aa,bb,cc,dd"
    						
    Para:
    HKLM,"SOFTWARE\Classes\CLSID\%ClassId%\InstalledVersion",,,"1,1,23,0"
    						


    De:
    HKLM,"Software\Classes\CLSID\%ClassId%\InstalledVersion","Path",,  "%49000%\<filename>"
    						
    Para:
    HKLM,"Software\Classes\CLSID\%ClassId%\InstalledVersion","Path",,  "%49000%\simple\Simple.class"
    						
  5. Salve as alterações feitas no arquivo simple.inf.
  6. Execute o arquivo go3.bat criado anteriormente.
Observação 1 Após executar os exemplos anteriores, você deverá desativar a raiz de teste no computador local executando "setreg.exe 1 false". Isso evitará que a raiz de teste receba a certificação real do Internet Explorer. A raiz de teste pode sempre ser reativada com o uso de "setreg.exe 1 true".

Observação 2 Considere o seguinte ao assinar o arquivo CAB para teste de versos de uso de produção:
  1. Todos os comandos anteriores geram o certificado e imediatamente assinam com ele. A maioria das pessoas recria seus certificados toda vez que criam e assinam um CAB, mas você não faz isso se estiver publicando o CAB. Você compra e usa um certificado e cuida dele com muita atenção.

    Os comandos anteriores criam um certificado de teste, mas você apenas precisa fazer isso caso não tenha comprado um. Essa é a forma como você assinaria se eles tivessem um arquivo .pvk em vez de manter a chave no Registro, porque algumas pessoas recebem suas chaves dessa forma. Substitua "-v MyCertName.pvk" por "-k KeyName".
  2. Ao executar o comando signcode.exe, é necessário provavelmente adicionar a opção "-t http://timestamp.verisign.com/scripts/timstamp.dll" a fim de inserir o carimbo de data e hora correto da assinatura no arquivo CAB. Ele foi removida desses exemplos a fim de permitir que o comando funcione para os usuários que não têm uma conexão direta com a Internet.
Observação 3 O Microsoft Visual J++ 6.0 foi desenvolvido para a criação de pacotes simples dos componentes Java. Veja a guia Saída na caixa de diálogo Propriedades do projeto e a documentação do produto para informações adicionais. As unidades de distribuição criadas com o Visual J++ 6.0 usam o JPM para a instalação do pacote.

Observação 4 É possível configurar o Internet Explorer 4.x ou mais recente para tratar o código sem assinatura como tendo mais do que apenas as permissões de modo seguro por padrão. Você deve fazer isso apenas em situações especiais como na Intranet ou para fins de teste. Se optar por configurar o Internet Explorer dessa maneira, esteja ciente de que não terá mais proteção contra códigos Java mal-intencionados executados em seu computador. Por exemplo, para tratar automaticamente todos os miniaplicativos Java como totalmente confiáveis na Zona da Intranet, execute as seguintes etapas:
  1. Vá para a guia Segurança na caixa de diálogo Propriedades da Internet.
  2. Selecione a Zona da Intranet local.
  3. Selecione a opção Personalizado e clique em Configurações.
  4. Localize o item Permissões Java na lista e escolha Personalizar.
  5. Selecione Personalizar e clique em Configurações Personalizadas Java.
  6. Vá para a guia Editar permissões.
  7. Em Executar conteúdo sem assinatura, clique em Ativar.

Referências

Para informações adicionais sobre os problemas de criação de pacotes e de segurança na Microsoft virtual machine, clique nos números a seguir para visualizar os artigos na Base de Dados de Conhecimento da Microsoft:
175622 Exceção SecurityExceptionEx executando um miniaplicativo Java
177168 Como a máquina virtual procura as classes Java?
179652 Como implantar Java no Internet Explorer 4.0 e no Netscape 4.0
181374 Artigos relacionados ao download de componentes
Para obter informações adicionais sobre esses problemas com o download de códigos, visite o seguinte site da Microsoft (em inglês):
http://msdn.microsoft.com/library/default.asp?url=/workshop/delivery/download/overview/entry.asp
Para consultar os artigos da Base de Dados de Conhecimento mais recentes e outras informações de suporte sobre Visual J++ e SDK para Java, leia as seguintes páginas no site do Suporte Técnico da Microsoft (em inglês):
http://www.microsoft.com/java/

Propriedades

ID do artigo: 193877 - Última revisão: quarta-feira, 22 de fevereiro de 2006 - Revisão: 11.0
A informação contida neste artigo aplica-se a:
  • Microsoft Visual J++ 1.0 Standard Edition
  • Microsoft Visual J++ 1.1 Standard Edition
  • Microsoft Visual J++ 6.0 Standard Edition
  • Microsoft Software Development Kit para Java 2.02
  • Microsoft Software Development Kit para Java 3.1
  • Microsoft Software Development Kit para Java 2.01
  • Microsoft Software Development Kit para Java 2.02
  • Microsoft Software Development Kit para Java 3.0
Palavras-chave: 
kbhowto kbjnative kbjdbc kbfaq KB193877

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com