Comment sécuriser votre application Web Rancher avec Let's Encrypt sur Ubuntu 16.04

De Get Docs
Aller à :navigation, rechercher

Introduction

Auparavant, la protection des applications Web avec TLS/SSL était considérée comme nécessaire uniquement pour les applications traitant des informations sensibles, car l'obtention d'un certificat officiel avait un coût et nécessitait une configuration supplémentaire. Let's Encrypt nous permet de créer des certificats officiels de manière automatisée sans aucun coût, ce qui signifie que nous pouvons ajouter cette couche de sécurité à n'importe quel site Web sans compromis.

Rancher gère les conteneurs Docker de manière intuitive avec un tableau de bord facile à utiliser. Rancher dispose d'un catalogue d'applications populaires que nous pouvons déployer instantanément, y compris un service Let's Encrypt qui peut générer des certificats, et s'occupera également du renouvellement si nécessaire. Une fois créés, les certificats sont stockés dans Rancher et peuvent être utilisés sans aucune complication.

Le processus de configuration de Let's Encrypt dans Rancher comprend trois étapes principales : nous déployons le service Let's Encrypt, nous appliquons le certificat qu'il génère à l'équilibreur de charge et nous configurons la redirection HTTP vers HTTPS. Ce didacticiel vous guide tout au long du processus.

Conditions préalables

Pour terminer ce tutoriel, vous aurez besoin de :

  • Un serveur Ubuntu 16.04 de 1 Go avec Rancher installé. Pour le configurer, suivez le tutoriel Comment gérer les déploiements multi-nœuds avec Rancher et Docker Machine sur Ubuntu 16.04. Vous allez créer des serveurs supplémentaires dans ce didacticiel, qui agiront en tant qu'hôtes pour vos conteneurs Docker.
  • Une application déployée à l'aide de Rancher qui utilise le service Load Balancer intégré de Rancher. Bien que vous puissiez suivre ce didacticiel avec n'importe quelle application, y compris celles du catalogue Rancher, vous pouvez également consulter notre guide sur Comment déployer une application Node.js et MongoDB avec Rancher sur Ubuntu 16.04 pour commencer . Quelle que soit la route que vous choisissez, assurez-vous que votre configuration utilise le service Load Balancer intégré de Rancher pour transférer les demandes vers les conteneurs d'application.
  • Un nom de domaine complet (FQDN) avec un enregistrement A pour your_domain pointé vers l'adresse IP publique de votre hôte qui exécute le service Rancher Load Balancer. Ceci est nécessaire en raison de la façon dont Let's Encrypt valide que vous possédez le domaine pour lequel il émet un certificat. Vous pouvez suivre le tutoriel Comment configurer un nom d'hôte avec DigitalOcean pour configurer cet enregistrement. Assurez-vous que vous pouvez afficher votre application déployée sur http://your_domain avant de commencer ce didacticiel.

Étape 1 - Déploiement du service Let's Encrypt

Nous allons déployer le service Let's Encrypt en tant que conteneur Docker, qui sera hébergé sur l'un de nos hôtes Rancher. Le processus consiste à sélectionner le service Let's Encrypt dans le catalogue Rancher et à renseigner les informations requises. Une fois cette étape terminée, vous aurez un certificat disponible dans Rancher. Mieux encore, le service renouvellera automatiquement le certificat lorsqu'il est proche de l'expiration, sans aucune autre action de votre part.

