Une nouvelle version du navigateur Firefox se prépare, version 52. Cela annonce un tournant pour le Web voire même une nouvelle ère. Comme Chrome, Firefox a récemment mis en place un message d’alerte quand un utilisateur vient se connecter via un formulaire login/password à un site à travers une page dit non sécurisé (http://www.example.com).

Pour le moment, les navigateurs ont décidé de s’attaquer à cette phase de connexion. Jusqu’à maintenant, Firefox affichait simplement un cadenas barré lorsque l’on est sur une page web n’utilisant pas un certificat ‘Secure’ contenant un champ de formulaire pour entrer un mot de passe.

Prenons un instant pour comprendre le fonctionnement moteur du système HTTPS signifiant HyperText Transfer Protocol Secure.

TCP HTTP Secure

Déjà, le S qui signifie ‘Secure’ dans HTTPS provient du protocole ‘Transport Layer Security’, dit TLS, qui est indépendant. Ce protocole TLS se place entre TCP (Transmission Control Protocol) et HTTP (HyperText Transfer Protocol).

En clair, cela signifie que le truc TLS (Certificat) est positionné entre le truc qui gère le transport/autoroute (Internet) et le truc qui gère les échanges client-serveur (Web).

Techniquement,

Moteur TCP/IP

During May 1974, the Institute of Electrical and Electronic Engineers (IEEE) published a paper titled A Protocol for Packet Network Intercommunication. The paper’s authors, Vint Cerf and Bob Kahn, described an internetworking protocol for sharing resources using packet-switching among the nodes.

A central control component of this model was the Transmission Control Program that incorporated both connection-oriented links and datagram services between hosts.

The monolithic Transmission Control Program was later divided into a modular architecture consisting of the Transmission Control Protocol at the connection-oriented layer and the Internet Protocol at the internetworking (datagram) layer. The model became known informally as TCP/IP, although formally it was henceforth termed the Internet Protocol Suite.

La suite TCP/IP est l’ensemble des protocoles utilisés pour le transfert des données sur Internet.

Le terme TCP/IP vient d’après le nom de ses deux premiers protocoles : TCP (Transmission Control Protocol) et IP (Internet Protocol) …inventé dans les années 70.

Transmission Control Protocol : le Transporteur

Une session TCP fonctionne en trois phases :

  1. l’établissement de la connexion
  2. les transferts de données
  3. la fin de la connexion

L’établissement de la connexion se fait par un handshaking (poignée de mains) en trois temps. La rupture de connexion, elle, utilise un handshaking en quatre temps. Pendant la phase d’établissement de la connexion, des paramètres comme le numéro de séquence sont initialisés afin d’assurer la transmission fiable (sans perte et dans l’ordre) des données.

Internet Protocol

The Internet Protocol (IP) is the principal communications protocol in the Internet protocol suite for relaying datagrams across network boundaries. Its routing function enables internetworking, and essentially establishes the Internet.

IP has the task of delivering packets from the source host to the destination host solely based on the IP addresses in the packet headers. For this purpose, IP defines packet structures that encapsulate the data to be delivered. It also defines addressing methods that are used to label the datagram with source and destination information.

Historically, IP was the connectionless datagram service in the original Transmission Control Program introduced by Vint Cerf and Bob Kahn in 1974; the other being the connection-oriented Transmission Control Protocol (TCP). The Internet protocol suite is therefore often referred to as TCP/IP.

The first major version of IP, Internet Protocol Version 4 (IPv4), is the dominant protocol of the Internet. Its successor is Internet Protocol Version 6 (IPv6).

IP versions 0 to 3 were experimental versions, used between 1977 and 1979. The following Internet Experiment Note (IEN) documents describe versions of the Internet Protocol prior to the modern version of IPv4.

Version 5 was used by the Internet Stream Protocol, an experimental streaming protocol.

The successor to IPv4 is IPv6. Its most prominent difference from version 4 is the size of the addresses. While IPv4 uses 32 bits for addressing, yielding c. 4.3 billion (4.3×109) addresses, IPv6 uses 128-bit addresses providing ca. 340 undecillion, or 3.4×1038 addresses.

Internet Protocol : des adresses

Internet Protocol fournit les informations de routage des données sur le réseau, et décrit une méthode de fragmentation des informations à transporter, sous la forme de datagrammes.

Par exemple, un message d’une longueur d’un million d’octets transporté sur un réseau IP sera découpé en une multitude de datagrammes ou paquets IP.

Ces paquets comprennent de multiples champs d’entête, l’adresse IP source et l’adresse IP du destinataire, suivis des données elles-mêmes, par son émetteur, puis envoyé à son destinataire qui aura la charge de réassembler les paquets pour reconstituer le message source.

Chaque paquet de données est enveloppé par IP qui y ajoute différentes informations tel que l’adresse IP de l’expéditeur, l’adresse IP du destinataire et des données supplémentaires qui permettent de bien contrôler l’acheminement de l’ensemble.

IP ?

L’adresse IP est une adresse physique unique attribuée à chaque appareil connecté à Internet.

L’adresse IP (type IPv4) se présente sous forme de 4 blocs de nombres (entre 0 et 255) séparés par un point entre chaque bloc de nombre.

Ensuite, l’adresse IP permet de s’adresser à un ordinateur identifié précisément et unique. Mais il faut aller jusqu’au « logiciel » client pour remettre le paquet en « main propre ».

Le numéro de port permet de s’adresser à un logiciel identifié précisément et unique installé sur l’Ordinateur/Tablette/Smartphone.

Ainsi, TCP/IP est utilisé pour l’échange client/serveur. Via navigateur Web, le protocole HTTP utilise le protocole TCP/IP pour pouvoir envoyer et recevoir des pages Web et des médias (via fichiers images, sons, vidéos)

Les données des logiciels (dont le navigateur Web) sont encapsulées (enveloppées) par TCP.

Ce paquet TCP et lui-même encapsulé par IP.

Le paquet IP peut être encapsulé par Ethernet pour être transmis sur réseau local par câble.


stack TCP/IP

Le terme de « pile TCP/IP » est souvent employé, traduit littéralement de ‘stack TCP/IP’. Le mot français correspondant à stack est précisément « couche » ou strate (en géologie) ou encore « empilement » dans ce contexte. Il y a donc un empilement de couche Réseau, Internet, Transport et Application. Ici, on va utiliser le terme secteur. On pourrait utiliser le terme de calque aussi, terme bien connu des graphiste.

In English: Network layer, Internet layer, Transport layer, Application layer.

Ici comme on est passionné de course automobile et donc de circuit, on utilise le terme « secteur ». Un circuit automobile est habituellement divisé en plusieurs secteurs afin de pour faciliter le chronométrage.

La communication de ces paquets passe donc par un ensemble de secteurs empilées :

Chaque secteur a un rôle précis : conversion, routage, découpage, vérification.

Chaque secteur dialogue avec le secteur juste au-dessus et celui juste au-dessous.

Chaque secteur fournit des services au secteur au-dessus, et utilise les services du secteur en-dessous.

chaque secteur encapsule les données venant du secteur du dessus en y ajoutant ses propres informations avant de le passer au secteur du dessous.

Par exemple, le secteur TCP fournit des services au secteur au dessus (par exemple HTTP) et utilise le secteur en dessous (IP).

Les données traversent les secteurs vers le bas quand elles sont envoyées, et remontent les secteurs à la réception (genre circuit en mode miroir;) GG si tu as compris la référence)

