35
1 Utilisation de services web sécurisés en Java en environnement Open Source. Sébastien Lévesque architecte java

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

Embed Size (px)

DESCRIPTION

 

Citation preview

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

1

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

environnement Open Source.

Sébastien Lévesquearchitecte java

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

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

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

3

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

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

Sommaire

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

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

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

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

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

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)

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

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

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

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 ...)

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

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

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

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

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

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

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

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

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

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>

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

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>

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

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) ...

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

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

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

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

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

18

WS-Security

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

– certificat X509– Kerberos (TGT, ST)

● Token XML

– SAML...

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

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

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

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

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

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

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

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.

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

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>

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

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

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

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;}

}

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

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>

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

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>

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

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>

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

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>

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

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;}

}

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

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]

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

32

GlassFish V2 & Netbeans 6

Sécuriser un service web

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

33

GlassFish V2 & Netbeans 6

Configuration sur le chiffrement et la signature du message

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

34

GlassFish V2 & Netbeans 6

WS-Policy et WSDL

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

35

Merci de votre attention