J'utilise une connexion HTTPS sans certificat SSL valide. La connexion est-elle sûre? Les informations sont-elles cryptées?
La connexion est cryptée même si le certificat SSL n'est pas valide (expiré, snake-oil, CA non fiable, etc.). La validation du certificat SSL garantit simplement que vous vous connectez aux personnes auxquelles vous pensez vous connecter. Le cryptage ne vous sert à rien si les gens qui décryptent vos données sont des crackers au lieu de Paypal.
En fait, il est possible d'établir une connexion cryptée entre des inconnus complets sans certificat, en utilisant Diffie-Hellman ou des algorithmes d'échange de clés similaires.
Alice et Bob s'accordent sur un nombre aléatoire x. Alice calcule xune, où a est un grand nombre premier connu seulement d'Alice et l'envoie à Bob. Bob calcule xb et l'envoie à Alice. Alice calcule (xb)une, et Bob calcule (xune)b. Depuis (xune)b = (xb)une = xun B, Alice et Bob connaissent maintenant tous les deux le nombre xun B et peut l'utiliser comme clé de cryptage. La beauté de ceci est que Bob ne sait pas a, Alice ne sait pas b, et les écoutes ne connaissent aucun des deux nombres (parce que le calcul a de xune, dans le cas d'un grand nombre, prendrait des années).
Comme le souligne Supercat, cela est en soi toujours sensible à une attaque de l'homme du milieu, et c'est pourquoi au moins une extrémité de la transaction doit s'authentifier à l'aide d'un certificat. Pour être précis, cependant, ce n'est pas le serveur qui vérifie cela, c'est le navigateur, et la plupart des navigateurs laisseront l'utilisateur continuer si le certificat n'est pas valide (ou peut-être même des ordures). Dans ce cas, la connexion sera toujours beaucoup plus sécurisée qu'une connexion régulière. Pour écouter, vous devez être capable de manipuler le routage IP ou les recherches DNS, et vous devez le configurer avant la première connexion, ce qui n'est pas facile à faire.
BTW les paires de clés dans les certificats sont ne pas ce qui est utilisé pour crypter le trafic réel; ils sont utilisés pour établir une nouvelle clé à usage unique pour un chiffrement symétrique beaucoup plus rapide (tel que DES) qui fait ensuite le reste du travail.
S'il n'y avait pas de vérification des certificats SSL, alors quelqu'un qui a intercepté un canal de communication pourrait capturer une demande de connexion à https://www.acmebank.com , envoyer sa propre demande à www.acmebank.com et négociez les clés avec acmebank.com et l'utilisateur. Après cela, il pourrait recevoir chaque morceau de données de l'utilisateur, déchiffrer avec la clé de l'utilisateur et chiffrer avec la clé d'acmebank, et faire de même avec les données d'acmebank.com. L'effet net serait que ni l'utilisateur ni acmebank ne verraient quelque chose de mal, mais l'intercepteur serait en mesure de décrypter toutes les données entre l'utilisateur et acmebank. L'utilisateur et la banque utiliseront des clés différentes pour gérer leur communication, mais aucune entité ne le saura. L'ajout d'un aspect standard au protocole pour savoir quelle clé est utilisée ne serait d'aucune utilité, car l'intercepteur pourrait détecter de telles requêtes et modifier les réponses de manière appropriée.
SSL empêche une attaque d'homme au milieu en exigeant que l'hôte envoie au destinataire une copie de la clé que l'hôte utilise, chiffrée sous une forme qu'un intrus ne pourra pas truquer (à moins que l'intrus ne puisse truquer CA informations d'identification, au moins). Si l'on n'utilise pas de certificat émis par une autorité de certification, il y aura peu de protection contre une attaque de l'homme du milieu, bien que la couche chiffrée empêcherait le déchiffrement passif ou rétrospectif du contenu de la session (BTW, je souhaite qu'il y ait des normes pour quelque chose entre la communication non cryptée et SSL, pour les situations où le décryptage passif ou rétrospectif est la principale menace, mais je n'en connais pas).
Ne vous embêtez plus avec un certificat SSL invalide. Vous pouvez désormais générer un certificat valide de navigateur gratuit pour votre serveur aussi facilement que vous générez un certificat snakeoil (auto-signé, navigateur non valide). Allez voir https://letsencrypt.org/ c'est gratuit et ouvert aux contributions.
Nan. Ce que vous faites lorsque vous utilisez HTTPS, c'est de dire au navigateur de se connecter via un port différent (443) alors que normalement vous vous connectez via (80). Sans certificat, le serveur refuserait la connexion. HTTPS n'est tout simplement pas possible sans certificat. Regardez ici et vous verrez un n certificat est nécessaire pour que cela fonctionne.
Il est possible d'établir une connexion cryptée, oui, mais il serait toujours possible que vous communiquiez avec un ordinateur craqué au lieu du vrai serveur. Comme ça, l'ordinateur piraté dit au serveur qu'il serait le client, déchiffrer toutes les données, les stocker et envoyer les données chiffrées au client (et lui dire qu'il serait le serveur). Il s'agit donc simplement d'une connexion sécurisée s'il n'y a pas de point vulnérable entre le serveur et le client, ce que personne ne peut garantir.