Utilisation de services Web sécurisés en Java en environnement Open Source

Preview:

DESCRIPTION

 

Citation preview

1

Utilisation de services web sécurisés en Java en

environnement Open Source.

Sébastien Lévesquearchitecte java

2

● Introduction.– Rappels sur les services web

● Le coeur de la sécurité XML:– XML-DSIG, identité et intégrité – XML-ENC, confidentialité des messages

● WS-Security– La sécurité du transport ou du message?– Les jetons de sécurité– SOAP et XML-ENC/XML-DSIG

Sommaire

3

● WS-Policy ● Mise en oeuvre de WS-Security avec

– Jboss : JbossWs– Glassfish V2 & Netbeans 6: Métro-WSIT

Sommaire

4

Introduction: services web

● Applications, composants accessibles par l’entremise de protocoles Internet standards, comme HTTP, SMTP, etc.

● Ils représentent des fonctionnalités avec une interface publique

● L’interface d’un service Web est définie uniquement sous forme de messages qu’elle accepte et génère

● Les services Web sont bâtis sur les spécifications XML, SOAP, WSDL et UDDI

5

Introduction: services web

Transport Fiabilité Transaction Sécurité

Service Webimplémente API JAX-WS

Librairies élémentaires: JAXB, JAXP, StAX, SAAJ...

WS-Security

WS-I Basic ProfileWS-I Attachments ProfileWS-Addressing ...

WS-CoordinationWS-AtomicTransactionsWS-ReliableMessaging

HTTP, SOAP/TCPJMSSMTPMTOM/XOP

6

Introduction: services web

SOAP● Protocole simple pour l’échange d’information dans un

environnement décentralisé, distribué● Basé sur XML ou plutôt XML infoset (SOAP 1.2)● Définit :

– un cadre pour la structure et le traitement des messages

– des règles d’encodage pour la sérialisation des données

● une convention basée sur XML-RPC (remote procedure call)

7

Introduction: services web

<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>

<env:Header/> <env:Body> <ns1:sayHello xmlns:ns1='http://sebserver.fr/hello'> <arg0>world!</arg0> </ns1:sayHello> </env:Body></env:Envelope>

Protocol Headers

SOAP Envelope

SOAP Header

SOAP Body

8

Le coeur de la sécurité XML

XML-DSIG● Signature du message XML:

– Intégrité, identité, non-répudiation● Une signature numérique est aussi en XML● Possibilité d'avoir de multiples signatures (co-

signature/contre signature)● Une signature s’applique à un ensemble d'URI pointant vers

les objets à signer:– parties du document XML– un autre fichier XML ou binaire (pdf, images ...)

9

XML-DSIG

<Signature>

<SignedInfo>

(CanonicalizationMethod)(SignatureMethod)(<Reference (URI=)? >

(Transforms)?(DigestMethod)(DigestValue)

</Reference>)+</SignedInfo>

(SignatureValue)

(KeyInfo)?

(Object)* </Signature>

Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"

canonisation XML

URI="#elementID"ou URI= "file.pdf"

Signature de <SignedInfo /> en base 64

Condensé en base 64 de la référence

Donne la clef ou des Informations pour trouver cette clef lors de la validation

Algorithm='http://www.w3.org/2000/09/xmldsig#rsa-sha1'

Pipelines: canonisation, base64, Xpath, XSLT, enveloped signature transform

10

Le coeur de la sécurité XML

XML-DSIG● Il y a 3 types de signature :

– Enveloppante : la signature contient le document signé – Enveloppée : la signature fait partie des données signées– Détachée : la signature et les données signées sont dans

deux noeuds séparés, ou dans des fichiers différents.<signature><reference>

</signature>

<Object>..............</Object>

<element>

</element>

<signature><reference>

<signature><reference><reference>

a.pdf

b.xml

11

Le coeur de la sécurité XML

XML-ENC● Confidentialité des messages● Chiffre une ou des portions du message● Algorithmes variés (3DES, AES128,AES256...)● Utilise les balises de XML Signature (<KeyInfo/>)● Chiffrement persistant dans la transmission d’un

message SOAP qui passe par plusieurs acteurs

12

XML-ENC

<EncryptedData Type? MimeType? Encoding? >

<EncryptionMethod/>?

<ds:KeyInfo>

<EncryptedKey>?

<AgreementMethod>?

<ds:KeyName/>?

<ds:RetrievalMethod/>?

