Sei sulla pagina 1di 7

Assinatura de Applets

Introduo
O modelo de segurana implementado pela plataforma Java, na sua proposio inicial, centrada sobro o conceito de sandbox
areia) (4). De acordo com o modelo sandbox, um cdigo remoto ( applet) no confivel e pode acessar recursos limitados, fornecidos
dentro do sandbox, uma rea do Servidor Web dedicado quele applet. A idia de sandbox foi desenvolvida no sentido de garantir que
mesmo que um usurio carregue um applet malicioso, esse no pode danificar a mquina local, por exemplo, apagar um arquivo do seu
disco local.
Porm existem applets que so de confiana e necessitam sair do sandbox para fornecer um determinado servi o. Existem varias
maneiras para resolver este problema, uma delas a assinatura do applet . (4)
O JDK 1.1.x introduziu o conceito de applet assinado. Neste modelo estendido, um applet assinado digitalmente tratado como c
local confi vel (aplicao standalone) se a assinatura reconhecida como confivel pelo sistema que recebeu o applet. Entretanto no JDK
1.2.x, o applet assinado ter liberdades conforme especificado por um arquivo de pol tica (policy file). Utilizou -se neste trabalho para o
processo de assinatura e verificao do Applet Cliente a verso JDK 1.2.1.
Assinatura digital utilizada quando se necessita da certeza da origem de uma mensagem como se fosse uma assinatura escrita no
papel. Para assinar um applet, o desenvolvedor empacota todo o cdigo Java e arquivos relacionados dentro de um arquivo JAR (
ARchive) (2), que um formato de arquivo de compactao de propsito geral, usado para compactar os componentes de uma
aplicao Java. A plataforma Java assina e verifica arquivos JAR usando um par de chaves (chave pblica e chave privada). A chave
privada funciona como uma "caneta" eletrnica que assina o arquivo (ver Figura 1). Como o prprio nome sugere, esta chave s
conhecida pelo assinante do applet. O processo de verificao da assinatura pode ser feito por qualquer pessoa que possua a
pblica correspondente a chave que assinou o arquivo.(1)