Pour commencer, accédez au Catalogue de l'éleveur en cliquant sur le menu Catalogue en haut de l'interface utilisateur de l'éleveur. Recherchez ensuite le service Let's Encrypt. Une fois que vous l'avez trouvé, cliquez sur le bouton Afficher les détails et suivez ces étapes pour configurer le service :

  1. Sélectionnez la dernière version du modèle. Ce tutoriel utilise la version 0.4.0.
  2. Donnez à la nouvelle pile d'applications un nom distinctif. Nous l'appellerons Certificats dans ce didacticiel, mais n'importe quel nom fonctionnera.
  3. Sélectionnez l'option Oui pour le champ J'accepte le CGU Let's Encrypt après avoir lu les informations si vous êtes d'accord avec les conditions.
  4. Sélectionnez la version Production de l'API Let's Encrypt.
  5. Saisissez votre adresse e-mail valide dans le champ Votre adresse e-mail.
  6. Pour Nom du certificat, entrez le nom du certificat afin de pouvoir l'identifier facilement dans l'interface utilisateur de Rancher. Vous pouvez utiliser votre nom de domaine pour cela.
  7. Pour Domain Names, entrez le nom de domaine que vous souhaitez protéger. Si vous souhaitez protéger plusieurs domaines, entrez chaque domaine, séparé par des virgules.
  8. Pour Public Key Algorithm, sélectionnez la valeur par défaut RSA-2048, qui est l'algorithme le plus couramment utilisé dans les applications Web, ou choisissez un algorithme qui correspond à vos besoins.
  9. Pour Renewal Time of Day, sélectionnez l'heure de la journée, en UTC, à laquelle vous souhaitez renouveler le certificat. La valeur par défaut de 12 fonctionnera correctement sauf si vous avez des contraintes spécifiques.
  10. Pour Domain Validation Method, sélectionnez HTTP pour ce didacticiel. Vous pouvez sélectionner d'autres méthodes qui fonctionnent avec le fournisseur DNS que vous utilisez pour votre domaine. DigitalOcean fait partie de la liste, aux côtés de Cloudflare, DNSimple, Dyn, Gandi, Ovh, Route53 et Vultr. L'option HTTP fonctionne quel que soit le fournisseur et c'est l'approche que nous utiliserons pour ce didacticiel.
  11. Les autres champs sont liés à des fournisseurs DNS spécifiques. Puisque vous avez choisi la méthode HTTP, vous pouvez les laisser vides.
  12. Ensuite, décochez la case Démarrer le service après la création de . Nous démarrerons le service après avoir apporté quelques modifications supplémentaires à la configuration.
  13. Enfin, cliquez sur le bouton Lancer en bas de la page pour démarrer le service et attendre qu'il soit déployé.

Ensuite, nous devons indiquer au service d'équilibrage de charge de Racher de transmettre les demandes de /.well-known/acme-challenge à notre nouveau service Certificate. Sans cela, Let's Encrypt ne pourra pas vérifier que nous sommes le propriétaire du domaine. Suivez ces étapes pour terminer le processus :

  1. Localisez votre service d'équilibrage de charge dans Rancher et cliquez sur son bouton Mettre à niveau/Modifier.
  2. Ajoutez une nouvelle règle de service.
  3. Pour la nouvelle règle : Assurez-vous que l'accès est défini sur Public. Assurez-vous que le protocole est défini sur HTTP. Assurez-vous que le port est défini sur 80. Définissez le chemin sur /.well-known/acme-challenge. Définissez Cible sur le service de certificat.
  4. Appuyez sur la flèche Haut de ce nouveau service pour vous assurer qu'il s'agit du premier service de la liste.
  5. Appuyez sur Modifier en bas de l'écran pour enregistrer la configuration.

Une fois la nouvelle règle en place, démarrez le service Let's Encrypt :

  1. Localisez votre pile Certificate en sélectionnant le menu Stacks en haut de l'interface.
  2. Sélectionnez la pile Certificats pour révéler le service letsencrypt.
  3. Appuyez sur le bouton Démarrer pour démarrer le service.

À ce stade, le service Let's Encrypt devrait être en cours d'exécution et un certificat sera créé. Le processus peut prendre de 5 à 15 minutes. Sélectionnez le menu Infrastructure et choisissez Certificats pour afficher les certificats. Dans peu de temps, vous verrez le nouveau certificat apparaître, bien que vous deviez peut-être actualiser la page. Une fois que vous voyez le certificat, vous pouvez l'utiliser avec votre application.

Étape 2 - Lier le certificat à l'application

Une fois que le certificat Let's Encrypt est disponible dans Rancher, vous pouvez le sélectionner pour l'utiliser dans le service Rancher Load Balancer. Pour ce faire, vous allez modifier la règle dans votre équilibreur de charge pour utiliser HTTPS et appliquer le certificat. Suivez ces étapes pour apporter ces modifications de configuration :

  1. Localisez votre service d'équilibrage de charge dans Rancher et appuyez sur son bouton Mettre à niveau/Modifier pour accéder à ses paramètres.
  2. Dans la section Port Rules, recherchez l'entrée qui transfère les demandes à votre application et modifiez le Protocol en HTTPS et modifiez le Request Host Port[ X186X] à 443 qui est le port par défaut pour HTTPS.
  3. Accédez à l'onglet SSL Termination en bas de la page et sélectionnez le certificat que vous souhaitez utiliser dans le champ Certificate. Si vous souhaitez ajouter plusieurs certificats, vous pouvez les sélectionner dans le champ Alternate Certs. Lorsque vous sélectionnez un certificat, il est automatiquement lié au domaine correspondant.
  4. Cliquez sur le bouton Créer en bas de la page.

