-
nginx > https et ssl
Activer HTTPS
sudo apt update sudo apt install nginx openssl
Créez une clé privée et le certificat de site Web à l’aide de la commande OpenSSL.
mkdir /etc/nginx/certificate cd /etc/nginx/certificate openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out nginx-certificate.crt -keyout nginx.key
Entrez les informations demandées.
Generating a RSA private key ............++++ .......................................................++++ writing new private key to 'nginx.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:BR State or Province Name (full name) [Some-State]:Rio de Janeiro Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]:TechExpert Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:200.200.200.200 Email Address []:
Sur l’option nommée COMMON_NAME, vous devez entrer l’adresse IP ou le nom d’hôte.
Dans notre exemple, nous avons utilisé l’adresse IP 200.200.200.200.
Modifiez le fichier de configuration Nginx pour le site Web par défaut.
vi /etc/nginx/sites-available/default
Voici le fichier, avant notre configuration.
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ =404; } }
Voici le fichier, après notre configuration.
server { listen 443 ssl default_server; ssl_certificate /etc/nginx/certificate/nginx-certificate.crt; ssl_certificate_key /etc/nginx/certificate/nginx.key; root /var/www/html; index index.html; server_name _; location / { try_files $uri $uri/ =404; } }
En option, vous pouvez rediriger les utilisateurs HTTP vers la version HTTPS de votre site Web.
Dans ce cas, utilisez la configuration suivante.
server { listen 80 default_server; server_name _; return 301 https://$host$request_uri; } server { listen 443 ssl default_server; ssl_certificate /etc/nginx/certificate/nginx-certificate.crt; ssl_certificate_key /etc/nginx/certificate/nginx.key; root /var/www/html; index index.html; server_name _; location / { try_files $uri $uri/ =404; } }
Redémarrez le service Nginx.
service nginx restart
Ouvrez votre navigateur et accédez à la version HTTPS de votre site Web.
Dans notre exemple, l’URL suivante a été saisie dans le navigateur :
https://200.200.200.200félicitations! Vous avez terminé la configuration de HTTPS sur le serveur Nginx.
—
Installation du certificat Letsencrypt pour HTTPS
Souhaitez-vous apprendre à installer le certificat Letsencrypt sur le serveur Nginx d’un ordinateur fonctionnant sous Ubuntu Linux ? Dans ce tutoriel, nous allons vous montrer comment installer le client Letsencrypt et configurer un site WEB HTTPS sur le serveur Nginx.
Nginx appelle Virtualhosts la fonction SERVER BLOCKS.
Nginx Virtualhost - Configuration DNS
Accédez au site WEB GODADDY et achetez un domaine DNS.
Dans notre exemple, nous avons acheté un domaine nommé :
GAMEKING.TIPS
Vous pouvez utiliser n’importe quel site web pour acheter un domaine DNS, GoDaddy est juste mon choix personnel.
Créez une entrée DNS pointant votre site Web vers l’ordinateur exécutant Nginx.
Dans notre exemple, nous avons créé une entrée DNS pointant WWW.GAMEKING.TIPS au 35.160.86.106.
Utilisez la commande NSLOOKUP pour tester votre configuration DNS.
apt-get update apt-get install dnsutils nslookup www.gameking.tips
Voici la sortie de commande.
Server: 127.0.0.53 Address: 127.0.0.53#53
Non-authoritative answer: Name: www.gameking.tips Address: 35.160.86.106
félicitations! Vous avez terminé la configuration DNS requise.
Tutoriel Letsencrypt - Installation Nginx
Installez le serveur Nginx.
apt-get update apt-get install nginx
Créez un répertoire pour stocker les nouveaux fichiers du site Web.
mkdir /websites/gameking/www -p chown www-data.www-data /websites/gameking -R
Les fichiers du site Web seront stockés à l’intérieur de l’annuaire suivant :
/websites/gameking/www
Créez un fichier de configuration Nginx pour le nouveau site Web.
vi /etc/nginx/sites-available/gameking.conf
Voici le fichier avec notre configuration.
server { listen 80; listen [::]:80; root /websites/gameking/www; index index.html index.htm index.nginx-debian.html; server_name www.gameking.tips; location / { try_files $uri $uri/ =404; } }
Créez un lien symbolique pour activer la configuration d’hôte virtuel Nginx.
ln -s /etc/nginx/sites-available/gameking.conf /etc/nginx/sites-enabled/
Redémarrez le service Nginx.
service nginx restart
Créez une page de test à l’intérieur du nouvel annuaire du site Web.
vi /websites/gameking/www/index.html
Voici le contenu du fichier.
<html> <body> <h1>THIS IS A TEST</h1> <script type="rocketlazyloadscript">"use strict";var wprRemoveCPCSS=function wprRemoveCPCSS(){var elem;document.querySelector('link[data-rocket-async="style"][rel="preload"]')?setTimeout(wprRemoveCPCSS,200):(elem=document.getElementById("rocket-critical-css"))&&"remove"in elem&&elem.remove()};window.addEventListener?window.addEventListener("load",wprRemoveCPCSS):window.attachEvent&&window.attachEvent("onload",wprRemoveCPCSS);</script><noscript><link rel='stylesheet' id='wpml-menu-item-0-css' href='//d1ny9casiyy5u5.cloudfront.net/wp-content/plugins/sitepress-multilingual-cms/templates/language-switchers/menu-item/style.min.css?ver=1' type='text/css' media='all' /><link rel='stylesheet' id='fusion-core-comment-form-css' href='https://d1ny9casiyy5u5.cloudfront.net/wp-content/plugins/fusion-core/css/comment-form.min.css?ver=5.4.2' type='text/css' media='all' /><link rel='stylesheet' id='fusion-core-faqs-css' href='https://d1ny9casiyy5u5.cloudfront.net/wp-content/plugins/fusion-core/css/faqs.min.css?ver=5.4.2' type='text/css' media='all' /><link rel='stylesheet' id='fusion-core-portfolio-css' href='https://d1ny9casiyy5u5.cloudfront.net/wp-content/plugins/fusion-core/css/portfolio.min.css?ver=5.4.2' type='text/css' media='all' /><link rel='stylesheet' id='fusion-core-privacy-css' href='https://d1ny9casiyy5u5.cloudfront.net/wp-content/plugins/fusion-core/css/privacy.min.css?ver=5.4.2' type='text/css' media='all' /><link rel='stylesheet' id='avada-stylesheet-css' href='https://d1ny9casiyy5u5.cloudfront.net/wp-content/themes/Avada/assets/css/style.min.css?ver=7.4.2' type='text/css' media='all' /><link rel='stylesheet' id='wp-codemirror-css' href='https://d1ny9casiyy5u5.cloudfront.net/wp-includes/js/codemirror/codemirror.min.css?ver=5.29.1-alpha-ee20357' type='text/css' media='all' /><link rel='stylesheet' id='code-editor-css' href='https://techexpert.tips/wp-admin/css/code-editor.min.css?ver=5.8.1' type='text/css' media='all' /><link rel='stylesheet' id='wp-block-library-css' href='https://d1ny9casiyy5u5.cloudfront.net/wp-includes/css/dist/block-library/style.min.css?ver=5.8.1' type='text/css' media='all' /></noscript></body> </html>
Ouvrez votre navigateur et essayez d’accéder au site web virtuel.
Dans notre exemple, l’URL suivante a été saisie dans le navigateur :
• http://www.gameking.tips
Félicitations! Vous avez terminé la configuration Server Blocks de Nginx.
Nginx Letsencrypt - Installation du certificat
Nous devons installer le certificat HTTPS gratuit.
Nous devons également rediriger automatiquement tout le trafic HTTP vers la version HTTPS du site.
Installez la liste des paquets requis.
apt-get update apt-get install certbot python3-certbot-nginx
Installer le certificat HTTPS gratuit Nginx
certbot --nginx -d www.gameking.tips
• Appuyez sur (A) pour qu’il s’entende avec les Conditions d’utilisation.
• Faites pression sur (Y) pour partager votre courriel et recevoir des bulletins d’information.
• Appuyez sur (2) pour rediriger automatiquement votre site Web HTTP vers les versions HTTPS.Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): techexpert@gmail.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y Obtaining a new certificate Performing the following challenges: http-01 challenge for www.gameking.tips Waiting for verification... Cleaning up challenges Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/gameking.conf
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/gameking.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://www.gameking.tips
You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=www.gameking.tips - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/www.gameking.tips/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/www.gameking.tips/privkey.pem Your cert will expire on 2021-07-14. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Le système installera automatiquement un certificat gratuit.
Il configurera également le serveur Nginx pour rediriger tous les accès HTTP à la version HTTPS de votre site Web.
Dans notre exemple, le système a modifié notre fichier de configuration d’hôte virtuel.
cat /etc/nginx/sites-enabled/gameking.conf server { root /websites/gameking/www; index index.html index.htm index.nginx-debian.html; server_name www.gameking.tips; location / { try_files $uri $uri/ =404; } listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/www.gameking.tips/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/www.gameking.tips/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = www.gameking.tips) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name www.gameking.tips; return 404; # managed by Certbot
Le fichier KEY contient votre clé privée certificat et doit être conservé dans un endroit sûr tout le temps.
Dans notre exemple, le fichier KEY a été stocké à :
/etc/letsencrypt/live/www.gameking.tips/privkey.pem
Le système modifie automatiquement le fichier de configuration d’hôte virtuel Nginx original.
Il redirigera automatiquement toutes les demandes HTTP vers la version HTTPS de votre site Web.
if ($host = www.gameking.tips) { return 301 https://$host$request_uri;
Ouvrez votre navigateur et entrez l’adresse DNS du nouveau site Web à l’aide du protocole HTTPS.
Dans notre exemple, l’URL suivante a été saisie dans le navigateur :
• https://www.gameking.tips/
La page HTTPS doit être présentée.
Vérifiez les propriétés du certificat.
Vous avez installé un certificat Let’s Encrypt sur le serveur Nginx.
Nginx Letsencrypt - Renouvellement du certificat
Le certificat gratuit installé est valable 90 jours.
Le système crée une tâche planifiée pour renouveler automatiquement tout certificat dans les trente jours suivant l’expiration.
Le nom de tâche planifié est CERTBOT et il se trouve à l’intérieur du répertoire suivant :
/etc/cron.d SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew
Utilisez la commande suivante pour simuler le processus de renouvellement du certificat.
certbot renew --dry-run Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/www.gameking.tips.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator nginx, Installer nginx Renewing an existing certificate Performing the following challenges: http-01 challenge for www.gameking.tips Waiting for verification... Cleaning up challenges - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed with reload of nginx server; fullchain is /etc/letsencrypt/live/www.gameking.tips/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates below have not been saved.) Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/www.gameking.tips/fullchain.pem (success) ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates above have not been saved.) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal.
félicitations! Vous avez configuré le renouvellement du certificat automatique Let’s Encrypt.
—
Configurer HTTPS sur Nginx
Tous les paramètres ci-dessous seront à mettre dans votre server block (HTTPS), c’est à dire ici :
server { ... }
Redirection et ports > rediriger HTTP vers HTTPS
server { listen 80; server_name monsite.com; return 301 https://$server_name$request_uri; #Redirection } server { listen 443 ssl; server_name monsite.com; [....] # conf HTTPS }
SPDY et HTTP/2
Le module HTTP/2 remplace le module SPDY depuis la version 1.9.5 de Nginx :
listen 443 ssl http2;
Pour avoir un support complet de HTTP/2 avec ALPN, il faudra compiler Nginx avec OpenSSL 1.0.2, qui n’est pas encore présent dans toutes les distributions.
Pour tester le support de HTTP/2 et de ALPN, vous pouvez utiliser l’outil de test de KeyCDN :
SSL et TLS
Toutes les versions de SSL sont à proscrire. Elle sont complètement trouées et contiennent de très nombreuses vulnérabilités. TLS 1.0 et et 1.1 sont à éviter également le plus possible. Il n’y presque aucune raison de les utiliser aujourd’hui puisque la quasi-totalité des navigateurs et OS modernes sont compatibles avec.. L’ANSSI recommande également de n’utiliser que TLS (et si possible d’éviter TLS 1.0).
La conf est donc très simple :
ssl_protocols TLSv1.2;
Certificat et clé
Après avoir généré votre certificat ou après l’avoir obtenu auprès de votre autorité de certification, vous vous retrouvez avec plusieurs fichiers, dont votre clé et quelques certificats.
ssl_certificate /chemin/vers/cert.pem; ssl_certificate_key /chemin/vers/key.pem;
Si vous utilisez un certificat obtenu auprès d’une autorité de certification, il faudra ajouter le certificat intermédiaire correspondant dans
cert.pem
. Je vous conseille de vous référer à la doc pour cette étape.Exemple pour Let’s Encrypt :
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
Clé Diffie-Hellman (DH)
L’échange de clé DH est très important puisqu’il permet au serveur et au client de se mettre d’accord sur un secret commun sans qu’un tiers puisse en prendre connaissance. La clé de base n’est que de 2048 bits, or la NSA recommande d’utiliser des DH d’au moins 3072 bits :
Nous allons en créer une de 4096 bit :
openssl dhparam -out dh.pem 4096
Puis l’ajouter dans la configuration :
ssl_dhparam /etc/nginx/dh.pem;
Note : si vous utilisez une cipher suite ECDH (conseillé), pas besoin de passer par cette étape.
Elliptic curve Diffie–Hellman (ECDH)
L’échange de clés Diffie-Hellman basé sur les courbes elliptiques est une variante du protocole vu ci-dessus, plus performante et plus sécurisée.
En effet, si l’on utilise ce paramètre :
ssl_ecdh_curve secp521r1;
La clé sera alors équivalente à une clé DH de 15360 bits. Cependant je ne vous conseille pas d’utiliser P-521 puisqu’il est incompatible avec un très grand nombre de navigateurs, notamment Chrome, ou la compatibilité a été mystérieusement retirée…
Notre chère NSA recommande d’utiliser P-384 au maximum, sachant que P-256 n’a pas encore été cassé.
P-384 fonctionne avec tous les navigateurs et OS compatibles avec TLS 1.2, on ne va donc pas s’en priver :
ssl_ecdh_curve secp384r1;
Pour info, ECDH P-384 équivaut à DH 7680 bits, ce qui est largement suffisant.
Edit : Depuis Nginx 1.11.0, on peut spécifier plusieurs curves :
ssl_ecdh_curve sect571r1:secp521r1:brainpoolP512r1:secp384r1;
Cipher Suite
La suite cryptographique est… bon, on va citer Wikipédia ce sera plus clair pour tout le monde
Aucun commentaire
Laissez un commentaire