• 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.200

      nginx welcome

      fé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

      Nginx - Server block configuration

      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.

      Nginx - Letsencrypt https

      Vérifiez les propriétés du certificat.

      Nginx - HTTPS Certificate

      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 :

      Configurer HTTPS sur Nginx

      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 :

      Configurer HTTPS sur Nginx

      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é.

      Configurer HTTPS sur Nginx

      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