GNU/Linux >> Tutoriels Linux >  >> FreeBSD

Comment sécuriser Nginx avec SSL et Let's Encrypt dans FreeBSD

Dans ce guide, nous verrons comment sécuriser Nginx serveur Web dans FreeBSD avec TLS/SSL certificats offerts par Let's Encrypt Certificate Authority . Nous vous montrerons également comment renouveler automatiquement les certificats Lets' Encrypt avant la date d'expiration.

TLS , acronyme de Transport Layer Security , est un protocole qui s'exécute sous HTTP protocole et utilise des certificats et des clés afin d'encapsuler les paquets et de chiffrer les données échangées entre un serveur et un client, ou dans ce cas entre Nginx le serveur Web et le navigateur du client, afin de sécuriser la connexion, afin qu'un tiers, qui pourrait intercepter le trafic, ne puisse pas décrypter la transmission.

Lire aussi :Installer Let's Encrypt for Apache sur FreeBSD

Le processus d'obtention d'un Let's Encrypt gratuit certificat en FreeBSD peut être grandement simplifié en installant certboot utilitaire client, qui est le client officiel Let's Encrypt utilisé pour générer et télécharger des certificats.

Exigences

  1. Installer la pile FBEMP (Nginx, MariaDB et PHP) dans FreeBSD

Étape 1 :Configurer Nginx TLS/SSL

1. Par défaut, le TLS/SSL la configuration du serveur n'est pas activée dans FreeBSD parce que le TLS les instructions de blocage du serveur sont commentées en Nginx fichier de configuration par défaut.

Pour activer le TLS serveur en Nginx , ouvrez nginx.conf fichier de configuration, recherchez la ligne qui définit le démarrage de SSL serveur et mettez à jour le bloc entier pour qu'il ressemble à l'exemple ci-dessous.

# nano /usr/local/etc/nginx/nginx.conf

Extrait de bloc HTTPS Nginx :

Nginx HTTPS Configuration
server {
       listen 443 ssl  default_server;
       server_name  www.yourdomain.com;
	
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
	error_page   500 502 503 504  /50x.html;
        
	location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
	
	location / {
	    root   /usr/local/www/nginx;
       	    index  index.html index.htm;
	    try_files $uri $uri/ /index.php?$args;
				}

	ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_dhparam /usr/local/etc/nginx/dhparam.pem;
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 10m;
	ssl_ciphers HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	# Use gzip compression
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.0;

	# Set a variable to work around the lack of nested conditionals
	
	set $cache_uri $request_uri;
	
	location ~ /.well-known {
	allow all;
		}
    


        location ~ \.php$ {
        root	/usr/local/www/nginx;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        #fastcgi_param  SCRIPT_FILENAME /scripts$fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME $request_filename;    
		include        fastcgi_params;
        }	
    }

Le bloc ci-dessus, en plus de SSL block, contient également des instructions pour activer la compression gzip et FastCGI Process Manager , utilisé pour transmettre le code PHP à PHP-FPM passerelle afin d'exécuter des applications Web dynamiques.

Après avoir ajouté le code ci-dessus à Nginx fichier de configuration principal, ne redémarrez pas le démon ou n'appliquez pas les paramètres avant d'avoir installé et obtenu un Let's Encrypt certificat pour votre domaine.

Étape 2 :Installez le client Certbot dans FreeBSD

2. Le processus d'installation de Let's Encrypt certbot l'utilitaire client dans FreeBSD implique le téléchargement du code source pour py-certbot et compilez-le localement, en exécutant les commandes ci-dessous.

# cd /usr/ports/security/py-certbot
# make install clean

3. Compiler le py-certbot L'utilitaire prend beaucoup de temps par rapport à l'installation d'un paquet binaire standard. Pendant ce temps, une série de dépendances doivent être téléchargées et compilées localement dans FreeBSD.

En outre, une série d'invites apparaîtra sur votre écran, vous demandant de sélectionner les packages qui seront utilisés au moment de la compilation pour chaque dépendance. Au premier écran, sélectionnez les outils suivants, en appuyant sur [espace] clé, pour compiler le python27 dépendance, comme illustré dans l'image ci-dessous.

  • IPV6
  • LIBFI
  • NLS
  • PYMALLOC
  • FILS
  • UCS4 pour la prise en charge d'Unicode

