Comment créer un certificat ECC sur Nginx pour Debian 8

introduction

Cet article explique comment créer un certificat SSL ECC (Elliptic Curve Cryptography) pour Nginx. À la fin de ce didacticiel, vous disposerez d’un mécanisme de cryptage plus rapide pour une utilisation en production.

La cryptographie à clé publique traditionnelle repose sur la quasi-impossibilité de factoriser de grands nombres entiers. Par ailleurs, ECC s’appuie sur l’impossibilité de résoudre les courbes elliptiques aléatoires en fonctions logarithmiques discrètes, un problème appelé «problème de logarithme discret à courbe elliptique» ou ECDLP. En bref, ECC propose des clés plus petites avec une sécurité similaire, ce qui se traduit par des performances de cryptage supérieures, applicables aux signatures numériques telles que SSL.

Ce tutoriel, ainsi que tous les certificats ECC, dépendent d’un protocole à courbe elliptique qui peut prendre différentes formes. L’Institut national des normes et de la technologie (NIST) Suite B spécifie deux courbes elliptiques potentielles à utiliser, P-256 et P-384, également appelées prime256v1. et secp384r1. Pour simplifier, nous utiliserons l’ancien, prime256v1, car il est simple mais pratique.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

Pour tester, vous aurez besoin de l’un des deux systèmes, avec OpenSSL installé et mis à jour:

  • Un autre droplet Linux

  • Système local basé sur Linux (Mac, Ubuntu, Debian, etc.)

Étape 1 - Installez Nginx

Dans cette étape, nous utiliserons un programme d’installation de paquet intégré appelé + apt-get. Cela simplifie considérablement la gestion et facilite une installation propre.

Dans le lien spécifié dans les conditions préalables, vous devriez avoir mis à jour + apt-get + et installé le paquetage + sudo +, car contrairement à d’autres distributions Linux, Debian 8 n’est pas livré avec + sudo + installé.

Nginx est le serveur HTTP susmentionné, axé sur la gestion de grandes charges avec une faible utilisation de la mémoire. Pour l’installer, lancez ce qui suit:

sudo apt-get install nginx

Pour plus d’informations sur les différences entre Nginx et Apache2, les deux serveurs Web open source les plus populaires, voir cet article.

Étape 2 - Créer un répertoire

Cette section est simple et courte. Nous devons stocker la clé privée et le certificat dans un emplacement mémorable. Nous devons donc créer un nouveau répertoire.

sudo mkdir /etc/nginx/ssl

Étape 3 - Créer un certificat ECC auto-signé

Dans cette section, nous demanderons un nouveau certificat et le signerons.

Commencez par générer une clé privée ECC à l’aide de l’outil + ecparam + d’OpenSSL.

  • L’indicateur + out + dirige la sortie vers un fichier. Pour ce tutoriel, nous allons enregistrer la clé dans + / etc / nginx / ssl / +.

  • L’indicateur + name + identifie la courbe elliptique + prime256v1 +.

sudo openssl ecparam -out /etc/nginx/ssl/ -name prime256v1 -genkey

Générez ensuite une demande de signature de certificat.

  • L’indicateur + key + spécifie le chemin d’accès à notre clé, généré dans la commande précédente.

  • L’indicateur + out + spécifie le chemin d’accès à notre certificat généré.

sudo openssl req -new -key /etc/nginx/ssl/ -out /etc/nginx/ssl/

L’appel de cette commande entraînera une série d’invites.

  • * Nom commun *: spécifiez l’adresse IP ou le nom d’hôte de votre serveur.

  • * Mot de passe Challenge *: Ne pas fournir un.

  • Remplissez tous les autres champs à votre propre discrétion. Appuyez sur + ENTER + pour accepter les valeurs par défaut.

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]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:

Enfin, signez vous-même le certificat. Le certificat est ensuite utilisé par le client pour chiffrer des données que seul le serveur peut lire.

  • + x509 + est l’outil OpenSSL utilisé pour générer le certificat.

  • L’indicateur + days + spécifie combien de temps le certificat doit rester valide. Avec cet exemple, le certificat durera un an.

  • + in + spécifie notre demande de certificat générée précédemment.

sudo openssl req -x509 -nodes -days  -key /etc/nginx/ssl/ -in /etc/nginx/ssl/ -out /etc/nginx/ssl/

Définissez les autorisations de fichier pour protéger votre clé privée et votre certificat. Pour plus d’informations sur le code de permission à trois chiffres, consultez le didacticiel à l’adresse https://www.digitalocean.com/community/tutorials/linux-permissions-basics-and-how-to-use-umask-on-a-vps. [Autorisations Linux].

