Quelles sont les notions qui vont être abordées au cours de cet atelier CryptoPython ? Cet atelier a pour objectif de vous apprendre à créer un système de cryptographie d'information grace à Python et sa bibliothèque Cryptography. Vous allez ensuite exploiter cette solution via la construction d'API sous le Framework Flask. Vous allez donc créer des API (des routes) mais également découvrir les Actions et les Secrets GitHUB pour au final mettre en service et exploiter une solution Web de Cryptographie. Large programme mais tout à fait accessible et ne nécessitant pas de base technique particulière. Juste de l'observation et de la rigueur dans votre travail.
Objectif : Création d'un Repository GitHUB pour travailler avec son projet
Difficulté : Très facile (~10 minutes)
GitHUB est une plateforme en ligne utilisée pour stocker le code de son programme. GitHUB est organisé en "Repository", c'est à dire en répertoire (contenant lui même des sous répertoires et des fichiers). Chaque Repository sera indépendant les un des autres. Un Repository doit être vu comme un projet unique (1 Repository = 1 Projet). GitHUB est une plateforme très utilisée par les informaticiens.
Procedure à suivre :
1° - Créez vous un compte sur GitHub : https://github.com/
Si besoin, une vidéo pour vous aider à créer votre propre compte GitHUB : Créer un compte GitHUB
A noter que si vous possédez déjà un compte GitHUB, vous pouvez le conserver pour réaliser cet atelier. Pas besion d'en créer un nouveau.
Remarque importante : Lors de votre inscription, utilisez une adresse mail valide. GitHUB n'accepte pas les adresses mails temporaires
2° - Faites un Fork du Repository suivant : https://github.com/bstocker/EFREI_CryptoPython.git
Voici une vidéo d'accompagnement pour vous aider dans les "Forks" : Forker ce projet
Travail demandé : Créé votre compte GitHUB, faites le fork de ce projet et envoyez l'URL de votre Repository GitHUB par mail à votre enseignant.
Notions acquises lors de cette séquence :
Vous avez appris lors de cette séquence à créer des Repository pour stocker et travailler avec votre code informatique. Vous pourez par la suite travailler en groupe sur un projet. Vous avez également appris à faire des Forks. C'est à dire, faire des copies de projets déjà existant dans GitHUB que vous pourrez ensuite adapter à vos besoins.
Rendez-vous sur https://www.alwaysdata.com/fr/
Remarque : Attention à bien vous rappeler de vos Login/Password lors de la création de votre compte site car vous en aurez besoin plus tard pour la création de vos Secrets GitHUB.
Voici une vidéo d'accompagnement pour vous aider dans cette séquence de création d'un site sur Alwaysdata : Vidéo Alwaysdata
Procédure :
1° - Créez votre compte Alwaysdata (gratuit jusqu'à 100Mo, aucune carte nécéssaire).
2° - Depuis la console d'administration (Le panel d'administration de Alwaysdata) :
. 2.1 - Cliquez sur "Sites" (Colonne de gauche) puis supprimer votre site PHP (via l'icone de la Poubelle).
. 2.2 - Installer ensuite une application Flask (Bouton + Installer une application).
. . 2.2.1 Adresses = utilisez le sous-domaine qui vous appartient que vous trouverez dans l'information " Les sous-domaines suivants vous appartiennent et sont actuellement inutilisés : {Site}.alwaysdata.net
. . 2.2.2 Répertoire d'installation = /www/flask
. 2.2.3 N'oubliez pas d'Accepter les conditions.
3° - Autoriser les connexions SSH :
. 3.1 - Cliquez sur SSH (Accès distant).
. 3.2 - Modifier les paramètres de votre utilisateur.
. 3.3 - Définissez si besion un nouveau mot de passe.
. 3.4 - Cliquez sur Activer la connexion par mot de passe.
Travail demandé : Mettre en ligne votre application Flask "Hello World !" et copier l'URL de votre site et envoyez la par mail à votre enseignant.
Notions acquises lors de cette séquence :
Vous avez créer un hébergement (gratuit) et découvert également que vous pouvez installer bien d'autres applications (Django, Drupal, Jenkins, Magento, Symphony, etc...). Les perspectives sont nombreuses.
Objectif : Automatiser la mise à jour de votre hébergement Alwaysdata
Difficulté : Moyenne (~15 minutes)
Dans le Repository GitHUB que vous venez de créer précédemment lors de la séquence 1, vous avez un fichier intitulé CICD.yml et qui est déposé dans le répertoire .github/workflows. Ce fichier a pour objectif d'automatiser le déploiement de votre code sur votre site Alwaysdata. Pour information, c'est ce que l'on appel des Actions GitHUB. Ce sont des scripts qui s'exécutent automatiquement lors de chaque Commit dans votre projet (C'est à dire à chaque modification de votre code). Ces scripts (appelés actions) sont au format yml qui est un format structuré proche de celui d'XML.
Pour utiliser cette Action (CICD.yml), vous avez besoin de créer des secrets dans GitHUB afin de ne pas divulguer des informations sensibles aux internautes de passage dans votre Repository comme vos login et password par exemple.
Pour ce projet Métriques, vous avez 4 secrets à créer dans votre Repository GitHUB :
USERNAME = Le login qui est utilisé pour la connexion SSH.
PASSWORD = Le mot de passe qui est utilisé pour la connexion SSH.
ALWAYSDATA_TOKEN = Le token est à créer depuis l'interface d'administration Alwaysdata. Cliquez sur votre profil en haut à droite, puis sur 'Profil' puis sur 'Gérer les tokens'. Laissez le champ "Adresses IP autorisées" vide. Dans le cas contraire vous limiteriez les connexions seulement à une adresse IP. Pour le champ Application* mettez "Metriques" par exemple.
ALWAYSDATA_SITE_ID = Vous trouverez l'ID de votre site depuis l'interface d'administration Alwaysdata dans les paramètres de votre site (dans le titre #XXXXX) XXXXX étant l'ID de votre site. Ne prenez pas le # mais juste les chiffres.
Voici une vidéo pour vous expliquer le processus de création de vos secrets dans GitHUB : Création des secrets
Vous pouvez à présent lancer une action pour mettre en ligne votre solution.
Notions acquises de cette séquence :
Vous avez vu dans cette séquence comment créer des secrets GiHUB afin de mettre en place de l'industrialisation continue.
L'utilité des scripts d'actions (C'est à dire des scripts exécutés lors des Commits) est très importante mais sortes malheureusement du cadre de cet atelier faute de temps. Toutefois, je vous invites à découvrir cet outil via les différentes sources du Web (Google, ChatGPT, etc..).
1° - Connectez vous en SSH à votre serveur Alwaysdata via l'adresse suivante :https://ssh-{compte}.alwaysdata.net. Remarque importante, {compte} est à remplacer par votre compte Alwaysdata. C'est à dire le compte que vous avez utilisé pour renseigner votre secret GitHUB USERNAME.
2° - Une fois connecté, depuis de la console SSH, executez les commandes suivantes :
Commande 1 : pip install cryptography
Commande 2 : cp -r ~/.local/lib/python3.12/site-packages/* ~/www/flask/env/lib/python3.12/site-packages/
Bravo, votre serveur Flask de cryptographie est à présent opérationnel.
Votre solution est à présent opérationnelle. Vous pouvez testez vos routes (API) comme suit :
https://{Votre_URL}/
C'est route pointe sur le fichier d'accuei! helloWorld.html
https://{Votre_URL}/encrypt/{Valeur à encrypter}
Vous retourne votre valeur saisie dans l'URL encryptée
Exercice 1 : Création d'une API de décryptage
Créer une nouvelle route dans votre application afin de pouvoir décrypter la valeur saisie par l'utilisateur.
Cette fonctionnalité sera accéssible via la route suivante : /decrypt/
Exercice 2 : Clés personnelles
Dans les exercices précédents, la clé de cryptage (et décryptage) était unique pour tous les internautes.
Dans cet exercice N°2, l'internaute renseignera lui-même sa clé de cryptage et de décryptage.
Lors de vos développements, vous serez peut-être confronté à des erreurs systèmes car vous avez faits des erreurs de syntaxes dans votre code, faits de mauvaises déclarations de fonctions, appelez des modules inexistants, mal renseigner vos secrets, etc…
Les causes d'erreurs sont quasi illimitées. Vous devez donc vous tourner vers les logs de votre système pour comprendre d'où vient le problème :
Voici une vidéo pour accéder aux logs de vos Actions GitHUB : Vidéo Log GitHUB
Voici une vidéo pour vous expliquer comment accéder au logs de votre serveur Alwaysdata : Vidéo Log Alwaysdata