secteur Accès Réseau

Le secteur « Accès réseau » est le premier secteur de la pile TCP/IP, en capacités à accéder à un réseau physique via réseau local (ethernet) ou connexion Wi-Fi.

L’ensemble de ces actions est en fait réalisé par le système d’exploitation (Windows/Linux/MacOS/etc.) et grâce aux pilotes (drivers) logiciel du matériel permettant la connexion au réseau (driver de la carte réseau).

secteur Internet

Le secteur « Internet » est le secteur qui définit les datagrammes (paquets de données) et qui gère les notions d’adressage IP (Internet Protocole).

Cela permet l’acheminement de ces datagrammes vers des machines distantes ainsi que de la gestion de leur fragmentation et de leur assemblage à réception.

secteur Transport

Les protocoles des secteurs précédentes (Accès Réseau, Internet) permettaient d’envoyer des informations d’une machine à une autre.

Le secteur « Transport » permet à des applications tournant sur des machines distantes de communiquer. Mais comment reconnaitre et identifier ces applications ?

En effet, suivant la machine et son système d’exploitation (Windows/Linux/MacOS/etc.), l’application peut être un programme, ou un processus…

Il y a un système de numéro qui a été mis en place afin de pouvoir associer un type d’application à un type de données. Ces identifiants sont appelés « ports ».

secteur Application

Le secteur « Application » est le secteur située au sommet de la pile TCP/IP.

Ce secteur contient les applications réseaux permettant de communiquer grâce aux secteurs en-dessous (bas niveau), grâce au TCP.

Les applications réseaux sont des services réseau, c’est-à-dire des applications fournies à l’utilisateur pour assurer l’interface avec le système d’exploitation.

C’est dans le secteur application que se situent la plupart des programmes réseau.

Ces programmes et les protocoles qu’ils utilisent incluent :

HTTP (HyperText Transfer Protocol),
FTP (File Transfer Protocol),
SMTP (Simple Mail Transfer Protocol),
SSH (Secure Shell),
DNS (Domain Name System) entre autres.

Les applications fonctionnent généralement au-dessus de TCP et sont souvent associées à un port bien connu. Exemples :

HTTP port TCP 80
FTP port TCP 21
SSH port TCP 22
DNS port TCP 53

Ces ports ont été assignés par l’IANA (Internet Assigned Numbers Authority) département de l’ICANN (Internet Corporation for Assigned Names and Numbers), l’autorité suprême de régulation de l’Internet.

Cette liste est reprise par les différents systèmes d’exploitation (Windows, MacOs, Unix, Linux, etc.).


Moteur TCP/IP – secteur Application – HTTP port TCP 80

protocole HTTP ?

HyperText Transfer Protocol, connu par l’abréviation HTTP, est un protocole de communication client-serveur développé pour le World Wide Web, fonctionnant sur Internet.

Pour revenir à la base, HTTP c’est le protocole d’Internet qui permet à un serveur hébergeant un site de communiquer avec un navigateur, comme Firefox ou Chrome, pour afficher un site. C’est donc un pont de type autoroute. Mais voilà, l’autoroute que nous utilisons tous les jours est ancienne puisque le protocole actuel, HTTP/1.1, a été standardisé dans les années fin 90.

