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

introduction

Ce didacticiel explique comment créer une paire de clés publique et privée ECC (Elliptic Curve Cryptography) à utiliser avec Nginx, un serveur HTTP hautes performances. Les clés ECC offrent quelques avantages par rapport aux clés RSA traditionnelles. Les clés ECC offrent une sécurité équivalente à celle des clés RSA plus grandes tout en étant de taille réduite, réduisant les ressources nécessaires sur le serveur et offrant des performances plus rapides pour les périphériques mobiles.

L’utilisation d’ECC pourrait améliorer les performances pour la diffusion multimédia en continu, les connexions VPN ou d’autres applications à bande passante élevée. Les autorités de certification comme Symantec ont commencé à proposer des certificats ECC ou E lliptiques C . Si vous vous êtes connecté à un site Web avant d’utiliser le secret de transfert ou le secret de transfert parfait, vous avez utilisé la cryptographie à courbe elliptique! Ce guide détaille les étapes nécessaires pour déployer une clé privée ECC auto-signée et un certificat public avec Nginx sur un système Debian Wheezy, à l’aide de la courbe * prime256v1 *.

  • Remarque: * Vous pouvez utiliser différentes courbes. Nous utilisons la courbe prime256v1 afin de garder cet article simple.

Exigences

  • Droplet avec * Debian 7.0 Wheezy *.

  • OpenSSL installé et mis à jour.

Run:

   apt-get update && apt-get upgrade

Après la mise à jour, il est conseillé de redémarrer votre Droplet.

  • Un navigateur moderne: Internet Explorer 7+ (Windows Vista, Windows 7), Firefox 19+ (Linux, Mac, Windows) ou Chrome 25+ (Android, Linux, Mac, Windows). Nous allons utiliser Firefox pour les tests dans ce tutoriel.

  • Toutes les commandes ci-dessous doivent être exécutées en tant qu’utilisateur root. *

Étape 1: Installez Nginx

Installez Nginx avec le gestionnaire de paquets apt-get. Nginx est un serveur HTTP hautes performances capable de gérer un grand nombre de demandes simultanées sans consommer une grande quantité de mémoire sur votre Droplet. Des paquets supplémentaires devront être installés. Pour accepter l’installation, entrez * Y *, puis appuyez sur la touche * Entrée *.

apt-get install nginx

Étape 2: générer et signer une clé privée ECC

Créez un répertoire pour stocker la clé privée, la demande de signature de certificat et le certificat de serveur. Je recommande de créer le répertoire + / etc / nginx / ssl. Puis déplacez-vous dans le répertoire.

mkdir /etc/nginx/ssl
cd /etc/nginx/ssl

Générez une clé privée ECC à l’aide de l’outil * ecparam * d’OpenSSL. Cette commande génère une clé privée de 256 bits à l’aide de la courbe ECC prime256v1 et enregistre la clé dans un fichier nommé + privatekey.key +. Cette clé de 256 bits équivaut à une clé privée RSA de 2048 bits.

openssl ecparam -out privatekey.key -name prime256v1 -genkey

Utilisez OpenSSL pour générer une demande de signature de certificat.

openssl req -new -key privatekey.key -out csr.pem

Lors de l’exécution de cette commande, quelques questions vous seront posées. Pour l’invite * Nom commun *, assurez-vous de saisir l’adresse IP ou le nom d’hôte de votre serveur. Ne * pas * fournir un mot de passe de défi. Tous les autres champs peuvent être renseignés à votre convenance.

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]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Digital Ocean Tutorial
Organizational Unit Name (eg, section) []:ECC Certificate Test
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 []:
  • Remarque: * À ce stade, vous pouvez soumettre votre certificat à une autorité pour signature. Suivez les instructions fournies par votre autorité de certification de votre choix. Symantec propose actuellement des certificats ECC, et de plus en plus d’autorités de certification devraient proposer des certificats ECC à l’avenir. Pour les besoins de ce guide, un certificat auto-signé sera créé à la place.

Créez un certificat ou une clé publique. Le certificat est utilisé par le client pour chiffrer des données que seul le serveur peut lire. L’outil OpenSSL x509 permet de créer un certificat auto-signé à l’aide d’une demande de signature de certificat (CSR). Si vous souhaitez que le certificat reste valide pendant une période plus longue, vous pouvez modifier la valeur + -days + de 365 à 3650, en créant un certificat valide pour 10 ans.

