# Installer un certificat auto-signé OpenSSL avec nginx > Installer un certificat auto-signé OpenSSL (https) avec nginx. Publié le 2021-10-22 | Mis à jour le 2025-01-12 | Tags: openssl https://xsec.fr/gnu-linux/openssl/ --- import Callout from '@shared/components/Callout.astro' import { Collapsible } from '@shared/components/ui/collapsible' Si vous configurez votre serveur directement en tant que root, n'oubliez pas de retirer `sudo` de chaque commande. Si vous définissez un mot de passe pour le compte root, la commande `sudo` ne sera pas acceptée. Connectez-vous directement en tant que root pour exécuter les commandes. Vous pouvez aussi réinstaller votre système en laissant le mot de passe root vide lors de l'installation. `sudo` s'installera et fonctionnera correctement. ## Générer le certificat et la clé Il est recommandé d'utiliser `ed25519` qui correspond au standard de sécurité actuel. Cependant, il n'est pas compatible partout, notamment sur les systèmes legacy. Dans ce cas, `RSA` est utilisé, il est préférable de définir une longueur de clé importante. ```sh sudo openssl req -x509 -days 365 -out mycert.crt -nodes -newkey rsa:4096 -keyout mykey.key ``` Remplissez les différentes informations du certificat ```txt Generating a RSA private key ..................................+++++ ........................................................+++++ writing new private key to 'mykey.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]:FR State or Province Name (full name) [Some-State]:RHONE Locality Name (eg, city) []:maville Organization Name (eg, company) [Internet Widgits Pty Ltd]:xsec Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:web.it.fr Email Address []:test@gmail.com ``` Le `Common Name` doit être renseigné avec le nom de domaine ! OpenSSL a généré le certificat et la clé dans le répertoire où vous vous trouvez au moment où vous avez saisi la commande. Vous pouvez les déplacer/renommer comme bon vous semble. ## Éditer le fichier de configuration nginx ```txt title="/etc/nginx/sites-enabled/default" 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; } } ``` - En haut du fichier se trouve un **bloc de configuration serveur**. Il écoute sur le port `80:HTTP` qui pointe vers `/var/www/html` puis une page d'index définie dans `index` ligne 5. - Comme nous allons **ajouter un bloc de configuration serveur** qui écoute sur le port `443:HTTPS`, nous devons le modifier pour éviter les **conflits** : ```txt title="/etc/nginx/sites-enabled/default" server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://$host$request_uri; } ``` - `Ligne 5` Redirige les requêtes du **port 80** vers le **port 443**. Ajoutez la configuration SSL à la fin du fichier ```txt title="/etc/nginx/sites-enabled/default" server { listen 443 ssl; server_name _; root /var/www/html; ssl_certificate /var/www/sites/client1/mycert.crt; ssl_certificate_key /var/www/sites/client1/mykey.key; index index.html index.htm index.nginx-debian.html; } ``` - `Ligne 4` Remplacez le chemin par le vôtre. - `Ligne 5-6` Remplacez les chemins par les vôtres. Le fichier de configuration ressemble alors à ceci (sans les commentaires) : ```txt title="cat /etc/nginx/sites-enabled/default" server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name _; root /var/www/html; ssl_certificate /var/www/sites/client1/mycert.crt; ssl_certificate_key /var/www/sites/client1/mykey.key; index index.html index.htm index.nginx-debian.html; } ``` ## Redémarrer nginx ```sh sudo service nginx restart ``` Vous pouvez maintenant consulter votre site web avec votre certificat auto-signé (https://monsite.local par exemple).