HTTP, ce protocole de transfert entre client et serveur, représente les fondements du web d’aujourd’hui et ce depuis 1990. Depuis sa version 1.0, ce fameux protocole nous permet de décrire le contenu des messages que l’on veut faire transiter entre client et serveur via des en-têtes.

Une des en-têtes employées est celle du Content-Type qui permet de décrire le format des données renvoyées. Ainsi, on peux dire que le résultat que le serveur renverra sera du HTML (text/html), du Javascipt (.js), un fichier pdf (.pdf), ou encore des images (.png, ou .jpg), bref… Tous les formats de fichier qu’un navigateur Web peut comprendre.

La date du 6 août 1991 est considérée par beaucoup comme l’annonce officielle et publique du World Wide Web sur le réseau Internet suite à l’annonce par Tim Berners Lee des concepts fondamentaux du web dans un article intitulé Qualifiers on Hypertext links posté dans le groupe de news « alt.hypertext ». Cet article fait suite aux développements faits conjointement avec Robert Cailliau fin décembre 1990.

Durant cette période, les deux chercheurs ont en effet développer un ensemble de prototypes logiciels incluant :

Le protocole HTTP se situe au niveau du secteur Application en s’appuyant sur le protocole TCP port 80 dans un environnement « Client-Serveur ».

L’environnement client-serveur désigne un mode de communication à travers un réseau entre plusieurs programmes : l’un, qualifié de client, envoie des requêtes. L’autre est qualifiés de serveurs, attendent les requêtes des clients et y répondent.

Par extension, le client désigne également l’ordinateur ou la machine virtuelle sur lequel est exécuté le logiciel client (navigateur web), et le serveur ou l’ordinateur sur lequel est exécuté le logiciel serveur (serveur web).

On donc le navigateur Web qui échange avec le serveur Web.

  1. le serveur HTTP ouvre un port en écoute (usuellement le port 80)
  2. le client HTTP se connecte au port en écoute du serveur
  3. le client transmet une requête à l’aide de la commande ‘GET’ (To get : obtenir la ressource située à l’adresse spécifiée)
  4. le serveur transmet au client la réponse à sa requête
  5. le serveur ferme la connexion en guise de fin de réponse

Le développement du protocole HTTP sera par la suite porté par le ‘World Wide Web Consortium’.

En mai 1996, l’IETF (Internet Engineering Task Force) publie le document ‘RFC1945’ qui posera les bases du protocole ‘HTTP/1.0’.

Suivra en juin 1999, la note ‘RFC2616’ relative à la version ‘HTTP/1.1’.

Les principaux contributeurs à ces deux spécifications seront Tim Berners Lee (membre du W3 Consortium et chercheur au MIT), Roy Fielding (chercheur à Université de Californie, Irvine) et Henrik Frystyk (membre du W3 Consortium et chercheur au MIT).


Dans le blabla utile relatif aux échanges entre un client et un serveur HTTP, ils est échangent des infos essentiels tels que :

User-Agent

Agent utilisateur ou ‘User-Agent’ : il s’agit de l’environnement du client HTTP et donne des informations comme : le nom de l’application, la version, le système d’exploitation, la langue, etc.

Browser

Navigateur ou ‘Browser’ : il s’agit du nom du client HTTP parmi nombreux navigateurs web, pour toutes sortes de matériels (ordinateur personnel, tablette tactile, téléphones mobiles, etc.) et pour différents systèmes d’exploitation (GNU/Linux, Windows, MacOS, iOS, Android). Les plus utilisés à l’heure actuelle sont Chrome, Firefox, Internet Explorer, Edge, Safari, Opera.

Website

Site Web ou ‘Website’ : il s’agit des ressources stocké sur le serveur HTTP, ce sont les adresses des pages web. En fait, le sigle URL (de l’anglais Uniform Resource Locator), ou usuellement dénommé « adresse web », désigne une chaîne de caractères utilisée pour adresser les ressources du Web : document HTML, image, son, video. C’est le chemin de chaque fichier. Sur le Web, une image est une adresse. Le fichier lui est stocké sur le serveur.

Host

Serveur hébergé ou ‘Host server’ : il s’agit du serveur HTTP, le logiciel servant des requêtes respectant le protocole de communication client-serveur HTTP, qui a été développé pour le Web.

Les versions suivante du HTTP/1.1 ont permis l’enrichissement du dialogue entre le client et le serveur en intégrant notamment la transmission de la version utilisée par les deux parties, l’ajout de commandes en supplément de « GET », mais aussi l’échange d’entêtes de données (HTTP Headers). Celles-ci permettent au client de spécifier par exemple le language (EN, FR, etc.) dans lequel il souhaite que le serveur lui réponde. Ces ‘headers’ permettent également au serveur de spécifier la durée de vie d’un contenu (Time to Live).

commandes HEAD, GET, POST, PUT, DELETE

GET : To get, obtenir requête de la ressource située à l’URL spécifiée
HEAD : To head, dirigier requête de l’en-tête de la ressource située à l’URL spécifiée
POST : To post, envoyer données au programme situé à l’URL spécifiée
PUT : To put, poser les données à l’URL spécifiée
DELETE : To delete, supprimer la ressource située à l’URL spécifiée

Exemple de requête afin d’obtenir le fichier exemple.txt du répertoire /archive sur le serveur www.example.com :

GET /archive/exemple.txt HTTP/1.1
Host: www.example.com
Accept-Language: fr

La réponse d’un serveur HTTP se décompose ainsi :

code
message
code retour du serveur
message texte additionnel au code retour
contenu de la réponse