Figura 1 Processo de assinatura
A chave pblica distribuda dentro de um certificado que uma declarao assinada por uma entidade idnea, chamada Autoridade
de Certificao (Certification Authority- CA), que confirma que a chave pblica que est no mesmo confivel. Existem vrias
Autoridades de Certificao, por exemplo, a VeriSign, Thawte, Entrust e Certisign (empresa brasileira). Toda CA requer um emissor para
validar a sua identidade, at mesmo a de mais alto nvel. Para estes casos, existem os certificados auto-assinados (self -signed), onde o
emissor do certificado o prprio sujeito.
Os browsers Netscape e Internet Explorer (IE) no usam a codificao de assinatura do JDK. Existem basicamente trs tipos diferentes de
assinatura de applets, para o IE, para o Netscape, e para o plug-in Java da Sun. Este ltimo fornece aos browsers citados acima a
capacidade de utilizar applets assinados atravs da Java Security API do kit JDK.
Algumas ferramentas necessrias para a assinatura, seguindo o padro da Sun, encontram-se no JDK 1.2, so elas (7):
l Jar (JAR Creation Tool)
l Keytool (Key and Certificate Management Tool)
l Jarsigner (JAR Signing and Verification Tool)
l PolicyTool (Policy File Creation and Management Tool )
Para uma melhor compreenso, encontra-se descritos a seguir os passos utilizados no processo de assinatura e verificao do
AppletClient.
Passos para assinar um Applet
Os passos para assinar um Applet esto representados na Figura 2:
Figura 2 Diagrama de blocos do processo de assinatura por parte do desenvolvedor
Criar o arquivo JAR (2)
Deve-se criar um arquivo JAR contendo o arquivo .class da Applet e todas as classes que sero utilizadas e que faro uso de recursos fora
do sandbox conforme indicado no item 1 da Figura 2. importante ressaltar que a ferramenta jarsigner somente assinar arquivos JAR
criados pelo JDK, ou arquivos ZIP.
Uma ferramenta utilizada para cria o deste arquivo o jar do JDK. Para criar um JAR contendo o arquivo MeuApplet.class, com o nome
MeuJar.jar basta fazer:
jar cvf MeuJar.jar MeuApplet.class
Utilizou-se a opo "exportar para arquivo JAR" do Visual Age (ambiente de desenvolvimento Java da IBM) para empacotar os arquivos
necessrios.
Gerar o par de chaves (pblica e privada) (5)
Este passo deve ser executado se ainda no houver um par de chaves a ser usado no processo de assinatura (ver item 2 da Figura 2).
Para criar o par de chaves utiliza-se a ferramenta keytool do JDK cujas opes so:
Keytool -genkey {-alias alias} {-keyalg keyalg} {-keysize keysize} {-sigalg sigalg} {-dname dname} {-keypass keypass} {-validity
valDays} {-storetype storetype} {-keystore keystore} {-storepass storepass} {-v} {-Jjavaoption}
l alias Nome pelo qual as chaves sero reconhecidas e armazenadas no keystore (banco de chaves). Ex: mykey
l keyalg Algoritmo de criptografia utilizado para a criao das chaves. Este argumento opcional, se nada for especificado o
algoritmo utilizado ser o DSA (Digital Signature Algorithm). Neste projeto foi utilizada esta opo default.
l keysize Tamanho da chave que ser gerada. O algoritmo DSA suporta tamanhos de 512 a 1024 bits, sendo o tamanho
necessariamente mltiplo de 64. Para qualquer algoritmo o tamanho default 1024.
l sigalg Algoritmo de criptografia utilizado para assinar o JAR. Este argumento opcional, se nada for especificado o algoritmo
utilizado ser o DSA.
l dname Nome da entidade que gerar o par de chaves Ex:
CN=Banco do DAS, OU=LCMI, O=UFSC, L=Florianpolis, S=Santa Catarina, C=BR
Onde : CN = nome comum, OU = unidade organizacional (departamento, diviso), O = nome da organizao, L = nome da
localidade (cidade), S = estado, C = cdigo do pas.
l keypass Senha utilizada para a proteo da chave no keystore.
l validity Nmero de dias que o certificado deve ser vlido.
l storetype Permite definir a forma de armazenamento e o formato dos dados do keystore. Por default o formato JKS (tipo
propriet rio da implementao de keystore fornecido pela Sun).
l keystore keystore onde as chaves sero armazenadas. Se nada for especificado sero armazenadas no User.Home\.keystore
(em geral c:\windows\.keystore), se no existir este ser criado.
l storepass Senha protetora do keystore.
l v Mostra o certificado em forma legvel
Para a cria o das chaves empregadas neste projeto utilizou-se a seguinte linha de comando:
keytool -genkey -dname "cn=Banco do Das, ou=LCMI, o=UFSC, c=BR" -alias key -keystore u:\grupo\mykeystore -storepass 123456
validity 180
Quando as chaves so geradas (comando genkey) um certificado auto-assinado criado. Caso deseje-se trocar este certificado por um
certificado reconhecido por uma empresa confivel, deve-se fazer um pedido de certificado de assinatura (CSR CerticateSigning Request
e o resultado desta solicitao deve ser importado para o keystore.
Assinar o arquivo JAR (4)
Deve-se assinar o arquivo JAR com a chave privada, para isto utiliza-se a ferramenta jarsigner do JDK, conforme esquematizado no item
3 da Figura 2, da seguinte forma:
jarsigner [options] jar-file alias
Onde o jar-file o arquivo a ser assinado, e o alias, o nome com o qual a chave privada foi guardada no keystore. As opes s
seguintes:
jarsigner {-keystore url} {-storetype storetype} {-storepass storepass} {-keypass keypass} {-sigfile sigfile} {-signedjar signedjar} {
verbose} {-Jjavaoption}
l keystore URL do keystore onde a chave est armazenada. Se nada for especificado sero armazenadas no User.Home\.keystore
(em geral c:\windows\.keystore).
l storetype especifica o tipo do keystore que ser instanciado. O tipo default do keystore especificado pelo valor da propriedade
de "keystore.type", no arquivo de propriedades de segurana.
l storepass Senha protetora do keystore. Se no for informada, o programa perguntar antes de assinar.
l keypass Senha protetora da chave privada. Se no for informada, o programa perguntar antes de assinar.
l sigfile Especifica o nome a ser usado nos arquivos .SF (arquivo de assinatura) e .DSA (bloco de assinatura).Se nada for
especificado, o nome ser os 8 primeiros caracteres do alias especificado, se o alias tiver menos que 8, seu nome inteiro ser
colocado.
l signedjar Especifica o nome e o local de armazenamento do arquivo JAR assinado. Por default, o arquivo assinado ir
sobrescrever o no assinado.
l verbose Indica o modo verbose, que faz aparecer mais informaes na tela durante o processo de assinatura.
A linha de comando utilizada neste projeto foi:
jarsigner -keystore u:\grupo\mykeystore -storepass 123456 -signedjar asistemaBancario.jar sistemaBancario.jar key
Exportar o Certificado da chave pblica (5)
Para que se possa distribuir a chave pblica necess rio um certificado autenticando a mesma, deve-se exportar o certificado que est
no keystore usando a ferramenta keytool do JDK (ver item 4 Figura 2).
keytool -export {-alias alias} {-file cert_file} {-storetype storetype} {-keystore keystore} {-storepass storepass} {-rfc} {-v}
{Jjavaoption}
l alias Nome com o qual a chave foi guardada no keystore.
l file Local e nome com o qual o certificado ser exportado.
l storetype Especifica o tipo do keystore que ser instanciado. O tipo default do keystore especificado pelo valor da propriedade
de "keystore.type", no arquivo de propriedades de segurana.
l keystore Local do keystore onde o certificado est armazenado. Se nada for especificado sero exportadas do
User.Home\.keystore (em geral c:\windows\.keystore).
l storepass Senha protetora do keystore. Se no for informada o programa perguntar antes de exportar.
l rfc Exporta o certificado na forma definida pelo padro Internet RFC 1421. Quando exportado desta forma este come
----Begin" e termina por " ------End".
l v Indica o modo verbose, que faz aparecer mais informaes na tela enquanto exporta o certificado.
Neste projeto utilizou-se a seguinte linha de comando:
keytool -export -keystore u:\grupo\mykeystore -alias key -file keycert.x509
O certificado exportado deve ser enviado para os usurios do applet.
Criar a pgina HTML (8)
Conforme demonstrado no item 5 da Figura 2, para o Applet funcionar nos browser Netscape e IE, necess rio instalar o Plug-
fornecido pela Sun, e converter a pgina HTML para que esta informe qual JVM (J ava Virtual Machine) ser utilizada.
Para fazer a pgina com suporte a Plug-in basta utilizar a ferramenta HTMLConverter tambm fornecida pela Sun. Porm, necess
que uma pgina previamente pronta, contenha a informao de que um arquivo assinado ser utilizado. A Tag deve ser:
<applet code="Applet.class" ARCHIVE="arquivoAssinado.jar" wdth=500 height=50>
</applet>
Note que isto apenas a Tag do applet, a pgina HTML pode conter outros dados.
Se o applet for rodar no appletviewer, no preciso converter a pgina pois o plug -in s necessrio nos browsers.
Passos para verificar a assinatura
Os passos que o usurio deve seguir esto representados na Figura 3:

Figura 3 Diagrama de blocos do processo de assinatura por parte do usurio
Instalar Plug-in (8)
Para que o Applet funcione indispensvel que o usurio instale em seu browser a ultima verso do Java Plug-in, fornecido pela Sun (ver
item 1 da Figura 3).
Importar o Certificado (5)
Segundo apresentado no item 2 da Fifura 3, o usurio deve importar o certificado enviado pelo desenvolvedor do applet para um
keystore de seu disco local, utilizando a ferramenta keytool do JDK.
keytool -import {-alias alias} {-file file}
l alias nome com o qual o certificado ser importado.
l file local e nome do certificado.
Este passo pode ser facilitado pelo desenvolvedor da aplicao se este fornecer o arquivo .keystore, sendo apenas necessrio grav
user.home. Porm, se o usurio deseja ter outros certificados alm do fornecido pelo desenvolvedor, este ter que import-lo, n
esquecendo de informar que ele trusted quando a ferramenta keytool perguntar.
Configurar o Arquivo Policy
Como ltimo passo (ver item 3 Figura 3), tem-se a configurao do arquivo de poltica no disco local do usurio da aplicao. Este
arquivo informa quais permisses sero atribudas para as aplicaes especificadas. O arquivo policy, pode ser escrito em um arquivo de
texto normal, pode ser gerado utilizando a ferramenta policytool do JDK1.2.x., ou ainda pode ser fornecido pelo desenvolvedor da
aplicao.
Quando fornecido pelo desenvolvedor, o arquivo policy conter apenas as permisses da aplicao e dever ser gravado no
user.home\.java.policy. Caso o usurio deseje definir permisses para outras aplicaes, este dever configur-las no seu arquivo
Neste trabalho utilizou-se a ferramenta policytool, onde o desenvolvedor definiu as permisses necessria para o AppletClient se conectar
ao Servi o de Nomes e ao Servidor Bancrio e forneceu o arquivo policy gerado ao usurio da aplicao.
Utilizando a Ferramenta policytool (6)
A Figura 4 apresenta a tela inicial do policytool, se estiver sendo usado pela primeira vez, este avisar que nenhum arquivo de pol
encontrado.

Figura 4 Tela inicial do aplicativo Policytool
Para o usurio criar um novo arquivo, este deve ir no menu File e selecionar New, ou se quiser modificar um arquivo j existente, deve
selecionar Open (no mesmo menu) e ento escolher o arquivo.
Em seguida deve-se indicar qual keystore ser usado. Selecionando o comando Change Keystore no menu Edit, a tela apresentada na
Figura 5 solicitar a URL do local onde keystore est armazenado, por exemplo, file:/c:/windows/.keystore, e o tipo de arquivo deste
keystore (no sendo necessrio preencher, se o tipo for JKS-formato padro da Sun). Terminada a operao pressiona-se o bot

Figura 5 Tela de modificao do keystore do aplicativo Policytool
Para adicionar as permisses que possibilitar ao Applet sair do sandbox, pressiona-se o boto Add Policy Entry (Figura 4). Surge ent
uma nova tela (ver Figura 6), solicitando o preenchimento do CodeBase com a URL do arquivo JAR assinado, se vrios arquivos de uma
pasta forem usados pode-se colocar um * ao invs do nome do arquivo JAR. E, o campo do SignedBy deve ser preenchido com o alias
do certificado da chave que assinou o arquivo.
Figura 6 - Tela do aplicativo Policytool de apresenta o das permisses concedidas ao applet
Feitas estas operaes, deve-se adicionar a permisso para o applet, pressionado o boto Add Permision da Figura 6. A tela da Figura 7
aparecer, para que se escolha a permisso que ser dada. Suponhamos que o Applet tenha que abrir uma conexo (Socket) com outra
mquina, a permisso ento ser java.net.SocketPermission. No Target name pode-se permitir fazer um socket com qualquer outra
mquina colocando um * ou especificar uma mquina. Em Actions deve-se escolher quais a es deseja-se permitir (connect, accept,
resolve, listen).

Figura 7 - Tela para adicionar permisso do aplicativo Policytool
Ao terminar pressiona-se o boto OK, depois Done (ver Figura 6), e salva-se o arquivo selecionando o menu File e depois Save
Figura 4).
Note que o Browser procurar pelo arquivo user.home\.java.policy para verificar as permisses de uma aplicao. Portanto, se o usu
do applet deseja que o arquivo policy criado seja utilizado, deve grav-lo neste local.
Concluses e Resultados
A implementao utilizando o plug-in Java da Sun demonstrou-se muito til, pois pode ser utilizado nos browsers mais conhecidos,
Netscape e Internet Explorer (IE) , ao passo que sem o plug-in, as assinaturas utilizando o Netscape ou Internet Explorer, por n
usarem a codificao de assinatura do JDK, no so compatveis resultando no no funcionamento do applet em ambos os browsers
Em contrapartida, para que o processo seja concludo com sucesso, o usurio deve estar ciente que deve utilizar um arquivo policy
tambm possuir um keystore o que implica ter conhecimento sobre as ferramentas policytool, e keytool se desejar permitir acesso fora
do sandbox para applets diferentes.
Demonstrado que esta forma de implementao de assinatura apresenta os resultados desejados, possibilitando todos os acessos
necessrios fora do sandbox.
Bibliografia
(1) OAKS, Scott, Segurana de dados em JAVA, Editora Ci ncia Moderna Ltda, Rio de Janeiro, 1999.
(2) Sun Microsystems Inc., JAR Guide. Sun Microsystems Inc. Moutain View, CA.
(http://java.sun.com/products/jdk/1.2/docs/guide/jar/jarGuide.html)
(3) Sun Microsystems Inc., jarsigner JAR Signing and Verification Tool. Sun Microsystems Inc. Moutain View, CA, October 1998.
(http://java.sun.com/products/jdk/1.2/docs/tooldocs/win32/jarsigner.html
(4) Sun Microsystems Inc., Java Security Architecture (JDK1.2) Version 1.0. Sun Microsystems Inc. Moutain View, CA, October 1998.
(http://java.sun.com/products/jdk/1.2/docs/guide/security/spec/security-spec.doc.html )
(5) Sun Microsystems Inc., keytool - Key and Certificate Management Tool. Sun Microsystems Inc. Moutain View, CA, October 1998.
(http://java.sun.com/products/jdk/1.2/docs/tooldocs/win32/keytool.html )
(6) Sun Microsystems Inc.,Policy Tool - Policy File Creation and Management Tool. Sun Microsystems Inc. Moutain View, CA, October
1998.
Http://java.sun.com/products/jdk/1.2/docs/tooldocs/win32/policytool.html
(7) Sun Microsystems Inc., Summary of JDK 1.2 Security Tools. Sun Microsystems Inc. Moutain View, CA, October 1998.
(http://java.sun.com/products/jdk/1.2/docs/guide/security/SecurityToolsSummary.html)
(8) Sun Microsystems Inc., JDK 1.2 - Signed Applet Example. Sun Microsystems Inc. Moutain View, CA, February 1999.
(http://java.sun.com/security/signExample12)

Potrebbero piacerti anche