web-dev-qa-db-fra.com

Comment partager de manière sécurisée entre deux périphériques distants?

En supposant que j'ai une topologie serveur/client, je suis actuellement confronté au problème que je veux générer une clé sur le côté du client et en quelque sorte Rendre la télécommande serveur l'obtenir de manière sécurisée.

J'utilise des AES sur les deux parties, donc fondamentalement ce dont j'ai besoin, c'est générer un aléatoire [~ # ~ # ~] iv [~ # ~] et un Touche secrète aléatoire, mais comment le partager avec le serveur afin qu'il puisse ensuite déchiffrer les messages?

Le côté serveur est un serveur Web Apache/PHP. Les demandes seront donc envoyées via POST, et je vais utiliser un certificat SSL, mais je ne sais pas si cela suffit à envoyer de manière sécurisée les données de l'autre côté.

J'apprécierais toute approche/idée pour cela.

---- edit ----

Ceci est en fait un Android application OS. Au lieu d'utiliser directement Sockets contre le serveur, j'utilise HTTP POST Demandes du côté du client au serveur et Google Cloud Messages Selon la manière opposée, simulez un comportement de multidiffusion puisque le serveur envoie de nouveaux événements aux utilisateurs souscrits.

Mais ces messages seront envoyés uniquement aux utilisateurs enregistrés. Avant d'envoyer celui-ci, je dois enregistrer l'utilisateur et partager ainsi la clé entre serveur et client, c'est la motivation de la question.

8
nKn

Ce que vous recherchez est une paire de clés publique/privée autrement appelée SSL dans le monde de l'ordinateur.

Un certificat SSL tel que vous avez mentionné est suffisamment de sécurité depuis pour savoir ce qui est envoyé, vous avez besoin de la clé privée du certificat et que vous ne pouvez pas obtenir cela sans vous enfreindre.

Si vous ne voulez pas utiliser SSL Une autre option serait d'utiliser une paire de clés publiques/privée codée dans le client/serveur qui agirait comme SSL mais sans avoir un certificat signé.

7
user36976

Les deux réponses ont identifié SSL/TLS, mais envisagez d'ajouter une authentification client au mélange. Cela garantira que le serveur acceptera uniquement les connexions pour les clients authentifiés/connus. L'inconvénient avec c'est que:

  • a) Chaque client doit être émis avec son propre certificat d'authentification client (bien que pas nécessairement du même CA que le serveur).
  • b) Chaque client doit stocker la clé privée correspondante. Cela sera probablement dans des logiciels (bien qu'il puisse être stocké sur une carte à puce ou un jeton USB PKI).
  • c) Chaque client doit être enregistré auprès du serveur, bien que cela puisse différer de diffusion de la mise en œuvre du serveur. Certains serveurs peuvent autoriser la confiance en fonction des certificats connus de CA racine. Certains serveurs peuvent accepter des certificats en fonction d'une approche de liste blanche. Certains peuvent être un mélange des deux ou des alternatives.

Le serveur doit pouvoir être configuré pour accepter uniquement les connexions authentifiées par le client. Dans certains serveurs Web, ce paramètre peut être appliqué à des ressources individuelles sur le serveur.

Regardez la page Wikipedia pour plus de détails sur le client authentifié TLS Handshake:

authentification client TLS

3
NRCocker