4. Ensuite, sélectionnez DOCS et THREADS pour gettext-tools dépendance et appuyez sur OK pour continuer comme indiqué dans l'image ci-dessous.

5. Sur l'écran suivant, laissez les TESTS option désactivée pour libffi-3.2.1 et appuyez sur OK aller plus loin.

6. Ensuite, appuyez sur espace pour sélectionner DOCS pour py27-enum34 dépendance, qui installera la documentation de cet outil, et appuyez sur OK pour continuer, comme illustré dans la capture d'écran ci-dessous.

7. Enfin, choisissez d'installer des exemples d'exemples pour py27-openssl dépendance en appuyant sur [espace] touche et appuyez sur OK pour terminer le processus de compilation et d'installation de py-certbot client.

8. Après le processus de compilation et d'installation de py-certbot l'utilitaire se termine, exécutez la commande ci-dessous afin de mettre à niveau l'outil à la dernière version du package, comme illustré dans les captures d'écran ci-dessous.

# pkg install py27-certbot

9. Afin d'éviter certains problèmes, cela pourrait se produire lors de l'obtention d'un Let's Encrypt gratuit certificat, l'erreur la plus courante étant "pkg_resources.DistributionNotFound ", assurez-vous que les deux dépendances suivantes sont également présentes dans votre système :py27-salt et py27-acme .

# pkg install py27-salt
# pkg install py27-acme

Étape 3 :Installez le certificat Let's Encrypt pour Nginx sur FreeBSD

10. Afin d'obtenir un certificat autonome Let's Encrypt pour votre domaine, exécutez la commande suivante et fournissez votre nom de domaine et tous les sous-domaines pour lesquels vous souhaitez obtenir des certificats en impliquant le -d drapeau.

# certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

11. Lors de la génération du certificat, il vous sera demandé de saisir votre adresse e-mail et d'accepter les conditions d'utilisation de Let's Encrypt. Tapez a du clavier pour accepter et continuer et il vous sera également demandé si vous souhaitez partager votre adresse e-mail avec les partenaires de Let's Encrypt.

Si vous ne souhaitez pas partager votre adresse e-mail, tapez simplement no mot dans l'invite et appuyez sur [enter] clé pour continuer. Une fois les certificats de votre domaine obtenus avec succès, vous recevrez des notes importantes qui vous indiqueront où les certificats sont stockés dans votre système et leur date d'expiration.

12. Si vous souhaitez obtenir un certificat Let's Encrypt en utilisant le "webroot ” plugin en ajoutant le webroot répertoire du serveur Nginx pour votre domaine, lancez la commande suivante avec le --webroot et -w drapeaux. Par défaut, si vous n'avez pas modifié le chemin de la racine Web Nginx, il doit se trouver dans /usr/local/www/nginx/ chemin du système.

# certbot certonly --webroot -w /usr/local/www/nginx/ -d yourdomain.com -d www.yourdomain.com

Comme dans le --strandalone procédure d'obtention d'un certificat, le --webroot La procédure vous demandera également de fournir une adresse e-mail pour le renouvellement du certificat et les avis de sécurité, d'appuyer sur a accepter les termes et conditions de Let's Encrypt et no ou yes partager ou non l'adresse e-mail des partenaires Let's Encrypt comme illustré dans l'exemple ci-dessous.

Sachez que le client certbot peut détecter une fausse adresse e-mail et ne vous laissera pas continuer à générer un certificat tant que vous n'aurez pas fourni une véritable adresse e-mail.

Échantillon Cerbot :
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email protected]  #A fake email address will be detected
There seem to be problems with that address. Enter email address (used for
urgent renewal and security notices)  If you really want to skip this, you can
run the client with --register-unsafely-without-email but make sure you then
backup your account key from /etc/letsencrypt/accounts   (Enter 'c' to cancel):[email protected]

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a ------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: n Obtaining a new certificate Performing the following challenges: http-01 challenge for www.domain.com Using the webroot path /usr/local/www/nginx/ for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Your cert will expire on 2017-12-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /usr/local/etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

Étape 4 :Mettre à jour les certificats TLS Nginx

