Comment les certificats SSL sont-ils vérifiés?

219

Quelle est la série d'étapes nécessaires pour vérifier en toute sécurité un certificat SSL? Ma compréhension (très limitée) est que lorsque vous visitez un site https, le serveur envoie un certificat au client (le navigateur) et que le navigateur obtient les informations sur l'émetteur du certificat à partir de ce certificat, puis les utilise pour contacter l'émetteur et compare en quelque sorte certificats de validité.

  • Comment cela se fait-il exactement?
  • Qu'en est-il du processus qui le rend immunisé contre les attaques de l'homme du milieu?
  • Qu'est-ce qui empêche une personne au hasard de mettre en place son propre service de vérification à utiliser dans les attaques man-in-the-middle, de sorte que tout "semble" sécurisé?
rcreswick
la source
a trouvé cette vidéo très utile pour comprendre le flux youtube.com/watch?v=T4Df5_cojAs
Krishna

Réponses:

308

Voici une explication très simplifiée:

  1. Votre navigateur Web télécharge le certificat du serveur Web, qui contient la clé publique du serveur Web. Ce certificat est signé avec la clé privée d'une autorité de certification approuvée.

  2. Votre navigateur Web est installé avec les clés publiques de toutes les principales autorités de certification. Il utilise cette clé publique pour vérifier que le certificat du serveur Web a bien été signé par l'autorité de certification de confiance.

  3. Le certificat contient le nom de domaine et / ou l'adresse IP du serveur Web. Votre navigateur Web confirme auprès de l'autorité de certification que l'adresse indiquée dans le certificat est celle à laquelle il a une connexion ouverte.

  4. Votre navigateur Web génère une clé symétrique partagée qui sera utilisée pour crypter le trafic HTTP sur cette connexion; c'est beaucoup plus efficace que d'utiliser le chiffrement par clé publique / privée pour tout. Votre navigateur chiffre la clé symétrique avec la clé publique du serveur Web puis la renvoie, garantissant ainsi que seul le serveur Web peut la déchiffrer, car seul le serveur Web a sa clé privée.

Notez que l'autorité de certification (CA) est essentielle pour prévenir les attaques de l'homme du milieu. Cependant, même un certificat non signé empêchera quelqu'un d'écouter passivement votre trafic chiffré, car il n'a aucun moyen d'accéder à votre clé symétrique partagée.

Eli Courtwright
la source
4
Autour de l'étape 1.5, le serveur "signe" également quelque chose avec la clé privée associée à son certificat. Ceci se combine avec la vérification du nom / IP pour garantir que seul le site propriétaire du certificat le présente.
Darron
68
Pour voir un exemple complet et fonctionnel de ce processus utilisant Firefox se connectant à amazon.com , voir moserware.com/2009/06/first-few-milliseconds-of-https.html
Jeff Moser
9
Je ne savais pas que mon navigateur est installé avec les clés publiques de toutes les principales autorités de certification. Maintenant, je sais comment mes certificats SSL sont vérifiés sans risque de MITM :). Merci!
OneChillDude
5
le serveur doit demander un certificat à CAuthority, il lui envoie donc une demande. Comment CA peut-il être sûr que le serveur est valide?
voipp
4
@voipp: Grande question! Historiquement, il y a eu quelques approches, telles que «envoyer un e-mail à partir de webmaster@<domain-being-verified>ou« placer ce fichier sur votre domaine pour prouver que vous en êtes le propriétaire ». propre - célèbre quelqu'un a réussi à obtenir un CA ombreux pour leur délivrer un certificat pour gmail.com!
Eli Courtwright
58

Il convient de noter qu'en plus d'acheter un certificat (comme mentionné ci-dessus), vous pouvez également créer le vôtre gratuitement; c'est ce que l'on appelle un "certificat auto-signé". La différence entre un certificat auto-signé et un certificat acheté est simple: le certificat acheté a été signé par une autorité de certification que votre navigateur connaît déjà. En d'autres termes, votre navigateur peut facilement valider l'authenticité d'un certificat acheté.

Malheureusement, cela a conduit à une idée fausse commune selon laquelle les certificats auto-signés sont intrinsèquement moins sûrs que ceux vendus par des autorités de certification commerciales comme GoDaddy et Verisign, et que vous devez vivre avec des avertissements / exceptions de navigateur si vous les utilisez; c'est incorrect .