Exemple de réponse suite à la demande du fichier « http://www.example.com/archive/exemple.txt » :

HTTP/1.1 200 OK
Date: Mon, 06 Mar 2017 00:01:23 GMT
Content-Type: text/html; charset=utf-8

Ceci est un document texte.
This is a text document.

Les différentes méthodes de ‘queries’ supportées par les versions actuelles du protocole HTTP sont au nombre de 8 :

Les méthodes HEAD, GET, OPTIONS et TRACE sont définies comme étant des méthodes « sûres » puisqu’elle ne sollicitent le serveur uniquement pour une interrogation et non une modification des données qu’il héberge.

Par opposition, les méthodes POST, PUT et DELETE sont définies comme étant des méthodes « non-sûres » puisqu’elle s’inscrivent dans une démarche de modification de contenu sur le serveur.

L’un des principaux apports de la version 1.1 du HTTP est le mécanisme de connexions persistantes, appelé aussi mécanisme ‘Keep-Alive’.

Il permet à un serveur, si le client le stipule, de conserver « ouverte » la connexion entre les deux. Ceci a l’avantage de réduire le temps de communication dans la mesure où les deux parties ne renégocient pas de nouvelles connexions après la première requête, et de permettre l’envoi de plusieurs requêtes simultanées par le client (exemple : le contenu d’une page HTML et les images qui lui sont associées).


schema TCP/IP - HTTP - by DESIGNMOTEUR START-UP -
schema TCP/IP – HTTP – by DESIGNMOTEUR START-UP –

Maintenant que l’on a mieux compris le fonctionnement de base du moteur HTTP… regardons ce HTTPS.

Moteur TCP/IP – secteur Application – HTTPS port TCP 443

protocole HTTPS ?

Déjà, le S qui signifie ‘Secure’ dans HTTPS provient du protocole ‘Transport Layer Security’, dit TLS, qui est indépendant et se place entre TCP (Transmission Control Protocol) et HTTP (HyperText Transfer Protocol).

En clair, cela signifie que le truc TLS (Certificat) est positionné entre le truc qui gère le transport/autoroute (Internet) et le truc qui gère les échanges client-serveur (Web).

Moteur SSL/TLS

L’ancestrale SSL qui signifie Secure Sockets Layer et son équivalent actuel TLS signifie Transport Layer Security, ceux sont tous les deux des protocoles situés entre le secteur Transport et secteur Application. Ainsi, on retrouve leur positionnement sur le schéma suivant représentant de la pile TCP/IP version HTTPS.


schema TCP IP HTTPS - 2017 - by DESIGNMOTEUR START-UP
schema TCP IP HTTPS – 2017 – by DESIGNMOTEUR START-UP

fonctionnalités du SSL/TLS

SSL/TLS se comportent comme un secteur intermédiaire supplémentaire, car ils sont indépendants du protocole utilisé au niveau application. Cela signifie donc qu’il peut aussi bien être employé pour sécuriser une transaction web, l’envoi ou la réception d’email, etc.

SSL/TLS sont donc transparents pour l’utilisateur et ne nécessitent pas l’emploi de protocoles de niveau Application spécifiques.

SSL/TLS proposent les fonctionnalités suivantes :

Authentification – Le client doit pouvoir s’assurer de l’identité du serveur. Depuis SSL 3.0, le serveur peut aussi demander au client de s’authentifier. Cette fonctionnalité est assurée par l’emploi de certificats.

Confidentialité – Le client et le serveur doivent avoir l’assurance que leur conversation ne pourra pas être écoutée par un tiers. Cette fonctionnalité est assurée par un algorithme de chiffrement.

Identification et intégrité – Le client et le serveur doivent pouvoir s’assurer que les messages transmis ne sont ni tronqués ni modifiés (intégrité), qu’ils proviennent bien de l’expéditeur attendu. Ces fonctionnalités sont assurées par la signature des données.

SSL/TLS reposent sur la combinaison de plusieurs concepts cryptographiques, exploitant la fois le chiffrement asymétrique et le chiffrement symétrique.

SSL/TLS se veut évolutif, puisque le protocole est indépendant des algorithme de cryptage et d’authentification mis en oeuvre dans une transaction. Cela lui permet de s’adapter aux besoins des utilisateurs et aux législations en vigueur. Cela assure de plus une meilleure sécurité, puisque le protocole n’est pas soumis aux évolutions théoriques de la cryptographie. Et si un chiffrement devient obsolète, le protocole reste exploitable en choisissant un chiffrement réputé sûr.

via frameip.com/ssl-tls/

Secteur SSL/TLS

Le protocole SSL/TLS se décompose en deux secteurs principales :

SSL/TLS Handshake Protocol, ou « poignée de mains » entre Client-Serveur (processus automatisé de négociation qui établit les paramètres d’une communication entre deux entités avant que la communication commence) choisit la version de SSL (v1, v2, v3) ou TLS (1.0, 1.1, 1.2) qui sera utilisée, réalise l’authentification par l’échange de certificats, puis permet la négociation entre le client et le serveur d’un niveau de sécurité au travers du choix des algorithmes de cryptage. C’est le protocole de configuration de la transaction.

SSL/TLS Record Protocol encapsule et fragmente les données. C’est le protocole de transmission des données.

Dans une première phase, le client et le serveur vont effectuer la négociation avant de configurer la transaction et d’échanger les clés de chiffrement. Puis ils effectueront l’échange de données.

