GNT sans publicité, site mobile, fonctionnalitées exclusives...

Services Web et Chiffrement

Le
Pierre Y.
Salut à tous,

J'espère que vous ne m'en voudrez pas de poster ce message ici
Normalement je ne suis pas trop HS.

Je dois écrire quelques services web pour "étendre" une application.
Un de ces services web servira pour l'administration d'une base de
données, j'aimerais chiffrer les données qui sont échangées entre
le client et le service web.

Normalement tout sera écrit en C# sur la base de ce que propose le
Framework .NET (version 1.1)

J'ai quelques idées :

1) Utiliser SSL. Comment alors authentifier le client ?

2) Signer l'assembly du service web avec un nom fort. Utiliser la clé
publique intégrée dans l'assembly qui sert à vérifier la signature
pour chiffrer les échanges avec l'application cliente. Comme il n'y
aura qu'une seule application cliente, que c'est moi qui la fait,
j'aurai forcément la clé privée correspondante puisque c'est aussi
moi qui signe l'assembly du service web et je n'aurai pas à ditribuer
la clé privée. Comment, alors, chiffrer les informations qui vont du
client vers le service web puisque celui-ci n'a a sa disposition qu'une
clé publique ?

3) Trouver une solution pour échanger une clé de session entre
l'application cliente et le service web. Là je ne vois pas comment
faire simplemement du fait de la nature déconnectée des services web
(pour mémoire : service web = HTTP + XML)

Si vous avez quelques liens, infos, idées sur le sujet je ne vous
cache pas que ça m'aiderait à avancer ;-)

Merci d'avance, très cordialement,

Pierre Y.
Lire les 2 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Arnaud W.
Le #507883

Salut à tous,


Salut.
[...]

J'ai quelques idées :

1) Utiliser SSL. Comment alors authentifier le client ?


Si vous utiliser des web services sur HTTP, la solution la plus simple
est bien HTTPS (normalement il n'y a rien à modifier dans le codage du
web service, c'est uniquement de la configuration). Pour
l'authentification, il faut générer des certificats numériques (il y
a des outils en Java mais je ne connais pas C#). La question est : le
service web est-il uniquement entre deux applications ou entre des
applications clientes (pas toujours les mêmes) et un serveur ? Dans le
premier cas, il est simple de créer deux certificats et les corréler
(pas besoin de les faire certifier par une AC = Autorité de
Certification). Dans l'autre cas, si le service est ouvert vers
l'extérieur, il faut un certificat "certifié" par une AC. Ensuite,
soit vous exigez que les clients aient aussi un tel certificat (rare)
ou alors non (comme la plupart des sites de commerce électronique ou
des banques). Dans le dernier cas, vous ne pouvez être sûr de
l'identité du client (mais lui peut est sûr du serveur).

Sinon, il y a d'autres protocoles / architectures de sécurité pour
les web services tel WS-Security. Voir les consortiums et autres sites
spécialisés :
http://www.w3.org/
http://webservices.xml.com/
http://www.oasis-open.org
http://xmlfr.org
...

2) Signer l'assembly du service web avec un nom fort. Utiliser la clé
publique intégrée dans l'assembly qui sert à vérifier la signature
pour chiffrer les échanges avec l'application cliente. Comme il n'y
aura qu'une seule application cliente, que c'est moi qui la fait,
j'aurai forcément la clé privée correspondante puisque c'est aussi
moi qui signe l'assembly du service web et je n'aurai pas à ditribuer
la clé privée. Comment, alors, chiffrer les informations qui vont du
client vers le service web puisque celui-ci n'a a sa disposition qu'une
clé publique ?


Je ne connais pas le terme assembly, ce n'est pas standard (W3C). Cela
doit être spécifique .net ?!

Quoiqu'il en soit, puisque les deux applications sont de votre ressort,
il suffit de générer deux certificats (pas nécessairement certifiés
AC) et les "corréler", c'est à dire les mettre en confiance l'un avec
l'autre ou mutuellement les certifier si vous préférez.

3) Trouver une solution pour échanger une clé de session entre
l'application cliente et le service web. Là je ne vois pas comment
faire simplemement du fait de la nature déconnectée des services web
(pour mémoire : service web = HTTP + XML)


Il y a des protocoles pour les échanges de clefs (connecté ou non)
mais il n'y aucun besoin de coder vous même ce genre de chose (sauf
pour le plaisir). De nombreuses librairies existent déjà pour faire
cela, dans de nombreux langages.

Si vous avez quelques liens, infos, idées sur le sujet je ne vous
cache pas que ça m'aiderait à avancer ;-)


Google + secure "web service"
Google + secure "web service" .net
Donne de bons résultats.

Arnaud W.
http://awr.free.fr

Pierre Y.
Le #507881
Arnaud,

Il y a des protocoles pour les échanges de clefs (connecté ou non)
mais il n'y aucun besoin de coder vous même ce genre de chose (sauf
pour le plaisir). De nombreuses librairies existent déjà pour faire
cela, dans de nombreux langages.


Partant de cette idée et de tes suggestions de requêtes Google je suis
arrivé là :

http://msdn.microsoft.com/webservices

Ils proposent un "kit" d'extension pour le framework .net qui s'appelle
WSE (Web Services Extensions) et qui gère une bonne partie des normes
WS-* (WS-Security, WS-Trust...)

Et effectivement ca peut permettre de gérer le chiffrement,
l'authentification... sans changer une ligne au code du webservice et du
client. Tout peut se faire par le biais des SoapExtensions et des
fichiers de config (app.config, web.config)

Ca utilise des certificats X.509, je suis en train de découvrir le truc
et de creuser un peu les exemples, c'est bluffant ;-)

A+

--
Pierre Y.
KeyID : 0x7890CFE9

Publicité
Suivre les réponses
Poster une réponse
Anonyme