Escolar Documentos
Profissional Documentos
Cultura Documentos
OBJETOS - JAVA
MARINGÁ
2008
MICHAEL LUIZ PEREIRA
FERNANDO MORO
MARINGÁ
2008
DETICATÓRIA
trabalho.
AGRADECIMENTOS
incentivo.
competência.
realizar.
Albert Einstein
RESUMO
gerentes de TI, e um numero maior de empresas passam a dedicar cada vez mais
construção (IBM, 2008). Desta forma, Web Services estão em destaque no mundo
plataforma, como HTTP e XML. Porem, por possuir uma infra-estrutura publica
a higher number of companies now have to devote more resources to the SOA. If the
SOA is the architecture, Web Services are the building blocks of (IBM, 2008). Thus,
that solves the problems of interoperability of systems, it uses open standards and
publishes offers, too, a greater concern with regard to security. In this study aims to
demonstrate the safe operation of Web Services using Java technology addressing
implemented Web Services, with the aid of frameworks such as Apache Axis and
CXF, using industry standard protocols used by industry for demonstrating the WS-
Security specification.
Figura 1 - Mensagens trocadas na invocação de um Web Service. Fonte: ROSENBERG, 2004 ......... 9
Figura 2 - Esqueleto mensagem SOAP. Fonte: XYZWS, 2008............................................................ 12
Figura 3 - Exemplo WSDL. Fonte: XYZWS, 2008 ................................................................................ 15
Figura 4 - UDDI em uma arquitetura orientada a serviços. Fonte: ROSENBERG, 2004 ..................... 17
Figura 5 - Lista dos jars do projeto Terceiro ......................................................................................... 29
Figura 6 - Classe Servidor projeto Server............................................................................................. 30
Figura 7 - WSDL do serviço .................................................................................................................. 31
Figura 8 - Classe Cliente projeto Client com o retorno da execução.................................................... 32
Figura 9 - Plugin do Eclipse gerar stub Axis ......................................................................................... 33
Figura 10 - Classe Terceiro do projeto utilizando framework Axis........................................................ 33
Figura 11 - Classe ServerCallbackHandler projeto Server .................................................................. 36
Figura 12 - Classe UsernameTokenInterceptor .................................................................................... 37
Figura 13 - Alterações na classe Servidor ............................................................................................ 37
Figura 14 - Implementação CallbackHandler no projeto Client ............................................................ 38
Figura 15 - Alterações para autenticação na classe Cliente................................................................. 39
Figura 16 - Arquivo wsdd responsável pelas configurações no Axis.................................................... 39
Figura 17 - Alterações para autenticação na classe Terceiro............................................................... 40
Figura 18 - Soap request e resultado da chamada Web Service com autenticação............................ 41
Figura 19 - Processo de criptografia simétrico. Fonte: ROSENBERG, 2004 ....................................... 42
Figura 20 - Processo de criptografia assimétrico. Fonte: ROSENBERG, 2004 ................................... 43
Figura 21 - Gerar par de chaves pelo Keytool ...................................................................................... 44
Figura 22 - Arquivo wsdd alterado para criptografar a mensagem....................................................... 47
Figura 23 - Soap request e resultado da chamada Web Service com criptografia .............................. 47
Figura 24 - Processo de assinatura digital. Fonte: ROSENBERG, 2004 ............................................. 48
Figura 25 - Processo de verificação da assinatura digital. Fonte: ROSENBERG, 2004 ...................... 49
Figura 26 - Arquivo wsdd alterado para assinar digitalmente a mensagem......................................... 50
Figura 27 - Parte da mensagem SOAP utilizando o processo de assinatura digital ............................ 51
SUMÁRIO
1. INTRODUÇÃO .................................................................................................................................... 1
1.1 Contexto do Trabalho.............................................................................................................. 1
1.2 Justificativa.............................................................................................................................. 2
1.3 Objetivo ................................................................................................................................... 3
1.4 Organização do trabalho......................................................................................................... 4
2. FUNDAMENTAÇÃO TEÓRICA........................................................................................................... 5
2.1 Arquitetura Orientada a Serviços (SOA)................................................................................. 5
2.2 Web Services .......................................................................................................................... 7
2.3 XML ......................................................................................................................................... 9
2.4 SOAP .................................................................................................................................... 10
2.5 WSDL .................................................................................................................................... 13
2.6 UDDI...................................................................................................................................... 16
2.7 Frameworks .......................................................................................................................... 17
2.7.1 Apache Axis ....................................................................................................................... 18
2.7.2 Apache CXF....................................................................................................................... 19
2.8 Segurança em Web Services ............................................................................................... 20
2.8.1 Análise das Ameaças Versus Mecanismos de Segurança ............................................... 21
2.9 WS-Security .......................................................................................................................... 22
2.9.1 XML Encryption.................................................................................................................. 23
2.9.2 XML Signature ................................................................................................................... 24
2.9.3 SAML ................................................................................................................................. 24
3. ESTUDO DE CASO .......................................................................................................................... 26
3.1 Visão Geral ........................................................................................................................... 26
3.2 Pré-requisitos ........................................................................................................................ 28
3.3 Implementando os Web Services ......................................................................................... 30
3.4 Autenticação ......................................................................................................................... 34
3.5 Criptografia............................................................................................................................ 41
3.6 Assinatura Digital .................................................................................................................. 48
4. CONCLUSÃO.................................................................................................................................... 52
REFERÊNCIAS BIBLIOGRÁFICAS...................................................................................................... 54
1. INTRODUÇÃO
Internet. Quando a Internet começou a se popularizar, por volta do meio dos anos
deste. O HTML (Hiper Text Markup Language) era a linguagem que permitia a
Baseado nesse contexto surge a tecnologia Web Services (W3C, 2008), que
tem por objetivo integrar sistemas distintos e prover serviços através da Internet
1
1.2 Justificativa
flexibilidade.
múltiplas aplicações e modelos de uso. De acordo com recente análise da IDC (IDC,
informação. Desta maneira, estes dados muitas vezes devem ser disponibilizados de
forma segura, para que as partes tenham garantia que tais informações somente
vezes utilizando-se da Internet. A web que sempre teve em sua ponta final o usuário,
passa a ter uma aplicação realizando o papel de cliente . Tornando-se não mais uma
grande rede e sim uma plataforma, não mais oferecendo somente informação mais
também serviços.
uma vez que, o elo seguro está presente na própria mensagem, transportada de um
2
ponto a outro, e não mais numa simples aplicação que troca mensagens com seu
usuário final.
1.3 Objetivo
heterogêneos.
3
Por fim, será aplicada a especificação WS-Security (IBM, 2002) em um
Axis (AXIS, 2008) e CXF (CXF, 2008), que auxiliam e facilitam no desenvolvimento.
etc;
código fonte;
4
2. FUNDAMENTAÇÃO TEÓRICA
Neste capítulo será feita uma abordagem dos assuntos e de tecnologias referentes
ao objetivo deste trabalho, como Web Services, SOAP, frameworks existentes, WS-
Security e etc;
SCHULTE & NATIS (1996), então analistas do Gartner. Eles definiram SOA como
um ambiente de TI. Ela prove a flexibilidade para tratar processos de negócios bem
5
Coloque como cenário um ambiente baseado em uma arquitetura de
software modular, onde todos os aplicativos são acessados por uma única interface
serviço) oferece o meio para fornecer eletricidade para suportar o uso por um
(interface de serviço).
voltagem ofertada e à carga suportada ; e o consumidor por sua vez, assume que os
técnicas do serviço).
espera que o consumidor pague pela energia conforme taxa prevista (política de
serviço).
(BIEBERSTEIN, 2006).
implementações de SOA que estavam surgindo. Isto era fundamental para garantir a
partir de outros aplicativos. São ‘páginas web’ para outros computadores e não para
8
Figura 1 - Mensagens trocadas na invocação de um Web Service. Fonte: ROSENBERG, 2004
2.3 XML
9
XML é um padrão da indústria de informática que tem como maior objetivo
uma forma mais abrangente que arquivos texto, já que podemos dar semântica aos
dados que estão sendo manipulados. Da mesma forma que HTML (Hyper Text
existem várias diferenças entre esses dois padrões. Enquanto HTML especifica
como os dados devem ser exibidos, XML se preocupa com o significado dos dados
armazenados.
marcação em si. XML foi projetado para descrever dados. Tags XML não são
predefinidas no XML. Você deve definir as suas próprias tags. XML usa um DTD
(Document Type Definition) ou XML schema para descrever os dados. DTD ou XML
tecnologias recomendadas pelo WS-I Basic Profile 1.0 são constituídas sobre XML e
2.4 SOAP
está sendo usado no lado do servidor ou no lado do cliente, este se comunica com
10
os sistemas usando o protocolo XML baseado em texto, em vez de um formato
binário usado pelos outros protocolos, isto o torna altamente interoperável por meio
que consite em três partes: um envelope que define um determinado domínio para
como, SMTP, FTP e HTTP. Porem, o WS-I Basic Profile 1.0 recomenda o uso de
de ser mais simples quando comparado a outros protocolos como RMI, CORBA, and
DCOM.
ao servidor;
11
• Fault: Contém as informações dos erros ocorridos no envio da
do servidor.
seguinte esqueleto:
somente dos seus receptores e necessita ser segura. O serviço remoto precisa
conhecer quem está requisitando seu serviço e se está autorizado. Muitos pacotes
(ROSENBERG, 2004).
12
2.5 WSDL
Para invocar um contrato (ou seja, função) fornecido por um Web Service,
que são usados para comunicação, de qualquer forma, as únicas ligações descritas
uma das tecnologias que podem interpretar um documento WSDL para gerar
XML, fornecendo uma documentação do serviço para que possíveis clientes possam
13
utilizá-lo de forma automatizada. A WSDL apresenta a definição de um Web Service
WSDL foi projetada de modo que ela possa expressar associações com
qualquer das suas funções disponíveis publicamente. Com ferramentas para WSDL,
integrem novos serviços, com pouco ou nenhum código manual. WSDL, portanto,
automaticamente.
disponiveis;
Service(QoS).
14
Figura 3 - Exemplo WSDL. Fonte: XYZWS, 2008
15
2.6 UDDI
projetado para fornecer um diretório de busca para os negócios e seus serviços. Ele
conhecidos.
16
Figura 4 - UDDI em uma arquitetura orientada a serviços. Fonte: ROSENBERG, 2004
2.7 Frameworks
17
2.7.1 Apache Axis
System) como:
versão atual do AXIS é escrita em Java, mas uma implementação em C++ no lado
SOAP, ele inclui também suporte extensivo para WSDL, possui ferramentas que
geram classes Java de um WSDL e uma ferramenta para monitorar pacotes TCP/IP.
da plataforma.
Java para XML. Outras dignas de notas são as abstrações no uso de protocolo
18
SOAP e a compatibilidade com WSDL. Alem disso, por oferecer componentes da
toda a pilha WS-*, podemos utilizá-lo em um container web leve como Apache
completo.
através de web services. O modo mais simples utiliza os arquivos JWS (Java Web
Deployment Descriptor), que descreve com detalhes como serão criados os web
Web Services e Celtix, framework para Enterprise Service Bus (ESB) e se torna hoje
para Web Services. Ele também simplifica a construção, integração e reuso flexível
serviços.
Geronimo.
HTTP, SOAP sobre JMS, XML sobre HTTP e XML sobre JMS. CXF prove uma
arquitetura plugavel que suporta tanto a ligação de tipos XML como não-XML,
combinando com qualquer tipo de transporte. Essa ampla range de combinação cria
esse framework.
uma mensagem antes que ela seja processada. Como solução é implementada a
utilizando o HTTP com o SSL (Secure Socket Layer) ou as VPNs (Virtual Private
com isso passam facilmente pelo firewall situado entre a rede interna de uma
bloqueia qualquer tráfego que não esteja autorizado, mas a porta 80 usualmente é
deixada com pouca proteção. Enquanto a CORBA e a Java RMI são utilizadas em
outras portas e têm o seu acesso dificultado, os Web Services têm a vantagem de
passar livremente pelo firewall, mas isto também pode se configurar em uma
segurança.
procuram combater.
Tipo de
Ameaças e Ataques Mecanismos de Segurança
Segurança
Autenticação Autenticação de usuários através de
Acesso não autorizado
Não repúdio certificados digitais.
Manipulação de Privacidade Utilização de criptografia e
parâmetros Integridade assinaturas digitais nas mensagens.
Utilização da criptografia nas
Espionagem na rede Privacidade
camadas de transporte e aplicação.
21
Autorizar acessos controlados aos
Divulgação dos dados de arquivos WSDL (configuração) e
Autorização
configuração tomar cuidados com o tratamento de
exceções do serviço Web.
Utilização de criptografia e
assinaturas digitais nas mensagens,
Privacidade
Repetição de mensagem além de utilizar uma identificação
Integridade
única de mensagens para evitar
duplicação.
Fonte: (WATHIER, 2005)
2.9 WS-Security
Security foi publicada, como Web Services Security: SOAP Message Security 1.0,
certificadas” (IBM, 2002). Essa especificação define como usar encriptação XML e
22
assinatura XML no SOAP para tornar segura a troca de mensagens, como uma
dados evitando que terceiros vejam seu conteúdo. A segurança é realizada ponto a
Secure Socket Layer (SSL). XML Encryption não pretende substituir SSL/TSL, mas
prover um mecanismo para requisitos de segurança que não é coberto pelo SSL
como:
não com qualquer das partes comunicantes. Ambos dados seguros ou não podem
Para mensagens XML, essa sintaxe foi complementada para uso em mensagens
23
2.9.2 XML Signature
objetivo de dar ao receptor a certeza de que um texto foi criado por determinada
entidade e que não foi alterado. O processo consiste em obter o resumo do texto
chave privada do assinante. O receptor deve calcular o resumo do texto pela mesma
assinante é obtida se os dois resumos forem iguais. Isso se não houver nenhum
XML sejam assinados de uma forma padrão, com uma variedade de algoritmos de
2.9.3 SAML
SAML está sendo desenvolvido para fornecer uma linguagem comum para
(AMORIM, 2004).
25
3. ESTUDO DE CASO
Security.
solução tão versátil mas que ao mesmo tempo fica exposta na web? Foi pensando
nisso que o W3C criou padrões a mais de segurança para os Web Services, o WS-
futuros recurso. Dai o cabeçalho da mensagem, que foi visto anteriormente. Neste
comunicação.
A questão é que o formato que for utilizado pelo cliente precisa ser
segurança.
não importa em nada. Cabe a cada fabricante criar simplificações, toolkits, para que
concatenação de texto.
• XML Security
• XML Signature
27
• XML Encryption
• Tokens
• Username Tokens
• Timestamps
• SAML Tokens
(WSS4J, 2008).
3.2 Pré-requisitos
(Java 2 Enterprise Edition), utilizando o JDK (Java Development Kit) 1.5.0.15. Para
juntamente com o browser Mozilla Firefox 3.0.3. A versão do framework CXF é 2.1.1
Como primeiro passo são criados três projetos Java, através da opção File
criado na raiz do mesmo uma pasta chamada lib, no qual é destinada a receber as
bibliotecas dos frameworks utilizados. Todos os jars da pasta devem ser adicionados
clientes Web Services, também conhecidos como Web Services consumidor. Ele
no framework Axis. A IDE Eclipse fornece os jars necessários para o Axis na própria
29
3.3 Implementando os Web Services
serviço.
30
Figura 7 - WSDL do serviço
Uma vez que o serviço esta ativo e tem-se o wsdl, é possível a geração de
Stub no projeto Client. "Um Stub é um Proxy para o serviço, uma classe utilizada
diretamente pelo cliente como se fosse o serviço, mas que encapsula o real acesso
Para isso é utilizado o utilitário wsdl2java que vem com o CXF. Sua
wsdl].
31
Após a execução, basta atualizar o projeto Client e as classes geradas
podem ser visualizadas no diretório src do projeto. Uma classe Cliente é criada e no
seu método main é utilizado os stubs gerados e como saída o retorno do método
o Web Service. O Eclipse já traz um plugin que ajuda bastante na criação dos stubs
para o Axis. Basta clicar com o botão direito no projeto e escolher as opções New >
Other... > Web Service client. Uma janela com o campo para colocar o endereço
wsdl e algumas opções para geração são mostrados e quando clicado em Finish o
32
Figura 9 - Plugin do Eclipse gerar stub Axis
getMensagem:
produção e cada parte estivesse em redes distintas e não protegidas, uma ação de
3.4 Autenticação
identificador. Para o caso de Web Services, o cliente vai inserir essas informações
34
em um elemento UsernameToken, sendo nesse caso simples de envio definido na
especificação.
servidor ficar tratando varias exceções onde cada desenvolvedor tem sua maneira
claro, uma vez que o texto esta numa mensagem SOAP e monitorar e inteceptar
como função de Hash para criação de password digest. O que acaba escondendo a
senha mas não elimina a possibilidade em que uma mensagem possa ser
reutilizada.
nonce(Number Used Once), que é uma informação gerada aleatoriamente para ser
nonce já foi utilizado é feita no servidor que recebe as requisições. Então isso pode
causar um outro tipo de problema, caso o numero de pedidos for grande e o servidor
problema. O uso de timestamp faz com que o servidor possa descartar o nonce com
Para realizar esse tipo de segurança o CXF utiliza interceptor que são
action = UsernameToken
passwordType = PasswordDigest
passwordCallbackClass = br.cesumar.ServerCallbackHandler
seguir:
36
Figura 12 - Classe UsernameTokenInterceptor
37
Após reiniciar o servidor, os projetos Client e Terceiro não mais
action = UsernameToken
user = client_cxf
passwordType = PasswordDigest
passwordCallbackClass = br.cesumar.test.ClienteCallbackHandler
senha:
38
Figura 15 - Alterações para autenticação na classe Cliente
de propriedades do CXF.
39
Perceba que também é utilizado um callbackHandler, e a mesma classe
passwordCallback.setPassword("senha_user_axis");
resposta para cada tipo de cliente se quiser. Ou até mesmo bloquear determinado
configuração, como troca de usuário ou senha, fará com que a tentativa não retorne
40
Figura 18 - Soap request e resultado da chamada Web Service com autenticação
3.5 Criptografia
41
Os tipos de criptografia com base em algoritmos são basicamente
assimétricas.
mensagem com esta chave, conhecida apenas por ele e por seu destinatário, e
(ROSENBERG, 2004).
usada para descriptografar. Um receptor que deseja receber uma mensagem divulga
a chave usada para criptografar, conhecida como chave pública, e guarda para si a
processo vem da inviabilidade de se obter uma delas com base na outra. Assim,
qualquer um pode usar a chave pública para enviar o texto, mas somente aquele
42
criptografia assimétrica é a complexidade computacional que torna o processo de
O argumento genkey é utilizado para informar que deve ser gerado o par
43
com o nome serverkeystore.jks, que é o repositório onde está o par de chaves
gerado e o certificado.
processo que foi usado para o Server, mudando os parâmetros alias e keystore e
44
Os comandos geram três arquivos com o certificado de cada keystore.
Estes arquivos devem ser importados para o repositório do serviço que irá
comunicar.
repositório especificado no argumento keystore, que por sua vez informa qual o
importado.
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.M
erlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=senhajks
org.apache.ws.security.crypto.merlin.keystore.alias=server
org.apache.ws.security.crypto.merlin.file=serverkeystore.jks
45
Como não foi indicado um callback handler específico para obter a senha
senhas.put("server", "senhajks");
alterações.
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.M
erlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=senhajks
org.apache.ws.security.crypto.merlin.keystore.alias=server
org.apache.ws.security.crypto.merlin.file=clientCXFkeystore.jks
org.apache.ws.security.crypto.merlin.file=clientAxiskeystore.jks
46
E seguida modifique o arquivo wssd para que fique com as novas
configurações:
processo de cifragem.
que pessoas retifiquem sua palavra eletrônica. Uma maneira de implementar esses
emissor para decodificar a assinatura digital. Se esse processo for realizado com
emissor decodificou a assinatura digital, significa que foi codificada com uma chave
privada correspondente que somente o emissor possui. Depois que esse primeiro
mensagem original. Se forem iguais, significa que a mensagem não foi alterada. A
figura abaixo ilustra como essas validações são realizadas (ROSEMBERG, 2004).
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.M
erlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
49
org.apache.ws.security.crypto.merlin.keystore.password=senhajks
org.apache.ws.security.crypto.merlin.file=serverkeystore.jks
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.M
erlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=senhajks
org.apache.ws.security.crypto.merlin.keystore.alias=client_cxf
org.apache.ws.security.crypto.merlin.file=clientCXFkeystore.jks
50
Copia-se o arquivo signature.properties do projeto Cliente colocando as
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.M
erlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=senhajks
org.apache.ws.security.crypto.merlin.keystore.alias=client_axis
org.apache.ws.security.crypto.merlin.file=clientAxiskeystore.jks
estudo de caso.
51
4. CONCLUSÃO
distribuídas, inclusive aplicações legadas. Muitas vezes, esse tipo de solução utiliza-
surge uma maior preocupação quanto a segurança, uma vez que, esses serviços
protegidas.
existentes como autenticação, criptografia, etc., agregando uma camada segura aos
são fatores que devem ser vistos mas que em determinadas soluções, outros níveis
soluções para cada tipo de necessidade, como é o caso da Apache Foundation que
mensagem enviada pelo seu emitente. Toda a implementação foi feita com base no
padrão WS-Security, para facilitar a integração com outros sistemas e que pode ser
52
O tema pesquisado aborda tecnologias recentes, como Web Services,
por um modelo que utiliza classes é possível e pode ser feita pesquisando mais a
fonte mais enxuto e facilitando sua manutenção. Grande parte disso deve-se a
de forma segura. Inclusive o governo tem contribuído para isso, através da sua infra-
País.
53
REFERÊNCIAS BIBLIOGRÁFICAS
BOARO, Marcio. Web Services: Uma visão Inicial. MSDN Brasil. Disponível em:
http://www.microsoft.com/brasil/msdn/colunas/webservices/col_webservices_1.aspx.
Acesso em: novembro 2008.
FELIPE, Pedro. Tecnologias Web. Apache CXF. Abril, 2008. Disponível em:
http://pedrofao.blogspot.com/2008/04/apache-cxf.html. Acesso em: novembro 2008.
IDC, Analyze the Future. Worldwide Web Security 2007-2011 Forecast and 2006
Vendor Shares, (Excerpt from IDC #210034). Dezembro, 2007.
JAVA MAGAZINE. Web services com WS-*: Programando um sistema de leilão, com
Axis e WTP. Grajaú: Editora DevMedia, edição 55, ano VII, 2008. 24 p.
54
KREGER, Heather. Ibm Conceptual Architecture (WSCA 1.0). IBM Software Group.
Maio, 2001.
W3C, World Wide Web Consortium, Web Services Activity, Disponível em:
http://www.w3.org/2002/ws/. Acesso em: junho de 2008.
W3C, Web Services Description Language (WSDL) 1.1, W3C Note, 15 Março 2001.
Disponível em: http://www.w3.org/TR/wsdl. Acesso em: junho de 2008.
55