Tout d'abord, essayez de comprendre le fonctionnement de l'authentification SSL (HTTPS) et HTTP.
Les méthodes d' authentification HTTP habituelles (Digest, Basic et tous les schémas d'authentification par formulaires + cookies que vous pouvez implémenter par-dessus HTTP) sont toutes précaires en elles-mêmes, car elles envoient plus ou moins les informations d'authentification en texte clair. Que les données se trouvent dans des champs ou des en-têtes POST et que le codage base64 soit appliqué, peu importe à cet égard, le mot de passe est clairement visible par toute personne ayant accès au trafic réseau. Cela signifie que l'authentification HTTP sur un canal non approuvé est sans valeur: tout ce qu'il faut à un attaquant pour lire votre mot de passe est un petit reniflement de réseau.
SSL implémente un canal de communication sécurisé sur un canal intrinsèquement non sécurisé. Cela fonctionne, grosso modo, comme suit:
- Le serveur envoie un certificat signé
- Le client valide le certificat par rapport à une liste de clés de signature reconnues; les signatures de certificats peuvent être enchaînées, de sorte que chaque nœud indique "si la signature qui me signe est bonne, alors moi aussi", mais en fin de compte, la chaîne doit se résoudre à l'une des rares autorités de confiance préconfigurées sur le client.
- Le client utilise la clé de chiffrement publique du serveur pour envoyer un secret partagé
- Le serveur déchiffre le secret partagé à l'aide de la clé privée (car seul le serveur légitime possède la clé privée, les autres serveurs ne pourront pas déchiffrer le secret partagé)
- Le client envoie les données de demande réelles, cryptées à l'aide du secret partagé
- Le serveur déchiffre les données de la demande, puis envoie une réponse chiffrée
- Le client déchiffre la réponse et la présente à l'utilisateur.
Notez ici quelques points importants:
- La chaîne de certificats permet aux clients de s'assurer que le serveur avec lequel ils parlent est le vrai, et non quelqu'un interceptant leurs demandes. C'est pourquoi vous devriez acheter un vrai certificat SSL et pourquoi les navigateurs vous lancent des avertissements effrayants lorsque vous visitez un site qui utilise un certificat invalide, expiré ou autrement incorrect: tout le cryptage dans le monde n'aide pas si vous êtes parler à la mauvaise personne.
- Le cryptage public / privé utilisé pour échanger le secret garantit que la communication réussie ne fonctionnera qu'entre cette paire particulière de client et de serveur: les paquets réseau reniflés seront cryptés et ils nécessiteront la clé privée du serveur pour accéder aux données.
- Le chiffrement symétrique est utilisé pour la majeure partie de la demande, car il a un surdébit de performances beaucoup plus faible que le chiffrement à clé privée / publique. La clé (secret partagé) est cependant échangée en utilisant un cryptage à clé privée / publique, car c'est la seule façon de le faire de manière sécurisée (sauf le transport sur un canal séparé, comme un service de messagerie).
Donc, évidemment, il y a des frais généraux impliqués, mais ce n'est pas aussi mauvais que vous le pensez - c'est surtout à l'échelle où "jeter plus de matériel" est la réponse appropriée, à moins que vous ne vous prépariez à des quantités de trafic absolument massives ( pensez à Google ou Facebook). Dans des circonstances normales, c'est-à-dire une utilisation typique d'une application Web, la surcharge SSL est négligeable et, par conséquent, dès que vous avez des données confidentielles, il est préférable de tout exécuter sur SSL, y compris les ressources. SSL est également le seul moyen viable de sécuriser le trafic HTTP; les autres méthodes ne sont tout simplement pas aussi standardisées et ne sont donc pas largement prises en charge, et vous ne voulez absolument pas implémenter ces choses vous-même, car honnêtement, il est trop facile de se tromper.
TL; DR: Oui, SSL + Authentification de base est une bonne idée, oui, vous avez besoin d'un serveur sécurisé (et d'un certificat valide ), oui, cela ralentira un peu les choses, mais non, ce n'est pas quelque chose à craindre maintenant.