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

introduction

La protection des applications Web avec TLS/SSL était considérée comme nécessaire uniquement pour les applications traitant des informations sensibles, l’obtention d’un certificat officiel entraînant des coûts et nécessitant une configuration supplémentaire. https://letsencrypt.org [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.

http://rancher.com [Rancher] gère les conteneurs Docker de manière intuitive avec un tableau de bord facile à utiliser. Rancher dispose d’un catalog [applications populaires] que nous pouvons déployer instantanément, y compris un service Let’s Encrypt qui peut générer des certificats, et prendra également soin de de renouvellement si nécessaire. Une fois créés, les certificats sont stockés dans Rancher et sont disponibles pour une utilisation sans complications.

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 tutoriel vous guide tout au long du processus.

Conditions préalables

Pour compléter ce tutoriel, vous aurez besoin de:

  • Un serveur Ubuntu 16.04 de 1 Go avec Rancher installé. Pour configurer cela, suivez le tutoriel https://www.digitalocean.com/community/tutorials/how-to-manage-multi-node-deployments-with-rancher-and-docker-machine-on-ubuntu-16-04 [Comment gérer des déploiements multi-nœuds avec Rancher et Docker Machine sur Ubuntu 16.04]. Vous allez créer des serveurs supplémentaires dans ce tutoriel, 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 https://www.digitalocean.com/community/tutorials/how-to-deploy-a-node- js-and-mongodb-application-with-rancher-on-ubuntu-16-04 [Comment déployer une application Node.js et MongoDB avec Rancher sous Ubuntu 16.04] pour commencer. Quelle que soit la route choisie, assurez-vous que votre configuration utilise le service Load Balancer intégré de Rancher pour transmettre les demandes aux conteneurs d’applications.

  • Un nom de domaine complet (FQDN) avec un enregistrement * A * pour + votre_domaine + pointé sur l’adresse IP publique de votre hôte qui exécute le service Rancher Load Balancer. Cela est nécessaire en raison de la façon dont Let’s Encrypt a confirmé que vous êtes propriétaire du domaine pour lequel il émet un certificat. Vous pouvez suivre le didacticiel Comment définir un nom d’hôte avec DigitalOcean pour le configurer record. Assurez-vous que vous pouvez afficher votre application déployée sur + http: // + avant de commencer ce didacticiel.

[[step-1---deploying-the-let’s-encrypt-service]] === É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 à saisir les informations requises. Une fois cette étape terminée, vous aurez un certificat disponible dans Rancher. Mieux encore, le service renouvellera automatiquement le certificat à l’approche de l’expiration, sans autre action de votre part.

Pour commencer, accédez au * Catalogue des éleveurs * en cliquant sur le menu * Catalogue * en haut de l’interface utilisateur de l’éleveur. Recherchez ensuite le service * Let Encrypt *. Une fois que vous l’avez trouvé, cliquez sur le bouton * Afficher les détails * et procédez comme suit pour configurer le service:

  1. Sélectionnez la dernière version du modèle. Ce tutoriel utilise la version * 0.4.0 *.

  2. Attribuez un nom distinct à la nouvelle pile d’applications. Nous l’appellerons * Certificats * dans ce tutoriel, mais n’importe quel nom fonctionnera.

  3. Sélectionnez l’option * Oui * du champ * J’accepte les champs de Let’s Encrypt TOS * après avoir lu les informations si vous en acceptez les termes.

  4. Sélectionnez la version * Production * de l’API Let’s Encrypt.

  5. Entrez votre adresse email valide dans le champ * Votre adresse email *.

  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 * Noms de domaine *, entrez le nom de domaine que vous souhaitez protéger. Si vous souhaitez protéger plusieurs domaines, entrez chaque domaine, séparé par une virgule.

  8. Pour l’algorithme * de clé publique *, sélectionnez le RSA-2048 * par défaut, qui est l’algorithme le plus couramment utilisé dans les applications Web, ou choisissez un algorithme qui répond à vos besoins.

  9. Pour * Heure du renouvellement *, sélectionnez l’heure de la journée, en UTC, dans 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 * Méthode de validation de domaine *, sélectionnez * HTTP * pour ce tutoriel. Vous pouvez sélectionner d’autres méthodes qui fonctionnent avec le fournisseur DNS que vous utilisez pour votre domaine. DigitalOcean est inclus dans la liste, avec Cloudflare, DNSimple, Dyn, Gandi, Ovh, Route53 et Vultr. L’option * HTTP * fonctionne quel que soit le fournisseur et constitue l’approche que nous allons utiliser pour ce tutoriel.

  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 avoir créé la case *. Nous allons démarrer 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 attendez qu’il soit déployé.

