Dans ce tutoriel, je vais vous montrer étape par étape comment installer et configurer le serveur Web Nginx avec le certificat Letsencrypt. Ce guide vous expliquera comment installer le serveur Web Nginx, installer l'outil let's encrypt, générer un certificat SSL let encrypt, configurer l'hôte virtuel nginx avec SSL et créer une configuration SSL supplémentaire pour obtenir le A+ du test SSL SSL Labs.
Prérequis
- Serveur Linux :Ubuntu 18.04 ou CentOS 7.5
- Privilèges root
Qu'allons-nous faire ?
- Installer le serveur Web Nginx
- Configurer le pare-feu UFW/Firewalld
- Installer let's encrypt et générer un certificat SSL
- Configurer SSL sécurisé
- Configurer l'hôte virtuel Nginx avec SSL
- Test
Étape 1 - Installer le serveur Web Nginx
Dans ce tutoriel, nous vous guiderons pour installer et configurer le serveur Web Nginx avec Letsencrypt sur les deux serveurs Linux - Ubuntu 18.04 et CentOS 7.5.
Sur Ubuntu 18.04.
Mettez à jour le référentiel, puis installez nginx à l'aide de la commande apt ci-dessous.
sudo apt update
sudo apt install nginx -y
Sur CentOS 7.5.
Installez le référentiel EPEL sur le système CentOS et installez Nginx à l'aide de la commande yum.
sudo yum install epel-release -y
sudo yum install nginx -y
Une fois l'installation terminée, démarrez le service Nginx et activez-le pour qu'il se lance à chaque démarrage du système.
systemctl démarrer nginx
systemctl activer nginx
Le serveur Web Nginx est maintenant installé et s'exécute sur le port HTTP 80 par défaut. Vérifiez-le à l'aide de la commande netstat ci-dessous.
netstat -plntu
Étape 2 - Configurer le pare-feu UFW - Firewalld
Il est recommandé d'activer le pare-feu sur le serveur et d'ouvrir le port spécifique si nécessaire. Dans cette étape, nous montrerons comment ouvrir les ports SSH, HTTP et HTTPS sur les serveurs Linux Ubuntu 18.04 en utilisant le pare-feu UFW et Firewalld sur le système CentOS 7.5.
Sur Ubuntu 18.04 - Pare-feu UFW
Avant d'activer le pare-feu UFW sur le système Ubuntu, assurez-vous que le port SSH est activé dans la liste de configuration du pare-feu.
Ajoutez le port de service SSH à la configuration du pare-feu à l'aide de la commande ufw, puis activez le service de pare-feu UFW.
ufw autoriser ssh
ufw activer
Ajoutez maintenant les services HTTP et HTTPS.
ufw autorise http
ufw autorise https
Les ports de service SSH, HTTP et HTTPS ont été ajoutés à la liste des services de pare-feu UFW, vérifiez qu'ils utilisent la commande ci-dessous.
statut ufw
Sur CentOS 7.5 - Firewalld
Avant d'ajouter un port et des services au firewelld, assurez-vous que le service firewalld est opérationnel.
Démarrez le service firewalld et activez-le pour qu'il se lance à chaque démarrage du système.
systemctl start firewalld
systemctl enable firewalld
Remarque :
- Le service SSH sera activé par défaut dans la liste des services Firewald.
Ajoutez maintenant les services HTTP et HTTPS à l'aide de la commande firewall-cmd ci-dessous.
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
Rechargez la configuration du pare-feu et vérifiez la liste des services.
firewall-cmd --reload
firewall-cmd --list-services
Et vous obtiendrez les services SSH, HTTP et HTTPS sur la liste.
Étape 3 - Installer Letsencrypt et générer des certificats
Dans cette étape, nous allons installer l'outil Letsencrypt et générer les certificats SSL forts Letsencrypt à l'aide de la commande cerbot.
Sur Ubuntu 18.04
Installez les packages Letsencrypt à l'aide de la commande apt ci-dessous.
sudo apt install letencrypt -y
Sur CentOS 7.5
Installez maintenant les packages Letsencrypt sur CentOS 7 à l'aide de la commande yum ci-dessous.
sudo yum install certbot -y
Une fois l'installation terminée, nous créerons une nouvelle configuration qui sera utilisée pour générer des fichiers de certificat SSL.
Sur Ubuntu 18.04
Accédez au répertoire de configuration '/etc/nginx' et créez un nouveau fichier de configuration 'cerbot.conf' sous le répertoire 'snippets'.
cd /etc/nginx/
vim snippets/certbot.conf
Collez-y la configuration suivante.
location /.well-known { alias /var/www/html/.well-known; }Enregistrez et quittez.
Modifiez maintenant le fichier d'hôte virtuel Nginx par défaut.
vim sites-available/defaultAjoutez la configuration suivante sous les blocs 'serveur {..}'.
inclure snippets/certbot.conf ;Enregistrez et quittez.
Sur CentOS 7.5
Accédez au répertoire de configuration '/etc/nginx' et créez un nouveau fichier de configuration 'certbot.conf' sous le répertoire 'default.d'.
cd /etc/nginx/
vim default.d/certbot.confCollez la configuration ci-dessous.
location /.well-known { alias /usr/share/nginx/html/.well-known ; }Enregistrez et quittez.
Testez maintenant la configuration de nginx et assurez-vous qu'il n'y a pas d'erreur, puis redémarrez le service nginx.
nginx -t
systemctl redémarre nginxEnsuite, générez les certificats SSL Letsencrypt à l'aide de la commande certbot.
Sur Ubuntu 18.04
certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email [email protected] -w /var/www/html -d hakase-labs.ioSur CentOS 7.5
certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email [email protected] -w /usr/share/nginx/html -d hakase-labs .ioRemarque :
- Nous spécifierons la taille de la clé RSA pour notre domaine à '4096', et nous définirons la méthode d'authentification dans le répertoire racine Web par défaut '/var/www/html' sur le système Ubuntu, et '/usr/share/ nginx/html' pour le système CentOS 7.
Une fois terminé, vous obtiendrez tous les fichiers de certificat SSL pour le nom de domaine dans le répertoire '/etc/letsencrypt/live'.
Pour obtenir une sécurité supplémentaire, nous allons générer la clé DHPARAM '4096' en utilisant la commande OpenSSL comme indiqué ci-dessous.
openssl dhparam -out /etc/nginx/dhparam.pem 4096
La clé DHPARAM a été générée dans le répertoire '/etc/nginx'.
Étape 4 - Configuration SSL
Dans cette étape, nous allons définir la configuration SSL pour le serveur Web Nginx. Nous allons créer une nouvelle configuration 'ssl.conf' qui contient une sécurité de configuration SSL optimisée axée sur le serveur Web Nginx.
Sur Ubuntu 18.04
Allez dans le répertoire de configuration '/etc/nginx/' et créez une nouvelle configuration SSL 'ssl.conf' sous le répertoire 'snippets'.
cd /etc/nginx/
vim snippets/ssl.conf
Sur CentOS 7.5
Allez dans le répertoire de configuration '/etc/nginx/' et créez une nouvelle configuration SSL 'ssl/conf' sous le répertoire 'default.d'.
cd /etc/nginx/
vim default.d/ssl.conf
Collez-y la configuration SSL suivante.
# Spécifiez les versions TLSssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;# Ciphersuites recommandation du chiper.li# Utilisez ces chipersuites pour obtenir 100 points du test SSLabs# Certains appareils ne prendront pas en charge#ssl_ciphers "ECDHE- RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384" ; # Mozilla Ciphersuits Recommandation # Utilisez ceci pour tous les appareils prend en charge les chiffrements ssl 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128 -GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';# Utilisation la clé DHPARAM et la courbe ECDH>=256bitssl_ecdh_curve secp384r1;ssl_dhparam /etc/nginx/dhparam.pem;server_tokens off;ssl_session_timeout 1d;ssl_session_cache shared:SSL:50m;ssl_session_tickets off;# Enable HTTP Strict-Transport-Security# If you have a s ubdomain de votre site, # veillez à utiliser les options 'includeSubdomains' add_header Strict-Transport-Security "max-age=63072000; inclure les sous-domaines ; preload" ;# Activer l'agrafage OSCP pour le serveur Web Nginx# Si vous utilisez le SSL de Letsencrypt,# utilisez les certificats 'chain.pem' chain.pem;resolver 8.8.8.8 8.8.4.4 valid=300s;resolver_timeout 5s;# Protection XSS pour le serveur Web Nginxadd_header X-Frame-Options DENY;add_header X-XSS-Protection "1; mode=block";add_header X-Content-Type-Options nosniff;add_header X-Robots-Tag aucun ;
Enregistrez et quittez.
Remarque :
- Spécifiez les versions TLS pour le site, n'acceptez que le TLSv1 TLSv1.1 TLSv1.2.
- Spécifiez la suite de chiffrement SSL, et il est recommandé d'utiliser la suite de chiffrement SSL de la suggestion de Mozilla pour obtenir la compatibilité de tous les appareils.
- Activer HSTS, OSCP Stapling et ajouter la protection XSS.
Étape 5 - Configurer l'hôte virtuel Nginx avec SSL
Dans cette étape, nous allons créer un fichier d'hôte virtuel pour le nom de domaine. Nous allons créer un nouvel hôte virtuel, un domaine nommé hakase-labs.io, et son répertoire racine Web sera situé dans le répertoire '/var/www/site01'.
Créez le nouveau répertoire '/var/www/site01' et créez le fichier 'index.html' à l'intérieur.
mkdir -p /var/www/site01
echo ''> /var/www/site01/index.html
Nginx - Letsencrypt - A+ Allez maintenant dans le répertoire de configuration '/etc/nginx' et créez un nouveau fichier d'hôte virtuel nommé 'hakase-labs.io' pour ubuntu et 'hakase-labs.conf' pour le système CentOS 7.
Sur Ubuntu 18.04
cd /etc/nginx/
vim sites-available/hakase-labs.ioSur CentOS 7.5
cd /etc/nginx/
vim conf.d/hakase-labs.confCollez-y l'exemple de configuration d'hôte virtuel Nginx suivant.
serveur { écoute 80 ; écouter [::]:80 ; nom_serveur hakase-labs.io ; renvoie 301 https://$host$request_uri;}serveur { écoute 443 ssl http2; écouter [::]:443 ssl http2 ; racine /var/www/site01 ; index index.html index.php index.htm; nom_serveur hakase-labs.io ; error_log /var/log/nginx/hakase-error.log avertir ; certificat_ssl /etc/letsencrypt/live/hakase-labs.io/fullchain.pem ; clé_certificat_ssl /etc/letsencrypt/live/hakase-labs.io/privkey.pem ; #Configuration SSL inclut snippets/ssl.conf ; location ~ /.well-known { tout autoriser ; } emplacement / { try_files $uri $uri/ =404; } location =/favicon.ico { log_not_found off ; access_log off ; } location =/robots.txt { tout autoriser ; log_not_found désactivé ; access_log off ; } emplacement ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expire max ; log_not_found désactivé ; }}Enregistrez et quittez.
Remarque :
- Changer le 'include snippets/ssl.conf;' doubler. Si vous utilisez Ubuntu, laissez-le par défaut. Et si vous utilisez CentOS, changez le répertoire en 'default.d/ssl.conf'
Uniquement sur le système Ubuntu
Activez le nouveau fichier d'hôte virtuel et testez la configuration, et assurez-vous qu'il n'y a pas d'erreur.
ln -s /etc/nginx/sites-available/hakase-labs.io /etc/nginx/sites-enabled/
nginx -t
Redémarrez maintenant le service nginx.
systemctl redémarrer nginx
Le nouvel hôte virtuel avec HTTPS activé et une configuration SSL supplémentaire a été créé.
Vérifiez à l'aide de la commande netstat et vous obtiendrez le port HTTPS 443 dans la liste.
netstat -plntu
Étape 6 - Tester
Ouvrez votre navigateur Web et tapez le nom de votre domaine, le mien est 'http://hakase-labs.io'.
Et vous serez redirigé vers la connexion HTTPS.
Allez maintenant sur le site de test SSL 'https://www.ssllabs.com/ssltest/' et tapez votre propre nom de domaine, puis attendez d'obtenir les résultats.
Voici le résultat de l'utilisation de la "recommandation Mozilla Ciphersuite".
Et voici mon résultat d'utilisation de la "Recommandation Cipher.li Ciphersuite".
Vous verrez que tous les résultats ont des résultats 'A +' et ne diffèrent que par la 'Force de chiffrement' des recommandations Mozilla et de la recommandation Cipherli.st.
Pour vérifier l'agrafage OSCP et le HSTS sur le serveur, faites défiler la page des résultats du test et vous obtiendrez le résultat comme indiqué ci-dessous.
Si vous souhaitez vérifier l'agrafage OSCP à partir de la ligne de commande, vérifiez-le à l'aide de la commande suivante.
écho QUITTER | openssl s_client -connect hakase-labs.io:443 -status 2> /dev/null | grep -A 17 'Réponse OCSP :' | grep -B 17 'Prochaine mise à jour'
Pour le test HSTS, vérifiez-le à l'aide de la commande curl ci-dessous.
curl -s -D- https://hakase-labs.io | grep -i Strict
L'installation et la configuration du serveur Web Nginx avec SSL Letsencrypt ainsi que l'obtention du A+ du test SSLabs ont été effectuées avec succès.
Références
- https://community.letsencrypt.org/
- https://mozilla.github.io/
- https://cipherli.st/