GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment créer un certificat SSL auto-signé pour Nginx sur Ubuntu 18.04

SSL signifie "Secure Sockets Layer", qui est la technologie de sécurité standard destinée à créer un lien crypté entre un serveur Web et un navigateur Web. Ce lien garantit que toutes les informations transmises entre le serveur et le navigateur restent privées et sécurisées. L'objectif principal des certificats SSL est d'assurer la sécurité du site Web et de crypter les données transférées entre le client et le navigateur pour empêcher tout vol d'informations sensibles telles que les détails de la carte de crédit, les numéros de compte et les mots de passe, etc.

Un certificat auto-signé est un certificat signé par la personne qui le crée plutôt que par une autorité de certification (CA) de confiance. La plupart des clients et des organisations sont tentés d'utiliser des certificats SSL auto-signés au lieu de ceux émis et vérifiés par une autorité de certification de confiance, principalement en raison de la différence de coût. Mais il offre toujours le même niveau de cryptage à une limite.

Dans cet article, je vais vous expliquer comment créer un certificat SSL auto-signé sur un serveur Ubuntu 18.04 avec un serveur Web Nginx.

Pré-requis

Un serveur bien configuré avec des privilèges root et une bibliothèque OpenSSL. La bibliothèque OpenSSL est nécessaire pour générer votre propre certificat. Exécutez la commande suivante sur votre serveur Ubuntu pour voir si OpenSSL est déjà installé.

# which openssl
/usr/bin/openssl

Si la commande which n'a pas renvoyé le binaire, nous devrons l'installer à l'aide de la commande :

#apt install openssl

Création du certificat auto-signé