13. L'emplacement des certificats et des clés Let's Encrypt obtenus dans FreeBSD est /usr/local/etc/letsencrypt/live/www.yourdomain.com/ chemin du système. Exécutez la commande ls afin d'afficher les composants de votre certificat Let's Encrypt :le fichier de chaîne, le fichier de chaîne complète, la clé privée et le fichier de certificat, comme illustré dans l'exemple suivant.

# ls /usr/local/etc/letsencrypt/live/www.yourdomain.com/

14. Afin d'installer les certificats Let's Encrypt pour votre domaine sur le serveur Web Nginx, ouvrez le fichier de configuration principal de Nginx ou le fichier de configuration du serveur Nginx TLS, s'il s'agit d'un fichier séparé, et modifiez les lignes ci-dessous pour refléter le chemin des certificats émis par let's Encrypt. comme illustré ci-dessous.

# nano /usr/local/etc/nginx/nginx.conf

Mettez à jour les lignes suivantes pour qu'elles ressemblent à cet exemple :

ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";

15. Aussi, si la ligne ssl_dhparam est présent dans Nginx SSL configuration, vous devez générer un nouveau 2048 peu Diffie–Hellman clé avec la commande suivante :

# openssl dhparam –out /usr/local/etc/nginx/dhparam.pem 2048 

16. Enfin, afin d'activer la configuration Nginx TLS, vérifiez d'abord la configuration globale de Nginx pour d'éventuelles erreurs de syntaxe, puis redémarrez le service Nginx pour appliquer la configuration SSL en exécutant les commandes suivantes.

# nginx -t
# service nginx restart

17. Confirmez si le démon Nginx est lié à 443 port en exécutant les commandes suivantes qui peuvent répertorier toutes les sockets réseau ouvertes dans le système en état d'écoute.

# netstat -an -p tcp| grep LISTEN
# sockstat -4 

18. Vous pouvez également visiter votre adresse de domaine via HTTPS protocole en ouvrant un navigateur et tapez l'adresse suivante afin de confirmer que les certificats Let's Encrypt fonctionnent comme prévu. Étant donné que vous utilisez des certificats générés par une autorité de certification valide, aucune erreur ne doit s'afficher dans le navigateur.

https://www.yourdomain.com

19. L'utilitaire Openssl peut également vous aider à trouver des informations sur un certificat obtenu auprès de Let's Encrypt CA, en exécutant la commande avec les options suivantes.

# openssl s_client -connect www.yourdomain.com:443

Si vous souhaitez forcer Nginx à diriger toutes les requêtes http vers https reçues pour votre domaine sur le port 80 vers HTTPS , ouvrez le fichier de configuration Nginx, localisez la directive du serveur pour le port 80 et ajoutez la ligne ci-dessous après l'instruction server_name comme illustré dans l'exemple ci-dessous.

rewrite ^(.*) https://www.yourdomain.com$1 permanent;

20. La configuration du renouvellement automatique des certificats émis par l'autorité Let's Encrypt avant leur expiration peut être effectuée en programmant une tâche cron pour qu'elle s'exécute une fois par jour en exécutant la commande suivante.

# crontab -e

Tâche périodique pour renouveler le certificat.

0 0 * * * certbot renew >> /var/log/letsencrypt.log

C'est tout! Nginx peut désormais proposer des applications Web sécurisées à vos visiteurs à l'aide de certificats gratuits Let's Encrypt.


FreeBSD
  1. Sécurisez Nginx avec Lets Encrypt sur CentOS 7

  2. Comment sécuriser le serveur Web Apache avec Let's Encrypt sur RHEL 8

  3. Installer Lets Encrypt and Secure Nginx avec SSL/TLS dans Debian 9

  4. Sécurisez Nginx avec Let's Encrypt SSL sur Debian 10/11

  5. Comment installer Let's Encrypt SSL sur Ubuntu 18.04 avec Nginx

Comment installer Nginx avec Let's Encrypt TLS/SSL sur Ubuntu 20.04

Comment installer Nginx avec Let's Encrypt SSL sur Fedora 35

Comment installer Nginx avec Let's Encrypt SSL sur Ubuntu 20.04 LTS

Comment sécuriser Nginx avec le certificat SSL Let's Encrypt

Comment sécuriser le serveur LEMP avec Let's Encrypt Free SSL sur Ubuntu 18.04 VPS

Comment sécuriser Nginx avec Let's Encrypt sur Ubuntu 20.04