From 0ba40213a9b8c90e6cbca78c9e3e56fca6026384 Mon Sep 17 00:00:00 2001 From: Vincent <vincent.steinmann@etu.hesge.ch> Date: Thu, 20 Jan 2022 11:24:48 +0100 Subject: [PATCH] Nearly finish part 4 + doc --- README.md | 37 +++++++++++++++++++++++++++---------- TokenValue.txt | 1 - certs/docker-compose.yml | 6 +++++- main.go | 13 +++++++++++++ 4 files changed, 45 insertions(+), 12 deletions(-) delete mode 100644 TokenValue.txt diff --git a/README.md b/README.md index 929b0b6..39dd770 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,48 @@ # __Rapport TP GoLang__ ## __Introduction__ -Dans le cadre du cours _ISC L322 - Sécurité des applications_, nous avons du réaliser une application en Go avec docker-compose et la modifier au fur et à mesure des séances d'exercices. +Dans le cadre du cours _ISC L322 - Sécurité des applications_, nous avons dû réaliser une application en Go avec docker-compose et la modifier au fur et à mesure des séances d'exercices. ### __But__ -Le but de ce TP a été en premier lieux d'apprendre à essayé de sécuriser une application avec une API, mais également d'utiliser le Go. +Le but de ce TP a été en premier lieux d'apprendre à essayer de sécuriser une application avec une API, mais également d'utiliser le Go. ## __Code__ ### __Session 1 - Construction une API RESTful en Golang__ -En premier, nous avons simplement du créer la base du programme. Le but de ce programme est de gérer une salle de classe avec des élèves et des professeurs. -Les étudiands et professeurs ont tous un ID, nom de famille, prénom et une filière ou une classe. +En premier, nous avons simplement dû créer la base du programme. Le but de ce programme est de gérer une salle de classe avec des élèves et des professeurs. +Les étudiants et professeurs ont tous un ID, nom de famille, prénom et une filière ou une classe. ```'{"ID":"UUID", "Lastname":"Nom", "Name":"Nom", "filiere":"Software"}'``` ### __Session 2 - Protection TLS__ -Ensuite, il a fallut protégé la partie REST en utilisant une instance de nginx. Il a fallut générer une clé privée pour un certificat ainsi qu'un fichier docker-compose.yml +Ensuite, il a fallu protéger la partie REST en utilisant une instance de nginx. Il a fallu générer une clé privée pour un certificat ainsi qu'un fichier docker-compose.yml ### __Session 3 - Authentication__ -Pour l'autentification, il a fallut créer notre API depuis Okta, faire plusieurs utilisateurs qui ont accès à l'API et un token pour que l'application depuis notre programme. +Pour l'authentification, il a fallu créer notre API depuis le site [Okta](https://developer.okta.com/), faire plusieurs utilisateurs qui ont accès à l'API et un token pour que l'application depuis notre programme. + +Avec le package Gin, il a été possible de créer un serveur web RESTful. ### __Session 4 - Management de Secret__ -Dans la ernière partie +Dans la dernière partie s'est faite avec un ajout d'identifiants d'authentification de base sur le programme Go et d'injection adaptative sur la partie docker afin de pouvoir gérer des _secrets_. Les _secrets_ des données blob tel que un mot de passe, une clé SSH, un certificat SSH, etc. + +Cette partie m'a posé le plus de problèmes car j'ai trouvé que les consignes à suivre n'étaient vraiment pas claires et ne donnaient pas assez d'informations. ## __Conclusion__ -Ce projet a été très compliqué pour moi car nous avons du tout apprendre par nous même +Ce projet a été très compliqué pour moi car nous avons du tout apprendre par nous même, ce qui a rendu le tout assez flou. + +### __Tutoriels utilisés__ +Voici la liste des tutoriels utilisés pour faire ce TP +- [Installation de Go 1.17.1](https://go.dev/doc/install) +- [Installation Docker](https://docs.docker.com/get-docker/) +- [Tutoriel Go Rest API](https://go.dev/doc/tutorial/web-service-gin) +- [Tutoriel go](https://docs.docker.com/language/golang/) +- [Clé TLS](https://www.digicert.com/kb/ssl-support/openssl-quick-reference-guide.htm) +- [Analyseur TLS](https://github.com/tls-attacker/TLS-Scanner) +- [Implementation OIDC](https://developer.okta.com/blog/2021/02/17/building-and-securing-a-go-and-gin-web-application#how-to-validate-an-access-token-in-go) +- [Authentification de base](https://gobyexample.com/environment-variables) +- [Injection adaptative](https://docs.docker.com/compose/environment-variables/#pass-environment-variables-to-containers) + ### __Problèmes rencontrés__ Durant ce projet, j'ai principalement rencontré deux problèmes. -- Comme évoqué ci-dessus, le premier était que je n'avais j'avais fait de Go et que durant les séances d'excercices, le professeur n'était pas là et donc, il fallait chercher et apprendre par nous même. Le TP était très guidé, mais le tout resait assez flou et parfois les instrucions pouvaient être un peu confuses. +- Comme évoqué plus haut, le premier était que je n'avais jamais fait de Go et que durant les séances d'exercices, le professeur n'était pas là et donc, il fallait chercher et apprendre par nous-même. Le TP était très guidé, mais le tout resait assez flou et parfois les instructions pouvaient être un peu confuses. -- Le deuxième est avec Okta. Après avoir créer mon compte et mon application, je n'ai pas pu y retourner par la suite pour continuer le TP. Quand je me connectais à la partie devloppeur, le site me redirigait sur le site principal et quand je retournais dans le section développeur, je n'était plus connecté. J'ai donc du recréer un compte et refaire cette partie. \ No newline at end of file +- Le deuxième est avec Okta. Après avoir créé mon compte et mon application, je n'ai pas pu y retourner par la suite pour continuer le TP. Quand je me connectais à la partie développeur, le site me redirigait sur le site principal et quand je retournais dans la section développeur, je n'étais plus connecté. J'ai donc dû recréer un compte et refaire cette partie. \ No newline at end of file diff --git a/TokenValue.txt b/TokenValue.txt deleted file mode 100644 index 607e8f1..0000000 --- a/TokenValue.txt +++ /dev/null @@ -1 +0,0 @@ -00L7j1C9ERvGMF85pp1LcONHTAZX8dfc6ygfDLZWX5 \ No newline at end of file diff --git a/certs/docker-compose.yml b/certs/docker-compose.yml index 7077a8a..1aae467 100644 --- a/certs/docker-compose.yml +++ b/certs/docker-compose.yml @@ -14,4 +14,8 @@ services: image: appsec:latest container_name: appsec expose: - - "8080" \ No newline at end of file + - "8080" + +web: + environment: + - DEBUG diff --git a/main.go b/main.go index 7874128..e721db0 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,9 @@ import ( "net/http" "github.com/gin-gonic/gin" + "fmt" + "os" + "strings" ) type student struct { @@ -172,6 +175,16 @@ func main() { authorized.GET("/secret", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"secret": "The secret.",}) }) + + os.Setenv("FOO", "1") + fmt.Println("FOO:", os.Getenv("FOO")) + fmt.Println("BAR:", os.Getenv("BAR")) + fmt.Println() + for _, e := range os.Environ() { + pair := strings.SplitN(e, "=", 2) + fmt.Println(pair[0]) + } + r.Run() } -- GitLab