web-dev-qa-db-fra.com

Comment sécuriser la communication entre les serveurs

J'ai deux serveurs avec 2 applications web en PHP, j'ai besoin de ce serveur pour faire une communication sécurisée là est mon domaine:

J'ai besoin que l'application 1 fasse un POST sur l'application 2, mais sur l'application 2 je dois m'assurer que POST vient de l'application 1.

Quelle est la meilleure façon de le comprendre?

Je réfléchissais à des alternatives comme une clé de hachage et chiffrer les informations en faisant une fenêtre de 1 minute pour que ces informations soient valides, donc si je reçois un message avec une date avec plus d'une minute de la date réelle, c'est un message invalide.

Mon plus gros souci est l'attaque de Man In The Middle.

13
Guerra

J'ai besoin que l'application 1 fasse un POST sur l'application 2, mais sur l'application 2 je dois m'assurer que POST vient de l'application 1.

Aux fins de cet article, je vais appeler l'application 1 Client, et l'application 2 est Server.

Commençons avec:

Ma plus grande inquiétude est l'attaque de Man In The Middle.

Assurez-vous que lorsque le client établit une connexion avec le serveur, le client doit confirmer identité du serveur, et assurez-vous qu'il y a pas d'homme au milie. (MITM) Il s'agit du même problème auquel les navigateurs sont confrontés lorsqu'ils tentent d'établir une connexion sécurisée pour les opérations bancaires en ligne ou d'autres opérations sensibles.

  • Ceci est facilement sécurisé en utilisant un certificat HTTPS standard (qui utiliserait le cryptage TLS). La connexion est sécurisée à l'aide de la cryptographie asymétrique, de telle sorte que la seule façon d'accomplir MITM serait de voler la clé privée du système de fichiers du serveur.

    Un certificat peut être émis par une autorité de certification avec renouvellement tous les quelques années, ou vous pouvez créer un certificat auto-signé stocké sur le système client sans frais.

Maintenant avec l'identité du serveur, et MITM a été contrecarré avec succès; il vous suffit de vérifier la identité du Client. Il y a plusieurs façons de procéder. Choisissez-en un

  1. Secret partagé: il suffit d'inclure un mot de passe sur la machine cliente et le serveur doit vérifier qu'il correspond. C'est le moyen le plus simple de vérifier l'identité du client et il est sûr grâce à HTTPS.

  2. Certificat client dans le cadre de la connexion TLS: alors que HTTPS fournit un moyen pour les certificats client, je trouve cela plus compliqué que nécessaire.

  3. Heure du jour avec chiffrement: créez vous-même une clé privée et publique RSA distincte. Stockez la clé publique sur le client et le serveur utilisera la clé privée pour déchiffrer. Le client chiffrera l'heure de la journée et le serveur vérifiera qu'elle est correcte. (à portée de)

  4. Défi-réponse: dans ce cas, une clé RSA publique est stockée sur le serveur et une clé privée sur le client. Le serveur envoie une chaîne aléatoire au client, avec un identifiant de demande, et le client doit être en mesure de déchiffrer les informations et de les renvoyer avec l'identifiant de demande correspondant. Si le déchiffrement a réussi, l'identité du client est vérifiée.

    L'avantage que cela a sur les autres est que, en supposant qu'un attaquant pirate avec succès votre serveur et télécharge des fichiers, il ne pourra pas usurper l'identité d'un client sans un piratage plus avancé. (même s'il serait un pas de plus vers MITM) Avec les solutions 1, 2 et 3, le simple téléchargement des fichiers appropriés à partir du système de fichiers du serveur fournirait les informations nécessaires pour usurper l'identité d'un client.

Les solutions 3 et 4 seraient mieux accompagnées d'une protection contre les attaques de relecture. La solution 1 n'est pas compatible avec la prévention des attaques par relecture. Cependant, dans votre cas d'utilisation, en utilisant HTTPS, je pense que les replays ne sont un problème qu'après un piratage réussi du système de fichiers du serveur permettant ainsi MITM.

Prime:

  • Adresse IP: si possible, demandez au serveur de vérifier que la connexion provient d'une adresse IP client prédéterminée. Si l'adresse IP du client est vérifiée pour ne pas changer, cette protection bonus offrira une grande protection contre toute attaque contre les solutions ci-dessus que j'ai fournies.
21
Bryan Field