mtls
Configuration et mise en place du certificat mTLS pour Platform OneEntry en utilisant des tokens et mTLS, ainsi que le déploiement de l'application sur un serveur avec Nginx, Docker et GitLab
Partie 1 : Mise en place de mTLS
Protection de l'API
- Utilisation d'un Token : Générez un token dans les paramètres de OneEntry et ajoutez-le aux en-têtes de la requête avec le paramètre 'x-app-token', où la valeur est le token.
- Utilisation de mTLS : Activez l'option mTLS dans votre tableau de bord OneEntry et générez le certificat dans les paramètres de OneEntry.
Mise en place du certificat
- Dans votre tableau de bord, allez dans l'onglet 'Accès' et passez de token à mTLS.
- Générez un nouveau certificat dans OneEntry ('Paramètres' -> 'Certificats d'application' -> 'Créer un nouveau certificat').
- Téléchargez-le sur votre ordinateur et extrayez-le dans le dossier 'cert' à la racine de votre projet.
Mise en place de l'environnement local (en utilisant ReactJS comme exemple)
- Téléchargez le fichier setupProxy.js et enregistrez-le dans le dossier 'src'.
- Modifiez le paramètre 'target', en spécifiant l'adresse de votre projet.
- Installez le package 'http-proxy-middleware' : 'npm install http-proxy-middleware'.
- Démarrez l'application.
Partie 2 : Configuration du serveur
Préparation du serveur
- Mettez à jour les informations du dépôt :
apt update
. - Ajoutez le dépôt Docker et installez les paquets :
apt install nginx certbot docker-ce pwgen
.
Configuration de UFW
- Bloquez toutes les connexions entrantes :
ufw default deny incoming
. - Autorisez toutes les connexions sortantes :
ufw default allow outgoing
. - Autorisez les connexions TCP entrantes sur les ports 22, 80 et 443 :
ufw allow 22,80,443/tcp
.
Configuration de SSH
- Modifiez la configuration du démon SSH :
nano /etc/ssh/sshd_config
. - Réglez
PasswordAuthentication no
. - Redémarrez le démon SSH :
systemctl restart ssh
.
Configuration de Nginx
- Supprimez le fichier de configuration par défaut :
rm /etc/nginx/sites-available/default
. - Créez un nouveau fichier de configuration :
nano /etc/nginx/sites-available/my_app
. - Téléchargez et modifiez la configuration Nginx depuis OneEntry, en remplaçant "your_domain.com" par votre domaine.
- Ensuite, exécutez la commande : ‘ln -s /etc/nginx/sites-available/my_app /etc/nginx/sites-enabled', en remplaçant "my_app" par le nom de votre fichier de configuration.
- Émettez des certificats SSL en utilisant Certbot :
certbot certonly --webroot -w /var/www/html -d your_domain
. - Vérifiez le renouvellement automatique des certificats :
certbot renew --dry-run
. - Modifiez la tâche cron de Certbot pour recharger automatiquement la configuration de Nginx après l'émission des certificats : ‘nano /etc/cron.d/certbot', en remplaçant la dernière ligne par :
echo "0 */12 * * * root certbot -q renew && nginx -s reload" > /etc/cron.d/certbot
. - Décommentez les lignes dans le fichier de configuration 'nano /etc/nginx/sites-available/my_app' (où 'my_app' est le nom de votre fichier de configuration).
- Vérifiez la configuration de Nginx :
nginx -t
. - Rechargez Nginx après chaque modification :
nginx -s reload
.
Partie 3 : Déploiement de l'application avec GitLab et GitHub
GitHub
Création d'un nouvel utilisateur pour GitHub Runner
- Générez un mot de passe : 'pwgen -s 15 1'.
- Créez un nouvel utilisateur : 'useradd -m github-runner'.
- Définissez un mot de passe pour celui-ci : 'passwd github-runner'.
- Ajoutez le nouvel utilisateur aux groupes : 'usermod -aG docker github-runner' et 'usermod -aG sudo github-runner'.
- Changez le shell pour l'utilisateur GitHub Runner : 'chsh -s /bin/bash github-runner'.
- Passez à l'utilisateur nouvellement créé : 'sudo su - gitlab-runner'.
Configuration de GitHub Runner
- Créez un GitHub Runner : allez dans les paramètres de votre dépôt, cliquez sur 'Actions' et sélectionnez 'Runners', puis cliquez sur 'Nouveau runner auto-hébergé'.
- Suivez les instructions dans le bloc 'Télécharger' et la première commande dans le bloc 'Configurer'.
- Ajoutez le Runner au démarrage automatique du système : 'sudo ./svc.sh install'. Vous devrez entrer le mot de passe généré précédemment.
- Démarrez le Runner : 'sudo ./svc.sh start'.
- Allez dans la section 'Actions', cliquez sur 'Runners', et assurez-vous que le 'Runner' est en cours d'exécution.
- Revenez à l'utilisateur 'root'.
- Créez un répertoire de travail : 'mkdir -p /var/apps/frontend'.
- Définissez les permissions pour l'utilisateur 'github-runner' : 'chown -R github-runner:docker /var/apps/frontend'.
Configuration des variables d'environnement dans GitHub
- Créez les variables
DOMAIN
,MTLS_USER_CERT
etMTLS_USER_KEY
dans votre dépôt GitHub ('Paramètres' -> 'Secrets et Variables'). - Générez un certificat dans OneEntry, ajoutez le certificat et la clé aux variables. Dans la variable
DOMAIN
, spécifiez l'adresse de votre projet sans https. - Téléchargez le fichier docker-compose.yml et deux archives .github et .docker.
- Placez docker-compose.yml, .github.zip et .docker.zip dans le dossier racine de votre projet et extrayez les archives (vous pouvez supprimer les archives après extraction).
- Exécutez la commande de push dans votre projet.
- Vérifiez le processus dans l'onglet 'Actions'.
- Vérifiez l'accessibilité de l'application dans le navigateur.
GitLab
Enregistrement de GitLab Runner
- Spécifiez les tags 'docker, frontend'.
- Allez dans 'Paramètres -> CI/CD -> Runners' et cliquez sur le bouton 'Nouveau runner de projet'.
- Allez dans le répertoire créé :
cd /var/apps/gitlab-runner
. - Exécutez la commande pour démarrer le processus d'enregistrement :
docker compose run runner register
. - Entrez l'URL de GitLab, par exemple, https://gitlab.com/.
- Obtenez le token d'enregistrement depuis GitLab (dans la section 'Runners' du projet) et collez-le dans le terminal.
- Spécifiez l'exécuteur comme 'docker'.
- Spécifiez l'image par défaut comme docker:20.10.16.
Configuration des variables d'environnement dans GitLab
- Créez les variables
DOMAIN
,MTLS_USER_CERT
etMTLS_USER_KEY
dans votre dépôt GitLab ('Paramètres' -> 'CI/CD' -> 'Variables'). - Générez un certificat dans OneEntry, ajoutez le certificat et la clé aux variables, et spécifiez l'adresse de votre projet sans https dans la variable
DOMAIN
. - Téléchargez les fichiers docker-compose.yml, .gitlab-ci.yml, et l'archive .docker, placez les fichiers à la racine de votre projet, et décompressez les archives (vous pouvez supprimer les archives après décompression).
Préparation de la configuration de GitLab Runner (exécuteur Docker)
- Créez les répertoires nécessaires :
mkdir -p /var/apps/gitlab-runner/volumes/etc/gitlab-runner
. - Exécutez la commande :
cat /var/apps/gitlab-runner/docker-compose.yaml version: '3' services: runner: image: 'gitlab/gitlab-runner:v16.2.0' restart: always container_name: 'gitlab-runner' privileged: true volumes: - './volumes/etc/gitlab-runner:/etc/gitlab-runner' - '/var/run/docker.sock:/var/run/docker.sock' EOT
.
Configuration de GitLab Runner
- Modifiez le fichier de configuration :
nano volumes/etc/gitlab-runner/config.toml
. - Réglez le paramètre
privileged
surtrue
pour activer Docker-in-Docker. - Changez la valeur de
volumes
en['/var/run/docker.sock:/var/run/docker.sock', '/cache']
pour que Docker fonctionne correctement. - Ajoutez
user = 'gitlab-runner'
au début du fichier pour exécuter le Runner en tant que cet utilisateur. - Enregistrez les modifications et quittez l'éditeur.
- Redémarrez le Runner : 'systemctl restart gitlab-runner'.
Activation et vérification de GitLab Runner
- Exécutez la commande
docker compose up -d
pour démarrer le Runner. - Allez sur GitLab et vérifiez que le Runner est actif et en cours d'exécution (vous devriez voir son statut dans la section 'Runners' du projet).