</ds:KeyInfo>?

<CipherData>

<CipherValue />?

<CipherReference URI>?

</CipherData></EncryptedData>

Algorithm='http://www.w3.org/2001/04/xmlenc#aes128-cbc

Structure <EncryptedData> sur la clef de chiffrement

ou protocole d'accord pour la génération la clef de chiffrement

Base 64 de l'information chiffrée

Ou pointeur vers une ressource à chiffrer

ou nom unique de clef de chiffrement connu par le destinataire

ou une URI dans le document vers la clef de chiffrement

13

Le coeur de la sécurité XML

XML-ENC<?xml version="1.0"?>

<InfoPaiement xmlns="http://linagora.com/test">

<Name>seb</Name>

<CarteCredit>

<Numero>1111 2222 3333 </Numero>

<Emetteur>ma Banque</Emetteur>

<Expiration>10-06</Expiration>

</CarteCredit>

</InfoPaiement>

14

Le coeur de la sécurité XML

XML-ENC<?xml version="1.0"?>

<InfoPaiement xmlns="http://linagora.com/test">

<Name>seb</Name>

<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"

xmlns="http://www.w3.org/2001/04/xmlenc#">

<CipherData>

<CipherValue>A23B45C56</CipherValue>

</CipherData>

</EncryptedData>

</InfoPaiement>

15

WS-Security

WS-Security● standardise les informations de sécurité dans un

message SOAP● 2002 2004 Standard WSS (OASIS) 2006 WSS 1.1● Existe dans toutes les implémentations web service:

– JbossWS du serveur Jboss– Métro du serveur Glassfish (XWSS)– Axis2 (Rampart) ...

16

La sécurité du transport ou du message?

Sécurité du message

● Bout en bout

● complexe, plusieurs options de sécurité

● S’applique à des parties des données utiles et seulement pour la requête ou la réponse

● Sécurité possible aussi sur le niveau transport

Couche de transport

● Point à point

● Administration facile

● S’applique à l'ensemble des données utiles du message et à travers la session

● Dépendant du niveau transport

17

WS-Security

WS-Security● permet :

– De signer tout ou une partie du message et de transmettre la signature

– De chiffrer tout ou des parties du message– De passer l’information sur les clés de chiffrement et

sur la vérification de la signature– De passer des tokens pour l’authentification et

l’autorisation dans le header du message SOAP

18

WS-Security

Jeton de sécurité● UsernameToken● UsernameToken avec PasswordDigest● Token binaire: BinarySecurityToken

– certificat X509– Kerberos (TGT, ST)

● Token XML

– SAML...

19

SOAP et XML-DSIG

Enveloppe SOAP

<wsse:BinarySecurityToken id="b1"> ...

<ds:Signature> <ds:SignedInfo>... <ds:Reference URI="#body">

<ds:Transform .../> <ds:DigestMethod /> </ds:Reference> </ds:SignedInfo><ds:SignatureValue>...</ds:SignatureValue><ds:KeyInfo>

<wsse:SecurityTokenReference> <wsse:Reference URI='#b1'> </wsse:SecurityTokenReference></ds:KeyInfo>

</ds:Signature>

<arg0>world!</arg0>

Header

Body

20

SOAP et XML-ENC/XML-DSIG

Enveloppe SOAP

<wsu:Timestamp wsu:Id='timestamp'><wsu:Created>2008-01-21T15:57:14.812Z</wsu:Created></wsu:Timestamp><wsse:BinarySecurityToken id="b1"> ...<wsse:BinarySecurityToken id="b2"> ...

<ds:Signature> ... <ds:Reference URI="#body"> <ds:Reference URI="#timestamp"></ds:Signature><xenc:EncryptedKey><xenc:ReferenceList></xenc:EncryptedKey>

<EncryptedData></EncryptedData><EncryptedData></EncryptedData>

Header

Body

21

WS-Security

Autres spécifications de sécurité WS● Intégration

– WS-Federation– WS-Authorization

● Confiance

– WS-Trust– WS-Privacy

● Interopérabilité

– WS-SecureConversation– WS-Policy

22

WS-Policy

WS-Policy

● Exprimer les possibilités, les exigences, et les caractéristiques de l'entité.

● S'applique aux consommateurs et aux services web.● Informations sur la qualité de service, la sécurité etc...● Pour un service web, spécifié dans le WSDL.

23

WS-Policy

Définition<wsp:Policy xmlns:wsp="" xmlns:wsse="">