Si vous distribuez en toute sécurité un certificat auto-signé (ou un certificat CA, comme l'a suggéré Bobince) et que vous l'installez dans les navigateurs qui utiliseront votre site , il est tout aussi sécurisé que celui acheté et n'est pas vulnérable à l'homme du milieu attaques et contrefaçon de cert. Évidemment, cela signifie que cela n'est possible que si seules quelques personnes ont besoin d'un accès sécurisé à votre site (par exemple, des applications internes, des blogs personnels, etc.).

Clint Harris
la source
1
En effet, distribuer en toute sécurité votre propre certificat est une façon de dépouiller le chat, mais il est beaucoup plus facile de vous adresser à l'une des autorités de certification dites «ouvertes». CACert.org est mon préféré. Tant que vous faites confiance aux mesures qu'ils prennent pour protéger leur émission de certificats, l'importation de leur certificat racine est sûre.
nsayer
6
J'adore ce commentaire - malheureusement, il met en évidence une faiblesse très importante avec les autorités de certification. Imaginons que vous importiez un certificat CA de Bob Smith - et bien Bob Smith peut signer un certificat pour n'importe quel domaine (y compris google.com et chase.com). C'est en fait la raison pour laquelle GoDaddy / Verisign paie beaucoup d'argent pour être inclus dans le système d'exploitation - ils sont contrôlés par une équipe de sécurité pour s'assurer qu'ils ont des contrôles en place pour s'assurer qu'ils ne signent pas de certificat pour une personne malveillante. Je pense que vous devriez pouvoir dire "cette autorité de certification ne peut signer que des certificats pour mysite.com".
Natalie Adams
Le certificat auto-signé n'est-il pas plus sûr, car les autorités de certification pourraient être payées pour signer quelque chose qu'elles ne devraient pas avoir. Si vous pouvez distribuer en toute sécurité les certificats CA aux points de terminaison, optez toujours pour des certificats auto-signés.
javaPhobic
Existe-t-il des autorités de certification gratuites et vérifiées dans la plupart des principaux navigateurs? Je recherche un certificat de base simplement pour vérifier que je possède un e-mail et un nom de domaine. Cependant, ceux que j'ai trouvés ne sont pas dans la plupart des principaux navigateurs.
Alex Kwitny
@NathanAdams En théorie, les grandes autorités de certification sont censées examiner les demandes pour éviter d'émettre de faux certificats comme vous le décrivez ... mais lisez cette histoire: stripe.ian.sh
nsayer
38

Vous avez dit que

le navigateur obtient les informations sur l'émetteur du certificat à partir de ce certificat, puis les utilise pour contacter l'émetteur et compare en quelque sorte la validité des certificats.

Le client n'a pas à vérifier auprès de l'émetteur car deux choses:

  1. tous les navigateurs ont une liste préinstallée de toutes les principales clés publiques des autorités de certification
  2. le certificat est signé, et cette signature elle-même est une preuve suffisante que le certificat est valide car le client peut s'assurer, par lui-même et sans contacter le serveur de l'émetteur, que ce certificat est authentique. C'est la beauté du cryptage asymétrique.

Notez que 2. ne peut pas être fait sans 1.

Ceci est mieux expliqué dans ce grand diagramme que j'ai fait il y a quelque temps

(passez à "qu'est-ce qu'une signature?" en bas)

goutte

ychaouche
la source
9
Cela aurait dû être la réponse acceptée. La réponse de @Eli Courtwright est un moyen de faire court à mon humble avis pour comprendre le fonctionnement des certificats.
Felix Crazzolara
La lecture de cette fois peut ne pas être suffisante, mais si vous êtes déjà familier avec des morceaux de SSL, cela rassemble vraiment tout. Bon travail!
Cameron Gagnon
Image fantastique. Enfin quelque chose qui explique mes questions. Partout où je vais pour aller en profondeur, je viens de dire "le navigateur vérifie que le certificat est correct". MAIS COMMENT LE FAIT-IL?. Cela donne une réponse.
ori6151
8

Le client dispose d'un magasin prédéfini de clés publiques des autorités de certification SSL. Il doit y avoir une chaîne de confiance entre le certificat du serveur et les autorités intermédiaires jusqu'à l'un des certificats dits "racine" pour que le serveur soit approuvé.

Vous pouvez examiner et / ou modifier la liste des autorités de confiance. Souvent, vous faites cela pour ajouter un certificat pour une autorité locale en qui vous avez confiance - comme l'entreprise pour laquelle vous travaillez ou l'école que vous fréquentez ou pas.

La liste prédéfinie peut varier en fonction du client que vous utilisez. Les grands fournisseurs de certificats SSL assurent que leurs certificats racine sont dans tous les principaux navigateurs ($$$).

Les attaques de type Monkey-in-the-middle sont "impossibles" à moins que l'attaquant ne dispose de la clé privée d'un certificat racine de confiance. Étant donné que les certificats correspondants sont largement déployés, l'exposition d'une telle clé privée aurait de sérieuses implications pour la sécurité du commerce électronique en général. Pour cette raison, ces clés privées sont très, très étroitement gardées.

nsayer
la source