SSL comprend principalement deux parties, l'une est la clé privée et l'autre le certificat public. La clé SSL est gardée privée sur le serveur restreint à l'utilisateur root. Il est en fait utilisé pour chiffrer le contenu envoyé aux clients. Le certificat SSL public est partagé avec toute personne demandant le contenu. Il peut être utilisé pour déchiffrer le contenu signé par la clé SSL privée associée. Ici, j'utilise cette commande pour générer un certificat auto-signé, à savoir example.com.crt et une clé privée example.com.key (ici, j'utilise example.com.pem comme nom de fichier) à l'aide de l'outil OpenSSL.

#openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.pem

Veuillez consulter les détails de chaque option ci-dessous :

  • req :cette sous-commande est utilisée pour créer un nouveau certificat X.509. Le "X.509" est une norme d'infrastructure à clé publique à laquelle SSL et TLS adhèrent pour la gestion des clés et des certificats.
  • -x509 :cela modifie davantage la sous-commande précédente en indiquant à l'utilitaire que nous voulons créer un certificat auto-signé.
  • -nodes :Ceci est utilisé pour ignorer l'option de phrase de passe pour sécuriser notre certificat.
  • -days 365 :cette option définit la validité du certificat en jours. Nous le fixons pour un an ici.
  • -newkey rsa:2048 :Ceci spécifie que nous voulons générer une nouvelle clé RSA de 2 048 bits avec le certificat.
  • -keyout :cette option indique à OpenSSL où placer le fichier de clé privée généré.
  • -out :cette option indique à OpenSSL où placer le certificat généré.

Lors de l'exécution de cette commande, il nous demandera de fournir les détails du domaine/client pour générer une demande de signature de certificat (CSR). Vous pouvez fournir ces détails si nécessaire.

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:Victoria
Locality Name (eg, city) []:Melbourne
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linoxide LLC
Organizational Unit Name (eg, section) []:Web
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:[email protected]

Nous avons maintenant notre certificat auto-signé et notre clé privée nouvellement générés à ces emplacements, à savoir :/etc/ssl/certs/example.com.pem et /etc/ssl/private/example.com.key . Ensuite, nous devons créer un groupe Diffie-Hellman fort, qui est utilisé pour négocier Perfect Forward Secrecy avec les clients. Vous pouvez exécuter cette commande pour en créer un.

#openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Cela peut prendre un certain temps, mais quand ce sera fait, nous aurons un groupe DH fort à /etc/ssl/certs/dhparam.pem que nous pouvons utiliser dans notre configuration.

Configurer Nginx pour utiliser des certificats auto-signés

Avant de commencer, nous devons nous assurer que le serveur Web Nginx est installé sur notre serveur Ubuntu 18.04. S'il n'est pas installé, vous pouvez l'installer en utilisant cette simple commande :

#apt install nginx

J'ai installé et activé ce service sur mon serveur.

# nginx -v
nginx version: nginx/1.14.0 (Ubuntu)

#systemctl enable nginx
#systemctl start nginx
#systemctl status nginx

Suivant. nous pouvons configurer Nginx pour utiliser SSL. Je vais vous expliquer cela en trois étapes :

  1. Création d'un extrait de configuration avec les détails du certificat SSL généré.
  2. Création d'un extrait de configuration pour maintenir des paramètres SSL solides et sécurisés en surmontant les éventuelles vulnérabilités SSL.
  3. Mettre à jour l'hôte virtuel du domaine avec les configurations d'extrait de code ci-dessus pour activer SSL

Étape 1 :Création d'un extrait de configuration avec les détails du certificat SSL

Créons un nouveau fichier de configuration d'extrait de code, à savoir "self-signed.conf" pour pointer nos détails de certificat auto-signé générés dans le dossier d'extrait de code Nginx :/etc/nginx/snippets/ comme ci-dessous :

# cat /etc/nginx/snippets/self-signed.conf
# Self signed certificates generated by the ssl-cert package
# Don't use them in a production server!

ssl_certificate /etc/ssl/certs/example.com.pem;
ssl_certificate_key /etc/ssl/private/example.com.key;

Ici, nous devons spécifier notre chemin de certificat généré :/etc/ssl/certs/example.com.pem et Chemin de la clé :/etc/ssl/private/example.com.key pour la directive mentionnée ci-dessus.

Étape 2 : Création d'un extrait de configuration pour maintenir des paramètres SSL solides et sécurisés en surmontant les éventuelles vulnérabilités SSL

Deuxièmement, nous devons maintenir une configuration de serveur SSL entièrement fonctionnelle et solide protégeant notre serveur de toutes les vulnérabilités SSL possibles. J'ai configuré mon Nginx avec une suite de chiffrement SSL puissante et activé certaines fonctionnalités avancées pour assurer la sécurité du serveur. Tous ces paramètres sont inclus dans le fichier :/etc/nginx/snippets/ssl-params.conf

cat /etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling off;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

Vous pouvez obtenir ces recommandations de chiffrement Nginx dans la liste de chiffrement. Ces paramètres seront utilisés dans les futures configurations Nginx pour SSL. Comme vous pouvez le voir, nous avons défini le ssl_dhparam paramètre pour pointer vers le fichier Diffie-Hellman que nous avons généré plus tôt ici. Comme nous utilisons un certificat auto-signé, l'SSL stapling ne sera pas utilisé. Par conséquent, je l'ai off ou bien Nginx affichera simplement un avertissement comme celui-ci nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate . Après avoir effectué ces modifications, vous pouvez enregistrer la configuration et quitter.

 Étape 3 :Mise à jour de l'hôte virtuel du domaine avec les configurations d'extrait de code ci-dessus pour activer SSL

Nous sommes prêts avec notre configuration d'extrait de code requise, nous pouvons maintenant les inclure dans notre hôte virtuel de domaine et activer SSL. Ici, dans cet article, j'utilise le fichier de configuration Nginx par défaut situé dans /etc/nginx/sites-available/default . J'ai modifié ce fichier pour activer SSL et récupérer les certificats auto-signés générés. Veuillez consulter la section modifiée ci-dessous dans cette configuration :

cat /etc/nginx/sites-available/default

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

# SSL configuration

listen 443 ssl default_server;
listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
include snippets/self-signed.conf;
include snippets/ssl-params.conf;

Nous pouvons maintenant enregistrer ces configurations et redémarrer le service Nginx pour rendre ces modifications effectives.

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#systemctl restart nginx

Test

C'est notre dernière étape, où nous pouvons ouvrir notre navigateur et essayer d'accéder à l'IP de notre serveur à l'URL>> https://Server_IP or Hostname . Il affichera un avertissement de sécurité puisque nous utilisons un certificat auto-signé, vous pouvez ignorer cet avertissement et cliquer pour confirmer la sécurité pour continuer comme indiqué dans l'instantané.

A lire aussi :

  • Mkcert - Créer des certificats SSL pour le développement local sur Linux
  • Comment installer les certificats SSL Let's Encrypt sur Ubuntu 18.04
  • Comment configurer NGINX en tant que proxy inverse à l'aide de Docker

C'est tout! nous avons configuré avec succès Nginx avec un certificat auto-signé en utilisant des méthodes de cryptage solides pour des connexions client sécurisées. J'espère que cet article vous sera utile ! Veuillez publier vos précieux commentaires et suggestions à ce sujet.


Ubuntu
  1. Comment installer un certificat SSL auto-signé dans cPanel

  2. Comment créer une clé USB bootable Ubuntu pour Mac sous OS X

  3. Comment faire en sorte qu'Apache 2 arrête de demander un mot de passe pour un certificat SSL ?

  4. Comment ajouter un certificat/une clé client Ssl globalement dans Ubuntu ?

  5. Autorisations pour la clé SSL ?

Comment configurer le certificat SSL Let's Encrypt avec Nginx sur Ubuntu 18.04 et Ubuntu 16.04

Comment générer une demande de signature de certificat (CSR) sur Ubuntu

Comment installer un certificat SSL gratuit pour Nginx sur CentOS 8

Comment installer Let's Encrypt SSL pour Nginx sur Ubuntu 18.04 LTS

Comment créer un certificat SSL auto-signé local sur CentOS 8

Comment activer la touche Alt Gr comme Alt R pour Emacs sur Ubuntu 16.04 ?