HTTP

Rediriger HTTP vers HTTPS

Rediriger HTTP vers HTTPS
Que vous utilisiez des certificats auto-signés ou des certificats d'une autorité de certification bien connue, vous avez besoin d'un moyen de l'intégrer à vos services. L'un des cas d'utilisation les plus courants d'un serveur HTTP, il peut s'agir d'un serveur Web ou d'un serveur API REST, mais il doit être configuré pour être sécurisé.

La plupart des serveurs Web comme nginx et apache écoutent sur le port 80 par défaut et ont besoin d'un peu de configuration avant de commencer à utiliser les certificats pour chiffrer le trafic. Malgré sa configuration, le serveur Web peut toujours desservir le trafic HTTP sans problème. Ainsi, les visiteurs de votre site Web saisiront simplement http://example.com au lieu de https://exemple.com et tout le trafic restera non crypté pour eux. Pour contourner ce problème, nous devons configurer les serveurs HTTP de manière à ce qu'ils redirigent eux-mêmes tout le HTTP vers HTTPS.

La configuration que j'ai utilise un nom de domaine complet avec une adresse IP publique, je vais donc émettre un certificat SSL de LetsEncrypt plutôt que d'en émettre un auto-signé. Selon le type de serveur Web que vous utilisez, vous pouvez le faire de plusieurs manières. Mais le déroulement général de celui-ci est comme ceci:

  1. Obtenez un certificat signé d'une autorité de certification. Dans notre cas, ce sera LetsEncrypt
  2. Configurez le serveur Web pour qu'il utilise la clé de chiffrement pour chiffrer le trafic HTTP sortant sur le port 443. C'est le port HTTPS par défaut.
  3. Rediriger toutes les requêtes entrantes sur le port 80 (qui est HTTP non crypté) vers le port 443, permettant ainsi des sessions cryptées pour toutes les connexions entrantes.

Démontrons diverses manières d'atteindre ce que nous voulons. La première est la solution la plus simple qui utilise Certbot.

1. Manière la plus simple - Utiliser les plugins Certbot pour Nginx ou Apache

J'utiliserai Nginx comme exemple pour ce serveur. Si vous en utilisez un autre, comme Apache ou HAProxy, il vous suffit de visiter la page officielle de Certbot et de sélectionner votre système d'exploitation et le serveur Web de votre choix. Pour Nginx sur Ubuntu 18.04, ce sont les commandes dont vous auriez besoin.

Tout d'abord, mettez à jour votre index de dépôt.

$ sudo apt-get mise à jour
$ sudo apt-get install software-properties-common

Vous devrez ajouter les référentiels tiers requis, qu'Ubuntu n'a peut-être pas activés par défaut.

$ sudo add-apt-repository univers
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get mise à jour

Et puis installez le package certbot avec les plugins Nginx, en utilisant la commande ci-dessous.

$ sudo apt-get install certbot python-certbot-nginx

L'instruction sera différente pour différentes plates-formes et installera des plugins pour le serveur Web s'ils sont disponibles. La raison pour laquelle les plugins nous facilitent la vie est qu'ils peuvent modifier automatiquement les fichiers de configuration sur le serveur Web pour rediriger également le trafic. L'inconvénient pourrait être que si vous exécutez un serveur très personnalisé pour un site Web préexistant, le plugin peut casser certaines choses là-dedans.

Pour les nouveaux sites Web ou les configurations très simples, comme un proxy inverse, le plugin fonctionne étonnamment bien. Pour obtenir les certificats et rediriger le trafic, exécutez simplement la commande ci-dessous et suivez les différentes options interactives au fur et à mesure que le package vous les guide.

$ sudo certbot --nginx

Production:

certbot --nginx
Enregistrement du journal de débogage dans /var/log/letsencrypt/letsencrypt.Journal
Plugins sélectionnés : Authenticator nginx, Installer nginx
Entrez l'adresse e-mail (utilisée pour les avis de renouvellement et de sécurité urgents) (Entrez 'c' t
annuler): [email protected]
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Veuillez lire les conditions d'utilisation sur
https://letsencrypt.org/documents/LE-SA-v1.2-novembre-15-2017.pdf. Vous devez
accepter afin de vous inscrire sur le serveur ACME à
https://acme-v02.api.permet de crypter.org/répertoire
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)accepter/(C)annuler : A
 

Aucun nom n'a été trouvé dans vos fichiers de configuration. Veuillez entrer votre domaine
nom(s) (séparés par des virgules et/ou des espaces)  (Entrez "c" pour annuler) : SOUS-DOMAINE.NOM DE DOMAINE.TLD

 
Veuillez choisir de rediriger ou non le trafic HTTP vers HTTPS, en supprimant l'accès HTTP.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 : Pas de redirection - N'apportez aucune autre modification à la configuration du serveur Web.
2 : Rediriger - Rediriger toutes les demandes vers un accès HTTPS sécurisé. Choisissez ceci pour
de nouveaux sites, ou si vous êtes sûr que votre site fonctionne sur HTTPS. Vous pouvez annuler cela
changer en modifiant la configuration de votre serveur Web.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Sélectionnez le numéro approprié [1-2] puis [enter] (appuyez sur 'c' pour annuler): 2
Rediriger tout le trafic sur le port 80 vers SSL dans /etc/nginx/sites-enabled/default
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Toutes nos félicitations! Vous avez activé avec succès https://SUBDOMAIN.NOM DE DOMAINE.TLD
 
Vous devriez tester votre configuration sur :
https://www.ssllabs.com/ssltest/analyser.html?d=SOUS-DOMAINE.NOM DE DOMAINE.TLD
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

