# 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).