sudo chmod 600 /etc/nginx/ssl/*

Votre certificat et la clé privée qui le protège sont maintenant prêts à être configurés.

Étape 4 - Configurer le certificat

Dans cette section, nous allons configurer les hôtes virtuels Nginx avec la clé et le certificat. En effet, notre serveur commencera à servir HTTPS au lieu de requêtes HTTP.

Ouvrez le fichier de configuration du serveur à l’aide de nano ou de votre éditeur de texte préféré.

sudo nano /etc/nginx/sites-enabled/default

En haut du fichier de configuration, vous trouverez un bloc de code ressemblant à ce qui suit:

/ etc / nginx / sites-enabled / default

...
# Default server configuration
#
server {
...
}

Les prochaines modifications seront effectuées dans le bloc + serveur +.

  1. Commencez par commenter les deux premières lignes du bloc + serveur +, en faisant précéder la ligne par un dièse:

etc / nginx / sites-enabled / default

server {
   # listen 80 default_server;
   # listen [::]:80 default_server;
  1. Ensuite, supprimez le signe dièse de la première ligne + listen située sous` + Configuration SSL`. Indentez correctement et supprimez également + ssl default_server +.

/ etc / nginx / sites-enabled / default

   # SSL Configuration
   #
   listen 443;
   # listen [::]:443 ssl default_server;
   #
  1. Mettez à jour le répertoire racine, directement sous le bloc commenté. l’original lit + nom_serveur _; +. Changez-le pour inclure l’adresse IP de votre serveur, de sorte qu’il se lise + nom_serveur +.

  2. Après + nom_serveur +, ajoutez votre clé SSL et vos chemins de certificat.

/ etc / nginx / sites-enabled / default

       ssl on;
       ssl_certificate /etc/nginx/ssl/.pem;
       ssl_certificate_key /etc/nginx/ssl/.key;
  1. Enfin, ajoutez les paramètres SSL.

/ etc / nginx / sites-enabled / default

       ssl_session_timeout 5m;
       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
       ssl_ciphers HIGH+kEECDH+AESGCM:HIGH+kEECDH:HIGH+kEDH:HIGH:!aNULL;
       ssl_prefer_server_ciphers on;

Votre résultat final devrait être identique à celui-ci.

/ etc / nginx / sites-enabled / default

# Default server configuration
#
server {
       # listen 80 default_server;
       # listen [::]:80 default_server;

       # SSL configuration
       #
       listen 443;
       # listen [::]:443 ssl default_server;
       #
       # Self signed certs generated by the ssl-cert package
       # Don't use them in a production server!
       #
       # include snippets/snakeoil.conf;

       root /var/www/html;

       # Add index.php to the list if you are using PHP
       index index.html index.htm index.nginx-debian.html;

       server_name ;

       ssl on;
      ssl_certificate /etc/nginx/ssl/.pem;
      ssl_certificate_key /etc/nginx/ssl/.key;
      ssl_session_timeout 5m;
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
      ssl_ciphers HIGH+kEECDH+AESGCM:HIGH+kEECDH:HIGH+kEDH:HIGH:!aNULL;
      ssl_prefer_server_ciphers on;

       location / {
               # First attempt to serve request as file, then
               # as directory, then fall back to displaying a 404.
               try_files $uri $uri/ =404;
       }

Une fois ces modifications apportées, enregistrez et quittez le fichier.

Redémarrez Nginx pour appliquer les modifications.

sudo service nginx restart

Étape 5 - Testez Nginx avec ECC

Dans cette section, nous allons tester le serveur via la ligne de commande. Encore une fois, cela peut être fait sur (1) votre système Linux local ou (2) un autre Droplet. Vous pouvez également exécuter cette commande à partir de la même fenêtre de shell, mais vous souhaiterez peut-être une preuve de réussite plus solide.

Connexion ouverte via le port HTTPS 443.

+ openssl s_client -connect: 443 +

Faites défiler jusqu’au milieu de la sortie après la sortie clé et vous devriez trouver ce qui suit:

output---
SSL handshake has read 3999 bytes and written 444 bytes
---
...
SSL-Session:
...

Bien sûr, les chiffres sont variables, mais c’est un succès. Toutes nos félicitations!

Appuyez sur + CTRL + C + pour quitter.

Vous pouvez également visiter votre site dans un navigateur Web, en utilisant HTTPS dans l’URL (+ https: // example.com +). Votre navigateur vous avertira que le certificat est auto-signé. Vous devriez pouvoir visualiser le certificat et vérifier que les détails correspondent à ceux que vous avez entrés à l’étape 4.

Conclusion

Ceci conclut notre didacticiel en vous laissant avec un serveur Nginx en état de fonctionnement, configuré de manière sécurisée avec un certificat ECC. Pour plus d’informations sur l’utilisation d’OpenSSL, voir https://www.digitalocean.com/community/tutorials/openss-essentials-working-with-ssl-certificates-private-keys-and-csrs de l’article sur OpenSSL Essentials].