Ensuite, nous devons dire au service d’équilibrage de charge de Racher de transmettre les demandes de + /. Well-known / acme-challenge + `à notre nouveau service * Certificat *. Sans cela, 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. Ajouter une nouvelle * règle de service *.

  3. Pour la nouvelle règle:

  4. Assurez-vous que * Access * est défini sur * Public *.

  5. Assurez-vous que le * Protocole * est défini sur * HTTP *.

  6. Assurez-vous que * Port * est réglé sur + 80 +.

  7. Définissez le * Path * sur + /. Well-known / acme-challenge.

  8. Définissez * Target * sur le service * Certificate *.

  9. Appuyez sur la flèche * Haut * de ce nouveau service pour vous assurer qu’il s’agit du premier service de la liste.

  10. Appuyez sur * Modifier * en bas de l’écran pour enregistrer la configuration.

Avec la nouvelle règle en place, démarrez le service Let’s Encrypt:

  1. Localisez votre pile * Certificat * en sélectionnant le menu * Piles * en haut de l’interface.

  2. Sélectionnez la pile * Certificats * pour afficher le service * letsencrypt *.

  3. Appuyez sur le bouton * Démarrer * pour démarrer le service.

À ce stade, le service Let’s Encrypt doit être en cours d’exécution et un certificat sera créé. Le processus peut durer de 5 à 15 minutes. Sélectionnez le menu * Infrastructure * et choisissez * Certificats * pour afficher les certificats. Dans quelques instants, le nouveau certificat apparaîtra, 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 devez modifier la règle dans votre équilibreur de charge afin qu’elle utilise HTTPS et applique le certificat. Suivez ces étapes pour apporter ces modifications de configuration:

  1. Localisez votre service d’équilibrage de charge dans Rancher et appuyez sur le bouton * Mettre à jour / Modifier * pour accéder à ses paramètres.

  2. Dans la section * Règles de port *, recherchez l’entrée qui transfère les demandes à votre application, modifiez le * Protocole * en * HTTPS * et modifiez le * Requête du port hôte * en * 443 *, qui est le port par défaut pour HTTPS.

  3. Accédez à l’onglet * Terminaison SSL * en bas de la page et sélectionnez le certificat que vous souhaitez utiliser dans le champ * Certificat *. Si vous souhaitez ajouter plusieurs certificats, vous pouvez les sélectionner dans le champ * Autres certificats *. 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: // +), vous pouvez voir que la connexion est maintenant sécurisée. Mais puisque 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 nous ajusterons plutôt notre équilibreur de charge pour rediriger le trafic de HTTP vers HTTPS. Cela garantit que les personnes visitent toujours le site de manière sécurisée.

Étape 3 - Redirection de 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 venant de HTTP vers HTTPS. L’approche décrite dans cette section exploite le service Let’s Encrypt que vous avez configuré précédemment, étant donné qu’il écoute actuellement sur le port + 80 + pour transmettre les demandes de vérification de domaine.

Pour configurer la redirection, localisez votre service d’équilibrage de charge dans Rancher, puis appuyez sur le bouton * Mettre à niveau / Modifier * pour accéder aux paramètres comme vous l’avez fait lors des é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.cfg personnalisé

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

Ceci crée une règle pour l’équilibreur de charge qui redirige tout le trafic vers HTTPS, mais ignore les demandes pour le chemin + /. Well-known / acme-challenge + que nous avons configuré pour la vérification de domaine Let 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, consultez la documentation HAProxy.

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

À ce stade, chaque fois que vos visiteurs accèdent au site Web via HTTP, ils sont redirigés vers HTTPS, ce qui sécurise le site Web pour tous. Nous pouvons maintenant tester notre site Web.

Étape 4 - Test de la configuration

Pour tester votre site Web, ouvrez l’adresse dans un navigateur Web à l’aide du protocole HTTP (+ http: // +), 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 demande au serveur, suit les redirections et ne renvoie que les en-têtes de réponse:

curl -I -L http://

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

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

HTTP/1.1
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 affiche la réponse lors de la première demande du site Web via HTTP, indiquant que celui-ci a été trouvé mais que l’emplacement se trouve maintenant à 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 + Emplacement + montre le nouvel emplacement de la ressource demandée. Le second bloc de sortie montre que + curl + a suivi la redirection vers le nouvel emplacement. Il 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 allez configurer 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 la tâche. Et avec Rancher, vous pouvez augmenter votre infrastructure pour répondre à la demande future.