NOTES IMPORTANTES:
- Toutes nos félicitations! Votre certificat et votre chaîne ont été enregistrés sur :

/etc/letsencrypt/live/SOUS-DOMAINE.NOM DE DOMAINE.TLD/chaîne complète.pem

Votre fichier de clé a été enregistré sur :

/etc/letsencrypt/live/SOUS-DOMAINE.NOM DE DOMAINE.TLD/clé privée.pem

Comme le montre l'exemple ci-dessus, il vous suffit de fournir une adresse e-mail valide et votre nom de domaine pour obtenir le certificat. Ce certificat est délivré en /etc/letsencrypt/live/SOUS-DOMAINE.NOM DE DOMAINE.TLD. Le dernier répertoire sera nommé d'après votre FQDN.

L'aspect le plus important est de sélectionner l'option Redirect et il fera le travail de rediriger tout le trafic HTTP vers HTTPS. Si vous êtes curieux de savoir quels sont ces changements, vous pouvez inspecter les fichiers de configuration dans /etc/nginx/ pour en avoir l'essentiel.

2. Modification des fichiers de configuration

Si vous souhaitez configurer manuellement votre serveur pour utiliser les certificats. Pour obtenir les certificats à l'aide de certbot, exécutez :

$ sudo certbot certonly

Comme précédemment, les certificats sont enregistrés dans le répertoire /etc/letsencrypt/live/votrenom de domaine.com/

Nous pouvons maintenant configurer Nginx pour utiliser les fichiers de ce répertoire. Tout d'abord, je vais me débarrasser de la disposition des répertoires spécifiques à Debian. Le fichier de configuration du site de la page par défaut est /etc/nginx/sites-available/default sous-répertoire avec un lien symbolique vers /etc/nginx/site-enabled.

Je vais simplement supprimer le lien symbolique et déplacer le fichier de configuration dans /etc/nginx/conf.d avec un .conf extension juste pour garder les choses plus généralisées et applicables à d'autres distributions également.

$ sudo rm /etc/sites-enabled/default
$ sudo mv /etc/nginx/sites-available/default /etc/nginx/conf.d/défaut.conf
$ sudo service nginx redémarrage

Je vais modifier ce fichier de configuration par défaut pour montrer comment le TLS est activé.

Voici le contenu de votre fichier de configuration par défaut, sans les sections commentées. Les sections en surbrillance sont celles que vous devez ajouter à votre configuration de serveur afin d'activer TLS et le dernier bloc de ce fichier de configuration détecte si le schéma utilise TLS ou non. Si TLS n'est pas utilisé, il renvoie simplement un code de redirection 301 au client et modifie l'URL pour utiliser https à la place. De cette façon, vous ne manquerez aucun utilisateur

serveur
écouter 80 default_server;
écouter [::]:80 default_server;
écouter 443 ssl;
ssl_certificate  /etc/letsencrypt/live/SUBDOMAIN.DOMAINE.TLS/chaîne complète.pem;
ssl_certificate_key /etc/letsencrypt/live/SUBDOMAIN.DOMAINE.TLD/clé privée.pem;
ssl_session_cache partagé:le_nginx_SSL:1m;
ssl_session_timeout 1440m; ssl_protocoles TLSv1 TLSv1.1 TLSv1.2 ;
ssl_prefer_server_ciphers activé ;
ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-
ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256
-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256
-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128
-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE
-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE
-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3
-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256
-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA :!DSS" ;
racine /var/www/html;
index index.index html.index htm.nginx-debian.html;
nom du serveur _;
emplacement /
try_files $uri $uri/ =404;

si (schéma $ != "https")
renvoie 301 https://$host$request_uri;

 

Il y a quelques paramètres supplémentaires ajoutés à ce fichier de configuration. Y compris les paramètres déclarant le délai d'expiration, la version TLS que vous devez utiliser et les chiffrements de cryptage que le serveur utilisera. Ceci a été emprunté aux configurations recommandées (mais facultatives) de Certbot pour Nginx.

Maintenant, vérifiez si le fichier de configuration est valide et redémarrez le serveur.

$ sudo nginx -t
nginx : le fichier de configuration /etc/nginx/nginx.la syntaxe de conf est ok
nginx : fichier de configuration /etc/nginx/nginx.le test de conf est réussi
$ sudo service nginx redémarrage

Conclusion

Vous pouvez appliquer la même approche pour des applications et des services Web plus complexes nécessitant HTTPS. Letsencrypt vous permet d'émettre des certificats pour plusieurs noms de domaine à la fois, et vous pouvez facilement héberger plusieurs sites Web derrière votre serveur Web nginx. Si vous avez suivi l'exemple ci-dessus, essayez d'accéder à votre site Web en utilisant http (http://SUBDOMAIN.DOMAINE.TLD) et vous serez automatiquement redirigé vers HTTPS.

Pour d'autres serveurs Web, comme Apache, utilisez le plugin certbot approprié ou reportez-vous à leur documentation officielle.

Installez le dernier émulateur Dolphin pour Gamecube et Wii sur Linux
L'émulateur Dolphin vous permet de jouer aux jeux Gamecube et Wii de votre choix sur des ordinateurs personnels Linux (PC). Étant un émulateur de jeu...
Comment utiliser le moteur de triche GameConqueror sous Linux
L'article couvre un guide sur l'utilisation du moteur de triche GameConqueror sous Linux. De nombreux utilisateurs qui jouent à des jeux sur Windows u...
Meilleurs émulateurs de console de jeu pour Linux
Cet article répertorie les logiciels d'émulation de console de jeu populaires disponibles pour Linux. L'émulation est une couche de compatibilité logi...