La majeure partie des implémentations de SSL/TLS se trouve dans les navigateurs et serveurs web.

via frameip.com/ssl-tls/

Sous le capot moteur du SSL/TLS : OpenSSL

Le serveur Web, notamment, peut exploiter SSL/TLS grâce une implémentation basée sur OpenSSL.

OpenSSL est une boîte à outils de chiffrement comportant deux bibliothèques (une de cryptographie générale et une implémentant le protocole SSL), ainsi qu’une commande en ligne. OpenSSL supporte SSL 2.0, SSL 3.0 et TLS 1.0.


Moteur TCP/IP – secteur Application – secteur TLS – HTTPS port TCP 443

TLS est simplement une évolution de SSL normalisée par l’IETF (Internet Engineering Task Force) qui élabore les standards Internet.

Transport Layer Security (TLS), et son prédécesseur Secure Sockets Layer (SSL), sont des protocoles de sécurisation des échanges sur Internet. Le protocole SSL a été développé à l’origine par Netscape (début 1990 jusqu’en 1996). L’IETF, en a poursuivi le développement en le rebaptisant Transport Layer Security (TLS).

On parle parfois de SSL/TLS pour désigner indifféremment SSL ou TLS.

TLS (ou SSL) fonctionne suivant un mode client-serveur. Il permet de satisfaire aux objectifs de sécurité suivants :

-l’authentification du serveur ;
-la confidentialité des données échangées (ou session chiffrée) ;
-l’intégrité des données échangées ;
-de manière optionnelle, l’authentification du client (mais dans la réalité celle-ci est souvent assurée par le serveur).

Novembre 1996 : SSL 3.0, la dernière version de SSL, qui inspirera son successeur TLS. Ses spécifications sont rééditées en août 2008. Le protocole est banni en 2014, à la suite de la publication de la faille POODLE, ce bannissement est définitivement ratifié en juin 2015

Le protocole TLS n’est pas structurellement différent de la version 3 de SSL, mais des modifications dans l’utilisation des fonctions de hachage font que les deux protocoles ne sont pas directement interopérables.

Cependant TLS, comme SSLv3, intègre un mécanisme de compatibilité ascendante avec les versions précédentes, c’est-à-dire qu’au début de la phase de négociation, le client et le serveur négocient la « meilleure » version du protocole disponible par tous deux.

Pour des raisons de sécurité, en 2011, la compatibilité de TLS avec la version 2 de SSL est abandonnée

via https://fr.wikipedia.org/wiki/Transport_Layer_Security

Ainsi, de 1996 à 2014, SSLv3 a été très largement utilisé. Le nouveau protocole TLS 1.0, lui a grandi dans l’ombre de son encombrant prédécesseur.

Le retour de l’ecommerce

En avril 2015, l’organisation PCI SSC (Payment Card Industry Security Standards Council, c’est-à-dire VISA, MasterCard et les autres réseaux de cartes bancaires) a décidé d’interdire prochainement l’usage de TLS 1.0 pour mieux protéger les informations bancaires.

Les Petits sites e-commerce externalisent en général cette partie en la confiant à un ‘Payment Solution Provider’ qui se doit d’être conforme PCI DSS.

Les Gros se font certifier directement afin de pouvoir enregistrer les infos bancaires.

Des start-up propose des solutions innovantes afin de permettre au Petits de mettre en place une solution de ‘Payment Solution Provider’ facile à mettre en oeuvre, tant que le site est hébergé sur du HTTPS avec TLS 1.2 (qui a abandonné la compatibilité avec SSLv2 au passage) voire TLS 1.3 (Abandon de toute compatibilité avec SSLv2 et SSLv3).

Bye bye SSL.

Les navigateurs supportant par défaut la dernière version TLS 1.1 et TLS 1.2 sont :

  • Google Chrome 50+ & Android 5+
  • Microsoft Internet Explorer 11+ & Edge
  • Apple Safari 7+ & iOS 9.0+
  • Mozilla Firefox 36+
  • Opera 17+

Hello TLS

Lorsqu’un utilisateur se connecte à un site web qui utilise TLS, les étapes suivantes ont lieu :

  1. le navigateur du client envoie au serveur une demande de mise en place de connexion sécurisée par TLS.
  2. Le serveur envoie au client son certificat : celui-ci contient sa clé publique, ses informations (nom de la société, adresse postale, pays, e-mail de contact…) ainsi qu’une signature numérique sous forme de texte chiffré.
  3. Le navigateur du client tente de déchiffrer la signature numérique du certificat du serveur en utilisant les clés publiques contenues dans les certificats des Autorités de certifications (AC) intégrés par défaut dans le navigateur.
    1. Si l’une d’entre elles fonctionne, le navigateur web en déduit le nom de l’autorité de certification qui a signé le certificat envoyé par le serveur. Il vérifie que celui-ci n’est pas expiré puis envoie une demande OCSP (Online Certificate Status Protocol) à cette autorité pour vérifier que le certificat du serveur n’a pas été révoqué.
    2. Si aucune d’entre elles ne fonctionne, le navigateur web tente de déchiffrer la signature numérique du certificat du serveur à l’aide de la clé publique contenue dans celui-ci.
      1. En cas de réussite, cela signifie que le serveur web a lui-même signé son certificat. Un message d’avertissement s’affiche alors sur le navigateur web, prévenant l’utilisateur que l’identité du serveur n’a pas été vérifiée par une autorité de certification et qu’il peut donc s’agir potentiellement d’un site frauduleux.
      2. En cas d’échec, le certificat est invalide, la connexion ne peut pas aboutir.
  4. Le navigateur du client génère une clé de chiffrement symétrique (à la différence des clés privés et publiques utilisés par les certificats qui sont asymétriques), appelée clé de session, qu’il chiffre à l’aide de la clé publique contenue dans le certificat du serveur puis transmet cette clé de session au serveur.
  5. Le serveur déchiffre la clé de session envoyée par le client grâce à sa clé privée.
  6. Le client et le serveur commencent à s’échanger des données en chiffrant celles-ci avec la clé de session qu’ils ont en commun.

    On considère à partir de ce moment que la connexion TLS est alors établie entre le client et le serveur.
  7. Une fois la connexion terminée (déconnexion volontaire de l’utilisateur ou si durée d’inactivité trop élevée), le serveur révoque la clé de session.