openssl req -x509 -days 365 -key privatekey.key -in csr.pem -out certificate.pem

Définissez les autorisations de fichier de sorte qu’aucun autre utilisateur ne puisse accéder à votre clé privée et à votre certificat.

chmod 600 /etc/nginx/ssl/*

Étape 3: Configurer Nginx avec la clé et le certificat ECC

Ouvrez la configuration d’hôte virtuel Nginx par défaut à l’aide de l’éditeur de texte de votre choix. Par défaut, le fichier de configuration du package Nginx est défini pour servir uniquement les requêtes HTTP. Nous allons maintenant configurer Nginx pour répondre aux requêtes HTTPS.

vi /etc/nginx/sites-enabled/default

Près du bas du fichier de configuration d’hôte virtuel par défaut Nginx se trouve un exemple de configuration pour un serveur HTTPS dont la ligne + listen 443; + se trouve en haut. Décommentez les lignes et mettez à jour votre bloc de serveur HTTPS pour qu’il corresponde à l’exemple ci-dessous. Vous allez éditer la plupart des lignes, alors faites attention!

  • Lorsque vous modifiez des valeurs, veillez à laisser les points-virgules (;) à la fin de chaque ligne. *

#HTTPS server
#
server {
   listen 443;
   server_name ;
#
   root /usr/share/nginx/www;
   index index.html index.htm;
#
   ssl on;
   ssl_certificate /etc/nginx/ssl/certificate.pem;
   ssl_certificate_key /etc/nginx/ssl/privatekey.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 / {
       try_files $uri $uri/ =404;
   }
}

Une fois que votre bloc de serveur HTTPS correspond à l’exemple ci-dessus, enregistrez vos modifications.

Notez que des modifications supplémentaires du bloc de serveur HTTPS peuvent être nécessaires en fonction de la configuration existante de votre cloud Droplet. Par exemple, si votre serveur de nuage exécute PHP, vous souhaiterez copier les lignes que vous avez ajoutées à votre bloc HTTP pour prendre en charge PHP dans votre bloc HTTPS.

Redémarrez Nginx pour appliquer les modifications.

service nginx restart

Étape 4: Testez Nginx avec ECC

Nous utiliserons Firefox pour les tests, bien que tout navigateur Web moderne fonctionne pour visiter votre site et utiliser le cryptage ECC.

Utilisez Firefox pour rechercher l’adresse IP ou le nom d’hôte de votre serveur cloud. Après avoir accepté l’avertissement de certificat auto-signé, la page "Bienvenue dans nginx!" Devrait s’afficher. Vous recevrez un avertissement concernant le certificat car le certificat du serveur a été auto-signé et n’a pas été signé par une autorité de certification reconnue par votre navigateur Web.

https: // IPORHOSTNAME [https: // IP OU HOSTNAME]

Voir l’avertissement initial ci-dessous:

image: https: //assets.digitalocean.com/articles/ECC_Nginx/1.jpg [Informations sur le certificat Firefox]

Acceptez le certificat.

Si vous utilisez Mozilla Firefox, cliquez sur le cadenas situé près du préfixe * https: // * dans la barre d’adresse. La fenêtre d’information de connexion apparaîtra.

image: https: //assets.digitalocean.com/articles/ECC_Nginx/2.jpg [Informations de connexion Firefox]

Cliquez sur le bouton * Plus d’informations… *. Dans la nouvelle fenêtre, sous l’onglet * Sécurité *, cliquez sur le bouton * Afficher le certificat *. Choisissez l’onglet * Détails *. Faites défiler la liste et sélectionnez le champ * Algorithm Parameters *. Dans la zone de texte * Valeur du champ * ci-dessous, vous devriez voir du texte comprenant * la courbe elliptique prime256v1 *, qui indique un certificat ECC.

image: https: //assets.digitalocean.com/articles/ECC_Nginx/3.jpg [Visionneuse de certificats Firefox]

Le champ * Clé publique du sujet * indiquera une taille de clé publique de 256 bits.

image: https: //assets.digitalocean.com/articles/ECC_Nginx/4.jpg [Visionneuse de certificats Firefox]

Toutes nos félicitations! Votre serveur Nginx est maintenant configuré avec une clé privée et un certificat ECC!