Si vous accédez au site Web avec le protocole HTTPS (https://your_domain), vous pouvez voir que la connexion est maintenant sécurisée. Mais depuis que vous avez remplacé le port 80 par le port 443, toute requête via HTTP ne fonctionnera plus. Pour résoudre ce problème, nous pourrions simplement rajouter la règle pour HTTP et le port 80 que nous avions auparavant, mais à la place, nous ajusterons notre équilibreur de charge pour rediriger le trafic de HTTP vers HTTPS. Cela garantit que les gens visitent toujours le site de manière sécurisée.

Étape 3 - Redirection HTTP vers HTTPS

Le service Rancher Load Balancer prend en charge les paramètres de configuration HAProxy personnalisés. Nous allons utiliser cette fonctionnalité pour inclure une configuration qui redirigera tout le trafic provenant de HTTP vers HTTPS. L'approche de cette section exploite le service Let's Encrypt que vous avez configuré précédemment, car il écoute actuellement sur le port 80 pour transférer les demandes de vérification de domaine.

Pour configurer la redirection, localisez votre service d'équilibrage de charge dans Rancher et appuyez sur le bouton Mettre à jour/Modifier pour accéder aux paramètres comme vous l'avez fait dans les étapes précédentes. Une fois la page des paramètres affichée, sélectionnez l'onglet Custom haproxy.cfg en bas de la page.

Ajoutez le morceau de code suivant pour créer la redirection :

haproxy personnalisé.cfg

frontend 80
acl lepath path_beg -i /.well-known/acme-challenge
redirect scheme https code 301 if  !lepath !{ ssl_fc }

Cela crée une règle pour l'équilibreur de charge qui redirige tout le trafic vers HTTPS, mais ignore les requêtes pour le chemin /.well-known/acme-challenge que nous avons configuré pour la vérification de domaine Let's Encrypt. Nous utilisons code 301 pour indiquer que nous voulons une redirection permanente pour ce domaine. Pour en savoir plus sur les paramètres de redirection, vous pouvez consulter la documentation HAProxy.

Cliquez sur le bouton Modifier en bas de la page pour appliquer ces modifications.

À ce stade, chaque fois que vos visiteurs accèdent au site Web via HTTP, ils seront redirigés vers HTTPS, ce qui sécurise le site Web pour tout le monde. Nous pouvons maintenant procéder au test de notre site Web.

Étape 4 - Test de la configuration

Pour tester votre site Web, ouvrez l'adresse dans un navigateur Web, en utilisant le protocole HTTP (http://your_domain), puis recherchez l'indicateur de sécurité dans la barre d'adresse. Vous pouvez également le tester à l'aide de l'utilitaire curl en exécutant la commande suivante, qui envoie une requête au serveur, suit toutes les redirections et renvoie uniquement les en-têtes de réponse :

curl -I -L http://your_domain

Vous devriez voir un résultat comme celui-ci :

OutputHTTP/1.1 301 Found
Cache-Control: no-cache
Content-length: 0
Location: https://your_domain/
Connection: close

HTTP/1.1 200 OK
Cache-Control: public, max-age=0
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Date: Sun, 19 Feb 2017 03:42:47 GMT

Le premier bloc de sortie montre la réponse lors de la première demande du site Web via HTTP, indiquant qu'il a été trouvé mais que l'emplacement se trouve maintenant dans une autre adresse. Notez la section 301 Found, qui vous indique que la règle HAProxy que nous avons ajoutée a fonctionné. La section Location affiche le nouvel emplacement de la ressource demandée. Le deuxième bloc de sortie montre que curl a suivi la redirection vers le nouvel emplacement. Cela montre également que le site Web a été trouvé au nouvel emplacement, comme indiqué par la réponse 200 OK.

Conclusion

Dans ce didacticiel, vous configurez HTTPS sur un site Web à l'aide de Rancher et du service Let's Encrypt. Obtenir un site Web sécurisé est maintenant plus facile que jamais et vous n'avez pas à vous soucier de renouveler constamment vos certificats ou de configurer d'autres outils pour cette tâche. Et avec Rancher, vous pouvez faire évoluer votre infrastructure pour répondre à la demande future.