via https://fr.wikipedia.org/wiki/Transport_Layer_Security


Mais comment on passe d’une adresse de type nnn.nnn.nnn.nnn à un nom de domaine exemple.com !?

Grâce au Domain Name System (ou DNS, système de noms de domaine) le service permettant de traduire un nom de domaine en informations de plusieurs types qui y sont associées, notamment en adresses IP de la machine portant ce nom.

Domain Name System

Pour faciliter l’accès aux systèmes qui disposent de ces adresses, un mécanisme a été mis en place permettant d’associer à une adresse IP un nom, plus simple à retenir, appelé « nom de domaine ». Résoudre un nom de domaine consiste à trouver l’adresse IP qui lui est associée.

Avant le DNS, la résolution d’un nom sur Internet devait se faire grâce à un fichier texte appelé HOSTS.TXT géré par le NIC (Network Information Center, en 1974)

Ce rôle est aujourd’hui tenu par les registres de noms de domaine et les registres d’adresses IP, qui ont souvent gardé le sigle NIC dans leur nom.

InterNIC

InterNIC (The Internet’s Network Information Center) était le service d’information enregistrant l’ensemble des noms de domaines d’Internet. Cet organisme a été instauré en 1992, afin de pouvoir faire face à l’ouverture d’Internet au public et vit son rôle disparaître en 1998, lors de l’ouverture à la concurrence; pour être remplacé par l’Internet corporation for assigned names and numbers (ICANN).

AFNIC

L’AFNIC (Association française pour le nommage Internet en coopération) association loi de 1901, a été créée en 1997 par la volonté conjointe de l’INRIA et de l’État français (ministères de l’industrie, des télécommunications et de la recherche).

ICANN

Internet Corporation for Assigned Names and Numbers (ICANN) est une autorité de régulation de l’Internet. C’est une société de droit californien à but non lucratif ayant pour principales missions d’administrer les ressources numériques d’Internet, telles que l’adressage IP et les noms de domaines de premier niveau (TLD : Top Level Domain), et de coordonner les acteurs techniques.

Par le contrôle qu’elle exerce sur l’affectation des noms de domaines de premier niveau, l’ICANN délivre en pratique un droit de délégation sur la vente des noms de domaines à différentes organisations, comme VeriSign pour les domaines .com et .net ou l’AFNIC pour le domaine .fr.

Actuellement, l’AFNIC a pour mission de gérer les domaines Internet nationaux de premier niveau de France (.fr), La Réunion (.re), Terres australes et antarctiques françaises (.tf), Mayotte (.yt), Saint-Pierre-et-Miquelon (.pm) et Wallis-et-Futuna (.wf). L’AFNIC se définit également comme fournisseur de solutions techniques et de services de registre, elle est notamment le partenaire technique de nouveaux domaines génériques dont le .paris, le .bzh, le .alsace, le .ovh.

Ce sont des domaines de premier niveau national (country code top-level domain’ : ccTLD) maintenus par l’Internet Assigned Numbers Authority (IANA) pour une utilisation dans le système de nom de domaine d’Internet.

IANA

L’IANA est un département de l’ICANN, une société américaine privée à but non lucratif qui supervise l’allocation globale de l’adresse IP, le numéro système autonome allocation, la gestion de la zone racine dans le Domain Name System (DNS).

Dans le système des noms de domaine, le point est un séparateur de domaine.

via https://fr.wikipedia.org/wiki/Internet_Assigned_Numbers_Authority


adresse web

Les adresses web sont l’une des trois inventions à la base du World Wide Web, et selon ses inventeurs, la plus fondamentale.

Le grand public les connaît sous la forme de libellés d’une dizaine de caractères, commençant souvent par www, et qui identifient une page web ; par exemple www.example.com

L’adresse techniquement correcte doit en fait commencer par un nom de protocole ; pour cet exemple, cela donne http://www.example.com

Les adresses web sont la base des hyperliens du Web.

Donc une « adresse web » tel que https://www.example.com est composé du protocole HTTP des signes : / / des initiales World Wide Web puis d’un point puis du nom de domaine suivi du point et de l’extension 'Top Level Domain'.

Le www est la norme pour les sites internet mais on pourrait avoir n’importe quoi à la place (ou même rien du tout) sans www. Le tout est de rediriger vers https://www.example.com ce qui est sur https://example.com.

Et si on place des trucs sur https://blog.example.com alors c’est sur un sous domaine hébergé sur example.com (adresse nnn.nnn.nnn.nnn) dans le dossier /blog