<wsp:ExactlyOne>

<wsp:All wsp:Preference= "100" />

<wsse:SecurityToken Tokentype= "wsse:Kerberosv5TGT"/>

<wsse:Algorithm Type="wsse:AlgEncrytion" URI="....xmlenc#aes"/>

<wsp:All>

<wsp:All wsp:Preference= "1" />

<wsse:SecurityToken Tokentype= "wsse:X509v3"/>

<wsse:Algorithm Type="wsse:AlgEncrytion" URI="....xmlenc#3des-cbc"/>

<wsp:All>

</wsse>

</wsp:ExactlyOne></wsp:Policy>

24

Jboss

JbossWS● jbossws-2.0.2.GA (nov 2007)● La sécurité de JbossWs:

– Supporte les policy– Authentification par Username Token – Génération de timestamp– Token par certificat X509 – Signature et chiffrement– Supporte les "key wrap algorithms"– Configuration des cibles de chiffrements et signature

25

Jboss

Un service web

@WebService(name = "HelloWSMgmt", targetNamespace = "http://sebserver.fr/hello" , serviceName = "HelloWSMgmtService")

@EndpointConfig(configName = "Standard WSSecurity Endpoint")@SOAPBinding(parameterStyle=SOAPBinding.ParameterStyle.WRAPPED,style=SOA

PBinding.Style.DOCUMENT,use=SOAPBinding.Use.LITERAL)public class HelloWS{@WebMethod

public String sayHello(String texte) {return "hello " + texte;}

}

26

Jboss

Coté serveurWEB-INF/jboss-wsse-server.xml

<jboss-ws-security xmlns="http://www.jboss.com/ws-security/config">

<key-store-file>WEB-INF/wsse.keystore</key-store-file>

<key-store-password>jbossws</key-store-password>

<trust-store-file>WEB-INF/wsse.truststore</trust-store-file>

<trust-store-password>jbossws</trust-store-password>

<config>

<encrypt type="x509v3" alias="wsse"/>

<requires><encryption/></requires>

</config>

</jboss-ws-security>

27

Jboss

Coté serveur, autre configurationWEB-INF/jboss-wsse-server.xml

<config>

<timestamp ttl="300"/>

<sign type="x509v3" alias="1" includeTimestamp="true"/>

<encrypt type="x509v3" alias="alice" algorithm="aes-256" keyWrapAlgorithm="rsa_oaep" >

<targets>

<target type="qname">{http://www.my-company.com/cc}CardNumber</target></targets>

</encrypt>

<requires><signature/><encryption/></requires>

</config>

28

Jboss

Coté clientMETA-INF/jboss-wsse-client.xml

<jboss-ws-security xmlns="http://www.jboss.com/ws-security/config" >

<config>

<encrypt type="x509v3" alias="wsse"/>

<requires><encryption/></requires>

</requires>

</config>

</jboss-ws-security>

29

Jboss

Utilisation des policyWEB-INF/Policy.xml

<wsp:Policy wsu:Id="X509EndpointPolicy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" >

<wsp:ExactlyOne><wsp:All>

<sp:jboss-ws-security>

.......

<sp:config><sp:encrypt type="x509v3" alias="wsse"/>

<sp:requires><sp:encryption/></sp:requires>

</sp:config>

........

</wsp:Policy>

30

Jboss

Un service web

@WebService(name = "HelloWSMgmt", targetNamespace = "http://sebserver.fr/hello" , serviceName = "HelloWSMgmtService")

@PolicyAttachment({@Policy( policyFileLocation="WEB-INF/Policy.xml", scope = PolicyScopeLevel.WSDL_PORT ) })

public class HelloWS{@WebMethod

public String sayHello(String texte) {return "hello " + texte;}

}

31

Glassfish V2

Métro - WSIT

● Standards de sécurité supportés (par XWSS 3.0):

– OASIS WSS 1.1– WSS UsernameToken Profile 1.1 [partiel]– WSS X509 Token Profile 1.1 [partiel]– WSS SAML Token Profile 1.1 [partiel]– WSS SWA Profile 1.1 [partiel]

32

GlassFish V2 & Netbeans 6

Sécuriser un service web

33

GlassFish V2 & Netbeans 6

Configuration sur le chiffrement et la signature du message

34

GlassFish V2 & Netbeans 6

WS-Policy et WSDL

35

Merci de votre attention

Recommended