Este documento describe cómo implementar la seguridad en servicios web mediante WS-Security y la biblioteca WSS4J. Explica conceptos como autenticación, autorización, confidencialidad e integridad, y cómo WSS4J los implementa agregando bloques de seguridad al encabezado SOAP. Luego presenta un ejemplo práctico donde se configura un servicio web primero sin seguridad y luego se añade autenticación mediante username y password, y más adelante firma digital y encriptación de mensajes.
1. WEB SERVICES SECURITY.
EJEMPLO CON WSS4J
Victor Esteban Burgos
Ana Aguilar
1
martes 10 de enero de 12
2. Introducción
Definición
WS-‐Security
is
a
building
block
that
can
be
used
in
conjunc7on
with
other
Web
service
extensions
and
higher-‐level
applica7on-‐specific
protocols
to
accommodate
a
wide
variety
of
security
models
and
encryp7on
technologies.
The
4
main
concerns
of
a
security
framework
are:
authen7ca7on,
authoriza7on,
confiden7ality
and
integrity.
2
martes 10 de enero de 12
3. Objetivos
Auten+cación
(Iden+dad)
Comprobar
que
los
usuarios
son
quien
dicen
ser
Autorización
(Control
de
acceso)
Cómo
permi+r
acceso
solo
a
los
usuarios
deseados
Confidencialidad
(Encriptación)
Cómo
proteger
la
información
ante
usuarios
no
autorizados
Integridad
(Tamper
proffing)
Cómo
evitar
que
la
información
sea
modificada
durante
el
envío
3
martes 10 de enero de 12
4. Motivación
Especificación
de
OASIS
(versión
1.0)
La
información
de
seguridad
se
incluye
dentro
del
texto
XML
Trabajar
con
la
estructura
y
modelo
de
procesado
de
mensaje
de
SOAP
Propagación
de
security
tokens
Amenazas:
Mensaje
escrito
o
leído
por
intrusos
Intrusos
mandan
mensajes
al
servicio
web
4
martes 10 de enero de 12
5. Características
Claim:
declaración
del
cliente
(nombre,
iden+dad..)
Proof-‐of-‐possession:
protocolo
de
auten+cación
Digest:
función
hash
(checksum)
Signature:
binding
criptográfico
de
un
proof-‐of-‐possession
y
un
digest
Security
token:
conjunto
de
claims
Integrity:
XML
signature
+
security
tokens
Confiden<ality:
XML
encryp+on
+
security
tokens
5
martes 10 de enero de 12
6. Requisitos
Múl+ples
formatos
de
token
de
seguridad
Unsigned
Security
Tokens
Signed
Security
Tokens
Múl+ples
dominios
de
confianza
Múl+ples
formatos
de
firma
Múl+ples
tecnologías
de
encriptación
Seguridad
punto
a
punto
a
nivel
de
mensaje
6
martes 10 de enero de 12
7. Security Header Block
Mecanismo
para
aportar
seguridad
a
la
información
Indica
los
pasos
(encriptación)
que
el
emisor
siguió
para
crear
el
mensaje
Receptor
final
o
intermediario
Información
de
seguridad
definida
para
varios
receptores
debe
aparecer
en
varios
security
header
blocks
7
martes 10 de enero de 12
8. Security Header Block
/Security
Cabecera
del
bloque
para
enviar
la
información
de
seguridad
el
receptor
/Security/@S:actor
Atributo
que
permite
iden+ficar
al
actor
SOAP
determinado
/Security/{any}
Extensión
que
permite
añadir
diferentes
+pos
de
seguridad
/Security/@{any}
Extensión
que
permite
añadir
atributos
adicionales
a
la
cabecera
8
martes 10 de enero de 12
9. Security Header Block
Ejemplo:
UsernameToken
Element
/UsernameToken
Elemento
usado
para
enviar
información
de
auten+cación
/UsernameTaken/@Id
E+queta
para
este
security
token
/UsernameToken/Username
Elemento
que
especifica
el
username
del
usuario
/UsernameToken/Username
Elemento
que
especifica
la
contraseña.
Se
recomienda
enviarlo
cuando
se
esté
usando
un
medio
seguro
9
martes 10 de enero de 12
10. Security Header Block
Incluir
el
UsernameToken
Element
dentro
de
la
cabecera:
10
martes 10 de enero de 12
22. Ejemplo WSS4J - Creacción del servicio sin seguridad
13
martes 10 de enero de 12
23. Ejemplo WSS4J - Creacción del servicio sin seguridad
Creacción del servicio
Descriptor de despliegue
Ejecución del cliente
13
martes 10 de enero de 12
24. Ejemplo WSS4J - Creacción del servicio sin seguridad
Creacción del servicio
Descriptor de despliegue
Ejecución del cliente
13
martes 10 de enero de 12
25. Ejemplo WSS4J - Creacción del servicio sin seguridad
Creacción del servicio
Descriptor de despliegue
Ejecución del cliente
13
martes 10 de enero de 12
26. Ejemplo WSS4J - Creacción del servicio sin seguridad
Creacción del servicio
Descriptor de despliegue
Ejecución del cliente
13
martes 10 de enero de 12
27. Ejemplo WSS4J - Creacción del servicio sin seguridad
Creacción del servicio
Descriptor de despliegue
Ejecución del cliente
13
martes 10 de enero de 12
28. Ejemplo WSS4J - Creacción del servicio sin seguridad
Creacción del servicio
Descriptor de despliegue
Ejecución del cliente
13
martes 10 de enero de 12
29. Ejemplo WSS4J - Creacción del servicio sin seguridad
14
martes 10 de enero de 12
30. Ejemplo WSS4J - Creacción del servicio sin seguridad
14
martes 10 de enero de 12
31. Ejemplo WSS4J - Creacción del servicio sin seguridad
14
martes 10 de enero de 12
32. Ejemplo WSS4J - Añadir Seguridad: Autenticacion
Configurar el servicio
15
martes 10 de enero de 12
33. Ejemplo WSS4J - Añadir Seguridad: Autenticacion
Configurar el servicio
15
martes 10 de enero de 12
34. Ejemplo WSS4J - Añadir Seguridad: Autenticacion
Configurar el servicio
15
martes 10 de enero de 12
35. Ejemplo WSS4J - Añadir Seguridad: Autenticacion
Configurar el servicio
15
martes 10 de enero de 12
36. Ejemplo WSS4J - Añadir Seguridad: Autenticacion
16
martes 10 de enero de 12
37. Ejemplo WSS4J - Añadir Seguridad: Autenticacion
Configurar el cliente
16
martes 10 de enero de 12
38. Ejemplo WSS4J - Añadir Seguridad: Autenticacion
Configurar el cliente
16
martes 10 de enero de 12
39. Ejemplo WSS4J - Añadir Seguridad: Autenticacion
Configurar el cliente
16
martes 10 de enero de 12
40. Ejemplo WSS4J - Añadir Seguridad: Autenticacion
17
martes 10 de enero de 12
41. Ejemplo WSS4J - Añadir Seguridad: Autenticacion
17
martes 10 de enero de 12
42. Ejemplo WSS4J - Añadir Seguridad: Autenticacion
17
martes 10 de enero de 12
43. Ejemplo WSS4J - Añadir Seguridad: firma y encriptado
18
martes 10 de enero de 12
44. Ejemplo WSS4J - Añadir Seguridad: firma y encriptado
Generar almacén de claves
Creacción crypto.properties
Modificar descriptor del servicio
Modificar descriptor del cliente
18
martes 10 de enero de 12
45. Ejemplo WSS4J - Añadir Seguridad: firma y encriptado
Generar almacén de claves
Creacción crypto.properties
Modificar descriptor del servicio
Modificar descriptor del cliente
18
martes 10 de enero de 12
46. Ejemplo WSS4J - Añadir Seguridad: firma y encriptado
Generar almacén de claves
Creacción crypto.properties
Modificar descriptor del servicio
Modificar descriptor del cliente
18
martes 10 de enero de 12
47. Ejemplo WSS4J - Añadir Seguridad: firma y encriptado
Generar almacén de claves
Creacción crypto.properties
Modificar descriptor del servicio
Modificar descriptor del cliente
18
martes 10 de enero de 12
48. Ejemplo WSS4J - Añadir Seguridad: firma y encriptado
Generar almacén de claves
Creacción crypto.properties
Modificar descriptor del servicio
Modificar descriptor del cliente
18
martes 10 de enero de 12
49. Ejemplo WSS4J - Añadir Seguridad: firma y encriptado
Generar almacén de claves
Creacción crypto.properties
Modificar descriptor del servicio
Modificar descriptor del cliente
18
martes 10 de enero de 12
50. Ejemplo WSS4J - Añadir Seguridad: firma y encriptado
Generar almacén de claves
Creacción crypto.properties
Modificar descriptor del servicio
Modificar descriptor del cliente
18
martes 10 de enero de 12
51. Ejemplo WSS4J - Añadir Seguridad: firma y encriptado
Generar almacén de claves
Creacción crypto.properties
Modificar descriptor del servicio
Modificar descriptor del cliente
18
martes 10 de enero de 12
52. Ejemplo WSS4J - Añadir Seguridad: firma y encriptado
19
martes 10 de enero de 12
53. Ejemplo WSS4J - Añadir Seguridad: firma y encriptado
19
martes 10 de enero de 12
54. Ejemplo WSS4J - Añadir Seguridad: firma y encriptado
19
martes 10 de enero de 12
55. Ejemplo WSS4J - Añadir Seguridad: firma y encriptado
19
martes 10 de enero de 12
56. Ejemplo WSS4J - Añadir Seguridad: firma y encriptado
19
martes 10 de enero de 12