Protocole https

Protocole https#

Le protocole HTTPS est l’association du protocole HTTP et du PROTOCOLE SSL/TLS.

  • Le protocole HTTP assure l’acheminement des données entre un client et un serveur. Cette transmission de données est basée sur des requêtes selon les méthodes GET ou POST.

  • Le protocole TLS assure le chiffrement des données pour qu’elles ne soient pas lisibles et l’échange de certificats pour s’assurer de la bonne identité du client et du serveur.

Il est possible de mettre en place sur une même machine un serveur WEB et un client pour observer les requêtes du protocole HTTP et même du protocole HTTPS.

Avertissement

Ce TP ne peut se faire que sur une machine virtuelle linux.

Travail préparatoire#

  1. Dans Thonny, vous devez vous assurer de la présence du module flask qui permet de créer un serveur WEB et du module pyopenssl qui se charge du chiffrement et des certificats du protocole TLS.

  2. Créer un dossier de travail protocole contenant les dossiers templates et static.

Premier serveur web

  1. Créer un fichier Python serveur.py contenant le code suivant:

     1from flask import Flask, render_template
     2
     3# Création de l'objet Flask (serveur web)
     4app = Flask(__name__)
     5
     6# On définit une route qui renvoie la page index.html
     7@app.route("/")
     8def accueil():
     9    return "C'est un serveur web !"
    10
    11# Lancement du serveur
    12if __name__ == '__main__':
    13    app.run(debug=True)
    
  2. Exécuter le fichier serveur.py puis ouvrez l’url http://localhost:5000/ dans un navigateur.

Ajouter un fichier HTML

  1. Créer, dans le dossier templates, une page WEB index.html contenant un titre de niveau 1 et un petit paragraphe.

  2. Modifier la ligne 9 du fichier Python serveur.py par la ligne suivante:

    return render_template("index.html")
    

Protocole TLS

Le module Flask prend en charge des certificats créés à la volée pour créer rapidement une connexion HTTPS.

  1. Ajouter en dernière ligne le paramètre ssl_context='adhoc' pour ajouter un protocole TLS au protocole HTTP:

    app.run(ssl_context='adhoc', debug=True)
    
  2. Relancez votre serveur si nécessaire et actualiser votre page WEB. Attention, on a changé de protocole. Si tout se passe normalement, vous obtenez :

    ../_images/url_non_securise.png ../_images/risque_securite.png

    Cliquez sur le bouton Avancé... puis sur le bouton Accepter le risque et poursuivre.

  3. Afficher et identifier votre certificat en donnant le nom du sujet, la validité et l’algorithme de chiffrement.

Ajouter son certificat

Lorsqu’on développe un serveur WEB, il est nécessaire d’avoir son propre certificat. On doit en faire la demande auprès d’une autorité de certification. Comment faire pour créer un certificat et faire des tests ? On crée un certificat dit auto-signé avec openssl.

  1. Avec openssl, créer une paire de clefs privée et publique (attention au chemin du dossier):

    openssl genrsa -out key.pem 4096
    
  2. Avec la paire de clefs créée, créer un certificat en utilisant la commande suivante:

    openssl req -new -x509 -days 365 -key key.pem -out cert.pem
    
  3. Actualiser le navigateur et vérifier que le certificat utilisé est bien celui créé précédemment.