Utilisation de services Web sécurisés en Java en environnement Open Source
-
Upload
guest3be047 -
Category
Technology
-
view
8.042 -
download
0
description
Transcript of 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
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