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

5,486 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,486
On SlideShare
0
From Embeds
0
Number of Embeds
42
Actions
Shares
0
Downloads
190
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. Utilisation de services web sécurisés en Java en environnement Open Source. Sébastien Lévesque architecte java 1
  2. 2. Sommaire ● 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 2
  3. 3. Sommaire ● WS-Policy ● Mise en oeuvre de WS-Security avec – Jboss : JbossWs – Glassfish V2 & Netbeans 6: Métro-WSIT 3
  4. 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 4
  5. 5. Introduction: services web WS-Coordination WS-ReliableMessaging WS-AtomicTransactions HTTP, SOAP/TCP JMS Transport Fiabilité Transaction Sécurité WS-Security SMTP MTOM/XOP WS-I Basic Profile Service Web WS-I Attachments Profile implémente API JAX-WS WS-Addressing ... Librairies élémentaires: JAXB, JAXP, StAX, SAAJ... 5
  6. 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 6 call)
  7. 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> Protocol Headers </env:Body> SOAP Envelope </env:Envelope> SOAP Header SOAP Body 7
  8. 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 ...) 8
  9. 9. XML-DSIG <Signature> canonisation XML <SignedInfo> Algorithm='http://www.w3.org/2000/09/xml (CanonicalizationMethod) dsig#rsa-sha1' (SignatureMethod) URI=quot;#elementIDquot;ou URI= quot;file.pdfquot; (<Reference (URI=)? > (Transforms)? Pipelines: canonisation, base64, Xpath, XSLT, enveloped signature transform (DigestMethod) (DigestValue) Algorithm=quot;http://www.w3.org/2000/09/xmldsig#sha1quot; </Reference>)+ </SignedInfo> Condensé en base 64 de la référence (SignatureValue) Signature de <SignedInfo /> en base 64 (KeyInfo)? Donne la clef ou des Informations pour trouver cette clef lors de la validation (Object)* </Signature> 9
  10. 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> <element> <signature> <reference> <reference> a.pdf <reference> <Object> .............. <signature> </Object> <reference> b.xml </signature> </element> 10
  11. 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 11
  12. 12. XML-ENC <EncryptedData Type? MimeType? Encoding? > Algorithm='http://www.w3.org/2001/04/xmlenc#aes128-cbc <EncryptionMethod/>? <ds:KeyInfo> Structure <EncryptedData> sur la clef de chiffrement <EncryptedKey>? ou protocole d'accord pour la génération la clef <AgreementMethod>? de chiffrement ou nom unique de clef de chiffrement connu par le destinataire <ds:KeyName/>? <ds:RetrievalMethod/>? ou une URI dans le document vers la clef de chiffrement </ds:KeyInfo>? <CipherData> Base 64 de l'information chiffrée <CipherValue />? <CipherReference URI>? Ou pointeur vers une ressource à chiffrer 12 </CipherData></EncryptedData>
  13. 13. Le coeur de la sécurité XML XML-ENC <?xml version=quot;1.0quot;?> <InfoPaiement xmlns=quot;http://linagora.com/testquot;> <Name>seb</Name> <CarteCredit> <Numero>1111 2222 3333 </Numero> <Emetteur>ma Banque</Emetteur> <Expiration>10-06</Expiration> </CarteCredit> </InfoPaiement> 13
  14. 14. Le coeur de la sécurité XML XML-ENC <?xml version=quot;1.0quot;?> <InfoPaiement xmlns=quot;http://linagora.com/testquot;> <Name>seb</Name> <EncryptedData Type=quot;http://www.w3.org/2001/04/xmlenc#Elementquot; xmlns=quot;http://www.w3.org/2001/04/xmlenc#quot;> <CipherData> <CipherValue>A23B45C56</CipherValue> </CipherData> </EncryptedData> </InfoPaiement> 14
  15. 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) ... 15
  16. 16. La sécurité du transport ou du message? Couche de transport Sécurité du message ● Point à point ● Bout en bout ● Administration facile ● complexe, plusieurs options de sécurité ● S’applique à l'ensemble des données utiles du message et ● S’applique à des parties des à travers la session données utiles et seulement pour la requête ou la réponse ● Dépendant du niveau transport ● Sécurité possible aussi sur le niveau transport 16
  17. 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 17
  18. 18. WS-Security Jeton de sécurité ● UsernameToken ● UsernameToken avec PasswordDigest ● Token binaire: BinarySecurityToken – certificat X509 – Kerberos (TGT, ST) ● Token XML – SAML... 18
  19. 19. SOAP et XML-DSIG Enveloppe SOAP Header <wsse:BinarySecurityToken id=quot;b1quot;> ... <ds:Signature> <ds:SignedInfo>... <ds:Reference URI=quot;#bodyquot;> <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> Body <arg0>world!</arg0> 19
  20. 20. SOAP et XML-ENC/XML-DSIG Enveloppe SOAP Header <wsu:Timestamp wsu:Id='timestamp'> <wsu:Created>2008-01-21T15:57:14.812Z</wsu:Created> </wsu:Timestamp> <wsse:BinarySecurityToken id=quot;b1quot;> ... <wsse:BinarySecurityToken id=quot;b2quot;> ... <ds:Signature> ... <ds:Reference URI=quot;#bodyquot;> <ds:Reference URI=quot;#timestampquot;> </ds:Signature> <xenc:EncryptedKey><xenc:ReferenceList></xenc:EncryptedKey> Body <EncryptedData></EncryptedData> <EncryptedData></EncryptedData> 20
  21. 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 21
  22. 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. 22
  23. 23. WS-Policy Définition <wsp:Policy xmlns:wsp=quot;quot; xmlns:wsse=quot;quot;> <wsp:ExactlyOne> <wsp:All wsp:Preference= quot;100quot; /> <wsse:SecurityToken Tokentype= quot;wsse:Kerberosv5TGTquot;/> <wsse:Algorithm Type=quot;wsse:AlgEncrytionquot; URI=quot;....xmlenc#aesquot;/> <wsp:All> <wsp:All wsp:Preference= quot;1quot; /> <wsse:SecurityToken Tokentype= quot;wsse:X509v3quot;/> <wsse:Algorithm Type=quot;wsse:AlgEncrytionquot; URI=quot;....xmlenc#3des-cbcquot;/> <wsp:All> </wsse> </wsp:ExactlyOne></wsp:Policy> 23
  24. 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 quot;key wrap algorithmsquot; – Configuration des cibles de chiffrements et signature 24
  25. 25. Jboss Un service web @WebService(name = quot;HelloWSMgmtquot;, targetNamespace = quot;http://sebserver.fr/helloquot; , serviceName = quot;HelloWSMgmtServicequot;) @EndpointConfig(configName = quot;Standard WSSecurity Endpointquot;) @SOAPBinding(parameterStyle=SOAPBinding.ParameterStyle.WRAPPED,style=SOA PBinding.Style.DOCUMENT,use=SOAPBinding.Use.LITERAL) public class HelloWS{ @WebMethod public String sayHello(String texte) { return quot;hello quot; + texte; } } 25
  26. 26. Jboss Coté serveur WEB-INF/jboss-wsse-server.xml <jboss-ws-security xmlns=quot;http://www.jboss.com/ws-security/configquot;> <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=quot;x509v3quot; alias=quot;wssequot;/> <requires><encryption/></requires> </config> </jboss-ws-security> 26
  27. 27. Jboss Coté serveur, autre configuration WEB-INF/jboss-wsse-server.xml <config> <timestamp ttl=quot;300quot;/> <sign type=quot;x509v3quot; alias=quot;1quot; includeTimestamp=quot;truequot;/> <encrypt type=quot;x509v3quot; alias=quot;alicequot; algorithm=quot;aes-256quot; keyWrapAlgorithm=quot;rsa_oaepquot; > <targets> <target type=quot;qnamequot;>{http://www.my-company.com/cc} CardNumber</target></targets> </encrypt> <requires><signature/><encryption/></requires> </config> 27
  28. 28. Jboss Coté client META-INF/jboss-wsse-client.xml <jboss-ws-security xmlns=quot;http://www.jboss.com/ws-security/configquot; > <config> <encrypt type=quot;x509v3quot; alias=quot;wssequot;/> <requires><encryption/></requires> </requires> </config> </jboss-ws-security> 28
  29. 29. Jboss Utilisation des policy WEB-INF/Policy.xml <wsp:Policy wsu:Id=quot;X509EndpointPolicyquot; xmlns:wsp=quot;http://schemas.xmlsoap.org/ws/2004/09/policyquot; > <wsp:ExactlyOne><wsp:All> <sp:jboss-ws-security> ....... <sp:config><sp:encrypt type=quot;x509v3quot; alias=quot;wssequot;/> <sp:requires><sp:encryption/></sp:requires> </sp:config> ........ </wsp:Policy> 29
  30. 30. Jboss Un service web @WebService(name = quot;HelloWSMgmtquot;, targetNamespace = quot;http://sebserver.fr/helloquot; , serviceName = quot;HelloWSMgmtServicequot;) @PolicyAttachment({@Policy( policyFileLocation=quot;WEB-INF/Policy.xmlquot;, scope = PolicyScopeLevel.WSDL_PORT ) }) public class HelloWS{ @WebMethod public String sayHello(String texte) { return quot;hello quot; + texte; } } 30
  31. 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] 31
  32. 32. GlassFish V2 & Netbeans 6 Sécuriser un service web 32
  33. 33. GlassFish V2 & Netbeans 6 Configuration sur le chiffrement et la signature du message 33
  34. 34. GlassFish V2 & Netbeans 6 WS-Policy et WSDL 34
  35. 35. Merci de votre attention 35

×