double slash ?

Dialogue with Mr. Berners-Lee, director of the World Wide Web Consortium and these days a professor at M.I.T., at a symposium on the future of technology last Thursday, fit that mold. I started, just for fun, with a historical question. If he were do it over again today, would he do anything differently? Any regrets?

Mr. Berners-Lee smiled and admitted he might make one change — a small one. He would get rid of the double slash “//” after the “http:” in Web addresses.

The double slash, though a programming convention at the time, turned out to not be really necessary, Mr. Berners-Lee explained. Look at all the paper and trees, he said, that could have been saved if people had not had to write or type out those slashes on paper over the years — not to mention the human labor and time spent typing those two keystrokes countless millions of times in browser address boxes. (Today’s browsers, of course, automatically fill in the “http://” preamble when a user types a Web address.)

via https://bits.blogs.nytimes.com/2009/10/12/the-webs-inventor-regrets-one-small-thing/?_r=0


Dans le langage technique, on ne parle pas d’adresse web mais d’URI (pour Uniform Resource Identifier) et d’URL (pour Uniform Resource Locator). Il s’agit de standards d’Internet qui spécifient la syntaxe et la sémantique des adresses Web.


:80 correspond au port utilisé sur le serveur web. Il indique la « porte » technique à utiliser pour accéder aux ressources du serveur.

Généralement, ce fragment est absent car le navigateur utilise les ports standards associés aux protocoles. Si le port utilisé par le serveur n’est pas celui par défaut, il faudra l’indiquer dans l’adresse (URL).

via https://developer.mozilla.org/fr/Apprendre/Comprendre_les_URL

Les navigateurs Web identifie le port selon le protocole HTTP ou HTTPS, respectivement port 80 pour HTTP ou port 443 pour HTTPS.


Mais pour que le protocole HTTP soit ‘Secure’, il faut un tiers de confiance qui gère la phase de certification ! L’aspect le plus drastique de la mise en place du HTTPS.


Certificat d’authentification

HTTPS permet au visiteur de vérifier l’identité du site web auquel il accède, grâce à un certificat d’authentification émis par une autorité tierce, réputée fiable. Il garantit théoriquement la confidentialité et l’intégrité des données envoyées par l’utilisateur (notamment des informations entrées dans les formulaires) et reçues du serveur. Il peut permettre de valider l’identité du visiteur, si celui-ci utilise également un certificat d’authentification client.

HTTPS est généralement utilisé pour les transactions financières en ligne : commerce électronique, banque en ligne, courtage en ligne, etc. Il est aussi utilisé pour la consultation de données privées, comme les courriers électroniques, par exemple.

Depuis le début des années 2010, le HTTPS s’est également généralisé sur les réseaux sociaux.

Par défaut, les serveurs HTTPS sont connectés au port TCP 443.

Lorsque on veux obtenir/acheter un certificat auprès d’un tiers de confiance, celui-ci va vous proposer plusieurs types de certificats : DV, BV/OV ou EV.

Domain Validation (DV) : Il authentifie uniquement le nom de domaine.

Business Validation (BV) ou Organization Validation (OV) : il faut fournir à l’autorité de certification des documents officiels concernant son entreprise ou association (KBis, Journal officiel, etc.). Après vérification, l’autorité émet un certificat qui relie votre domaine à votre entreprise. Le client peut alors voir sur son navigateur que le site correspond bien à la société via son déposé.

Extended Validation (EV) : Le plus exigeant en terme de certification (documents, délai d’émission, budget), généralement utilisé par les grandes entreprises du fait de son coût élevé, il met clairement en avant le nom de société dans le navigateur (à côté de la barre d’adresse).

via https://ircf.fr/actualites/5-conseils-pour-choisir-votre-certificat-ssl/


L’année 2016 a été charnière pour la popularisation du HTTPS grâce au projet Let’s Encrypt !


Let’s Encrypt ?

Let’s Encrypt, une autorité de certification lancée le 3 décembre 2015, fournit des certificats gratuits, uniquement de type Domain Validation (DV), pour le protocole cryptographique TLS au moyen d’un processus automatisé destiné à se passer du processus complexe actuel impliquant la création manuelle, la validation, la signature, l’installation et le renouvellement des certificats pour la sécurisation des sites internet.

Le projet Let’s Encrypt vise à généraliser l’usage de connexions sécurisées sur l’internet. En supprimant la nécessité de paiement, de la configuration du serveur web, des courriels de validation et de gestion de l’expiration des certificats, le projet est fait pour réduire de manière significative la complexité de la mise en place et de la maintenance du chiffrement TLS.

Sur un serveur GNU/Linux, l’exécution de seulement deux commandes est censée être suffisante pour paramétrer le chiffrement HTTPS, l’acquisition et l’installation de certificats, et ceci en quelques dizaines de secondes.

Un programme de gestion de certificats appelé ‘certbot​’ s’installe sur le client (le serveur web d’un inscrit). Ce programme réclame le certificat, effectue le processus de validation de domaine, installe le certificat, configure le chiffrement HTTPS dans le serveur HTTP et dans un second temps, renouvelle le certificat. Après l’installation, l’exécution d’une simple commande suffit à obtenir l’installation d’un certificat valide.

Le 14 septembre 2015, Let’s Encrypt distribue son premier certificat destiné au domaine helloworld.letsencrypt.org

Le même jour, l’organisation Internet Security Research Group soumet son certificat racine à Mozilla, Microsoft, Google et Apple. Le 19 octobre 2015, une signature croisée avec IdenTrust a été effectuée et les certificats sont désormais reconnus et validés par tous les navigateurs web.

Dans la semaine du 16 novembre 2015, le service a été rendu disponible au public.

via https://fr.wikipedia.org/wiki/Let%27s_Encrypt

Mi 2016, OVH, l’hébergeur français annonce que Let’s Encrypt est disponible ! L’objectif : fournir gratuitement des certificats SSL/TLS (Secure Sockets Layer/Transport Layer Security) reconnus par presque tous les navigateurs, de manière simple et automatisée, via un client open source.

En septembre 2016, plus de 10 millions de certificats ont été délivrés.


Certificat électronique ?

Un certificat électronique (aussi appelé certificat numérique ou certificat de clé publique) peut être vu comme une carte d’identité numérique. Il est utilisé principalement pour identifier et authentifier une personne physique ou morale, mais aussi pour chiffrer des échanges.

Il est signé par une autorités de certification (Certificate Authority) qui atteste du lien entre l’identité physique et l’entité numérique.

Les autorités de certification sont des organismes enregistrés et certifiés auprès d’autorités publiques et/ou de gouvernance de l’Internet qui établissent leur viabilité comme intermédiaire fiable.

via https://fr.wikipedia.org/wiki/Certificat_%C3%A9lectronique

Ces organismes diffusent leurs propres clés publiques et étant certifiées fiables, ces autorités sont en contact direct avec les principaux producteurs de navigateurs web (web browser)

…tels que Google Chrome (2008), Mozilla Firefox (2004), Apple Safari (2002), Microsoft Internet Explorer (1995) devenu Edge (2015), Opera (1994)

…qui incluent nativement les listes de clés des autorités de certification.

C’est cette relation qui est à la base de la chaîne de confiance. Ces clés sont appelées certificats racines et sont utilisées pour identifier les clés publiques d’autres organismes.

Let’s encrypt ( Autorités de Certification / Certificate Authority : CA)

  1. Let’s Encrypt hash vos données avec du SHA-256 (Secure Hash Algorithm)
  2. Let’s Encrypt chiffre le résultat du hash avec sa clé privé en chiffrement RSA
  3. Le résultat du chiffrement correspond à la signature
  4. Let’s Encrypt vous envoie votre certificat

Le navigateur Client utilise la clé publique Root CA afin de vérifier la signature du certificat intermédiaire Let’s Encrypt.

Client (navigateur web / web browser)

  1. Lors de la connexion à votre serveur, le client récupère le certificat du domaine.
  2. Le navigateur hash votre certificat avec du SHA-256 (défini dans le certificat du domaine)
  3. Le navigateur déchiffre la signature du certificat avec la clé publique récupérée dans le certificat.
  4. Le navigateur compare le résultat du hash avec le résultat du déchiffrement de la signature.

via https://blog.eleven-labs.com/fr/comprendre-le-ssltls-partie-3-certificats/


HTTPS necessary if form login/pass

En janvier 2017 le navigateur Google Chrome a commencé à identifier et signaler (sur l’interface utilisateur dans la zone de la barre adresse) les sites Web qui recueillent des informations (via formulaire de type identifiant/mot de passe) sans utiliser le protocole HTTPS.

Mozilla Firefox version 52 a fait de même en mars 2017.

Comme Chrome, Firefox version 55 bloquera par défaut tout envoi de position géographique à un site qui ne bénéficierait pas du HTTPS.


Outils et ressources :

https://openweb.eu.org/articles/https-introduction

http://sebsauvage.net/comprendre/tcpip/

http://histoire-internet.vincaria.net/post/histoire/internet/1991/HTTP

https://www.frameip.com/ssl-tls/
Citation et extraits via documentation par Vincent LIMORTE, François VERRY et _SebF

http://wiki.linuxwall.info/doku.php/fr:ressources:dossiers:ssl_pki:1_les_bases#tls_handshake_protocol

via https://blog.eleven-labs.com/fr/comprendre-le-ssltls-partie-3-certificats/

https://www.nextinpact.com/news/103583-firefox-52-active-support-webassembly-et-renforce-alerte-sur-sites-non-securises.htm

https://www.nextinpact.com/news/103678-firefox-55-bloquera-geolocalisation-pour-sites-sans-https.htm


MeetUp : HTTPS, tout ce qu’il faut savoir en 2017


Au début de l’année 2017, plus de la moitié des sites sont désormais en HTTPS : c’est la nouvelle norme ! Let’s encrypt a simplifié l’édition de certificats SSL/TSL mais leur mise en place sécurisée nécessite de connaître quelques points techniques.

Faisons le tour de ce que l’on doit connaître autour de l’HTTPS, raconté par les contes de fées #OVHmeetup.
0:00 / Présentation
2:43 / Pourquoi a été créé HTTPS ?
8:22 / Comment fonctionne HTTPS (partie 1) : bases de chiffrement
19:13 / Comment fonctionne HTTPS (partie 2) : édition de certificats X509 (dits certificats SSL)
42:11 / Comment déployer HTTPS (pour les sysadmin)
57:29 / Comment déployer HTTPS (pour les développeurs web)
1:03:45 / Qu’est ce que HTTPS va m’apporter ?
1:07:16 / Comment OVH peut m’aider pour le HTTPS ?


06/03/2017