Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Services Web et Chiffrement

2 réponses
Avatar
Pierre Y.
Salut =E0 tous,

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

Je dois =E9crire quelques services web pour "=E9tendre" une application.
Un de ces services web servira pour l'administration d'une base de
donn=E9es, j'aimerais chiffrer les donn=E9es qui sont =E9chang=E9es entre
le client et le service web.

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

J'ai quelques id=E9es :

1) Utiliser SSL. Comment alors authentifier le client ?

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

3) Trouver une solution pour =E9changer une cl=E9 de session entre
l'application cliente et le service web. L=E0 je ne vois pas comment
faire simplemement du fait de la nature d=E9connect=E9e des services web
(pour m=E9moire : service web =3D HTTP + XML)

Si vous avez quelques liens, infos, id=E9es sur le sujet je ne vous
cache pas que =E7a m'aiderait =E0 avancer ;-)

Merci d'avance, tr=E8s cordialement,

Pierre Y.

2 réponses

Avatar
Arnaud W.

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

Avatar
Pierre Y.
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