Comment sécuriser Nginx avec SSL et crypter dans FreeBSD

Comment sécuriser Nginx avec SSL et crypter dans FreeBSD

Dans ce guide, nous discuterons de la façon de sécuriser Nginx serveur Web dans FreeBSD avec TLS / SSL certificats offerts par Cryptons l'autorité du certificat. Nous vous montrerons également comment renouveler automatiquement les certificats de crypte de Letts avant la date d'expiration.

TLS, un acronyme pour Sécurité de la couche de transport, est un protocole qui se déroule sous Http protocole et utilise des certificats et des clés afin d'encapsuler les paquets et de crypter 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 puisse intercepter le trafic, ne peut pas décrypter la transmission.

Lire aussi: Installer, cryptons pour apache sur freebsd

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

Exigences

  1. Installez 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 bloc de serveur sont commentées dans Nginx Fichier de configuration par défaut.

Afin d'activer le TLS servir dans Nginx, ouvrir nginx.confli Fichier de configuration, recherchez la ligne qui définit le début de SSL serveur et mettez à jour le bloc entier à ressembler dans l'échantillon ci-dessous.

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

Extrait Nginx HTTPS Block:

Configuration nginx https
server écouter 443 ssl default_server; nom du serveur www.ton domaine.com; Access_log / var / log / nginx / access.enregistrer; error_log / var / log / nginx / error.enregistrer; error_page 500 502 503 504 / 50X.html; Emplacement = / 50x.html root / usr / local / www / nginx-rist;  emplacement / root / usr / local / www / nginx; Index index.index html.htm; try_files $ uri $ uri / / index.php?$ args;  ssl_certificate "/ usr / local / etc / lesencrypt / live /www.ton domaine.com/ Cert.pem "; ssl_certificate_key" / usr / local / etc / lesencrypt / live /www.ton domaine.com/ privkey.pem "; ssl_protocols tlsv1 tlsv1.1 TLSV1.2; ssl_dhparam / usr / local / etc / nginx / dhparam.pem; ssl_session_cache partagée: ssl: 1m; ssl_session_timeout 10m; SSL_CIPHERS HIGH:!anull:!MD5; ssl_prefer_server_ciphers sur; # Utilisez la compression GZIP GZIP sur; gzip_disable "msie6"; gzip_vary sur; gzip_proxied tout; gzip_comp_level 5; GZIP_BUFFERS 16 8K; gzip_http_version 1.0; # Définissez une variable pour contourner le manque de conditionnels imbriqués définir $ cache_uri $ request_uri; Emplacement ~ /.bien connu permettre tout;  Emplacement ~ \.php $ root / usr / local / www / nginx; fastcgi_pass 127.0.0.1: 9000; Index FastCGI_INDEX.PHP; #fastcgi_param script_filename / scripts $ fastcgi_script_name; fastcgi_param script_filename $ request_filename; Inclure FastCGI_PARAMS;  

Le bloc ci-dessus, en plus de SSL Block, contient également quelques instructions pour activer la compression GZIP et FastCGI Process Manager, utilisé pour passer 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 principale, ne redémarrez pas le démon ou appliquez les paramètres avant d'installer et d'obtenir un Escryptons certificat pour votre domaine.

Étape 2: Installez le client de certificat 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-certebot et le compiler localement, en émettant les commandes ci-dessous.

# CD / USR / Ports / Securit 

3. Compilation py-certebot L'utilitaire prend beaucoup de temps par rapport à l'installation d'un ensemble binaire ordinaire. Pendant ce temps, une série de dépendances doit être téléchargée dans compilée localement dans FreeBSD.

De plus, une série d'invites apparaîtra sur votre écran, vous demandant de sélectionner quels packages 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
  • Libffi
  • NLS
  • Pymalloc
  • Threads
  • UCS4 pour le support Unicode
Activer UCS4 pour Unicode

4. Ensuite, sélectionnez Docs et Threads pour getText-tools dépendance et presse D'ACCORD Pour continuer comme indiqué dans l'image ci-dessous.

Installer la documentation

5. Sur l'écran suivant, laissez le Tests Option désactivée pour libffi-3.2.1 et presser D'ACCORD pour aller plus loin.

Désactiver les tests pour libffi

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

Installez la documentation pour PY27

7. Enfin, choisissez d'installer des exemples d'exemples pour py27-ouvrir dépendance en appuyant [espace] clé et frapper D'ACCORD Pour terminer le processus de compilation et d'installation pour py-certebot client.

Installer PY27 OpenSSL

8. Après le processus de compilation et d'installation py-certebot Finitions utilitaires, 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 installer PY27-CERTBOT 
Mettre à niveau l'outil PY-CERTBOT

9. Afin d'éviter certains problèmes, cela pourrait se produire lors de l'obtention d'un gratuit Escryptons 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-sel et PY27-ACME.

# pkg installer py27-salt # pkg installer py27-acme 

Étape 3: Installez le certificat de crypte pour Nginx sur FreeBSD

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

# Certbot Certonly --Standalone -d ton domaine.com -d www.ton domaine.com 
L'installation permet de crypter pour nginx

11. Lors de la génération du certificat, il vous sera demandé de saisir votre adresse e-mail et de convenir avec Let's Encrypt Conditions d'utilisation. Taper un Du clavier pour être d'accord et continuer et vous vous demanderez également si vous êtes prêt à partager votre adresse e-mail avec Let's Encrypt Partners.

Si vous ne souhaitez pas partager votre adresse e-mail, tapez simplement Non mot dans l'invite et appuyez sur [entrer] clé pour continuer. Une fois que les certificats de votre domaine ont été obtenus avec succès, vous recevrez des notes importantes qui vous informeront où les certificats sont stockés dans votre système et lorsqu'ils expireront.

Résumé de crypte

12. Dans le cas où vous souhaitez obtenir un certificat Let's Encrypt en utilisant le «webroot»Plugin en ajoutant le webroot Répertoire de Nginx Server pour votre domaine, émettez la commande suivante avec le --webroot et -w drapeaux. Par défaut, si vous n'avez pas modifié le chemin Web Ninx WEBROOT, il doit être situé dans / usr / local / www / nginx / chemin du système.

# Certbot Certonly --webroot -w / usr / local / www / nginx / -d ton domaine.com -d www.ton domaine.com 

Comme dans le --strandalone procédure pour obtenir un certificat, le --webroot La procédure vous demandera également de fournir une adresse e-mail pour le renouvellement des certificats et les avis de sécurité, pour appuyer un Pour être d'accord avec Let's Encrypt les termes et conditions et Non ou Oui pour partager ou ne pas partager l'adresse e-mail, Crypt Partners comme illustré dans l'échantillon ci-dessous.

Sachez que CERTBOT Client peut détecter une fausse adresse e-mail et ne vous permettra pas de continuer à générer un certificat jusqu'à ce que vous fournissiez une véritable adresse e-mail.

Échantillon CERBOT:
Sauver le journal de débogage à / var / log / letsencrypt / letSencrypt.Journal Entrez l'adresse e-mail (utilisée pour les avis de renouvellement et de sécurité urgents) (entrez «C» pour annuler):[Protégé par e-mail] # Une fausse adresse e-mail sera détectée, il semble y avoir des problèmes avec cette adresse. Entrez l'adresse e-mail (utilisée pour les avis de renouvellement et de sécurité urgents) Si vous souhaitez vraiment ignorer cela, vous pouvez exécuter le client avec --gister-unsafely-without-email, mais assurez-vous de sauvegarder la clé de votre compte à partir de / etc / lesencrypt / Comptes (entrez «C» pour annuler): [Protégé par e-mail] ------------------------------------ ------------------------------------------- Veuillez lire les conditions d'utilisation à https: // lesencrypt.org / documents / le-sa-v1.1.1-août-1-2016.pdf. Vous devez être d'accord afin de vous inscrire auprès du serveur ACME à https: // acme-v01.API.Laissez-le.org / répertoire ----------------------------------------------- -------------------------------- (a) Gree / (C) ANCEL: un ------------------------------------------------------------------------------- Seriez-vous prêt à partager votre adresse e-mail avec la Fondation Electronic Frontier, un partenaire fondateur du projet Let's Encrypt et de l'organisation à but non lucratif qui développe CERTBOT? Nous aimerions vous envoyer un e-mail à propos de l'EFF et de notre travail pour crypter le Web, protéger ses utilisateurs et défendre les droits numériques. ------------------------------------------------------------------------------- (Oui Non: n Obtenir un nouveau certificat exécutant les défis suivants: défi HTTP-01 pour www.domaine.com à l'aide du chemin Webroot / USR / local / www / nginx / pour tous les domaines inégalés. En attente de vérification… le nettoyage des défis des notes importantes: - Félicitations! Votre certificat et votre chaîne ont été enregistrés sur / usr / local / etc / lesencrypt / live / www.ton domaine.com / fullchain.pem. Votre certificat expirera le 2017-12-28. Pour obtenir une version nouvelle ou modifiée de ce certificat à l'avenir, exécutez simplement CERTBOT à nouveau. Pour renouveler non interactivement * Tous * de vos certificats, exécutez "CERTBOT RENNEY" - vos informations d'identification de compte ont été enregistrées dans votre répertoire de configuration CERTBOT à / usr / local / etc / LETSENCRYPT. Vous devriez faire une sauvegarde sécurisée de ce dossier maintenant. Ce répertoire de configuration contiendra également des certificats et des clés privées obtenues par certbot, donc la fabrication de sauvegardes régulières de ce dossier est idéale. - Si vous aimez CERTBOT, veuillez envisager de soutenir notre travail en: Don à ISRG / Let's Encrypt: https: // letSencrypt.org / don de don à eff: https: // eff.org / don

Étape 4: Mettre à jour les certificats Nginx TLS

13. L'emplacement des certificats et des clés obtenus, crypt, dans FreeBSD, est / usr / local / etc / lesencrypt / live / www.ton domaine.com / chemin du système. Émettez la commande LS afin d'afficher les composants de votre certificat Let's Encrypt: le fichier de chaîne, le fichier FullChain, la clé privée et le fichier de certificat, comme illustré dans l'exemple suivant.

# LS / USR / LOCAL / ETC / LETSENCYPT / LIVE / WWW.ton domaine.com / 
Liste permet de crypter le domaine SSL-keys

14. Afin d'installer des certificats de crypte pour votre domaine dans le serveur Web Nginx, ouvrez le fichier de configuration principale Nginx ou le fichier de configuration pour le serveur Nginx TLS, au cas où il s'agit d'un fichier séparé, et modifiez les lignes ci-dessous pour refléter le chemin d'accès des certificats émis de Let's Crypt. Comme illustré ci-dessous.

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

Mettez à jour les lignes suivantes à ressembler dans cet échantillon:

ssl_certificate "/ usr / local / etc / lesencrypt / live /www.ton domaine.com/ Cert.pem "; ssl_certificate_key" / usr / local / etc / lesencrypt / live /www.ton domaine.com/ privkey.pem "; 
Configurer SSL pour Nginx

15. Aussi, si la ligne ssl_dhparam est présent dans Nginx ssl configuration, vous devez générer un nouveau 2048 bit Diffie-hellman clé avec la commande suivante:

# OpenSSL DHPARAM -out / usr / local / etc / nginx / dhparam.PEM 2048 

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

# nginx -t # Service nginx redémarrage 

17. Confirmez si le démon de nginx se lie 443 port en émettant les commandes suivantes qui peuvent énumérer toutes les prises de réseau ouvertes dans le système à l'état d'écoute.

# netstat -an -p tcp | grep écouter # sockstat -4 
Vérifiez les ports Nginx

18. Vous pouvez également visiter votre adresse de domaine via Https Protocole en ouvrant un navigateur et saisissez l'adresse suivante afin de confirmer que les certificats de crypte fonctionnent comme prévu. Parce que vous utilisez des certificats générés par une autorité de certificat valide, aucune erreur ne doit être affichée dans le navigateur.

https: // www.ton domaine.com 

19. OpenSSL Utility peut également vous aider à trouver des informations sur un certificat obtenu à partir de Let's Encrypt CA, en exécutant la commande avec les options suivantes.

# OpenSSL S_Client -Connect www.ton domaine.com: 443 
Vérifier le certificat SSL

Dans le cas où vous souhaitez forcer Nginx à diriger toutes les demandes HTTP vers HTTPS reçues pour votre domaine sur le port 80 pour Https, Ouvrez le fichier de configuration Nginx, localisez la directive de serveur pour le port 80 et ajoutez la ligne ci-dessous après l'instruction Server_name comme illustré dans l'exemple ci-dessous.

réécrire ^ (.*) https: // www.ton domaine.com 1 $ permanent; 
Nginx redirige http vers https

20. La configuration du renouvellement automatique pour le certificat délivré par Let's Encrypt Authority avant son expiration peut être effectué en planifiant un travail cron à exécuter une fois par jour en émettant la commande suivante.

# crontab -e 

Cron tâche pour renouveler le certificat.

0 0 * * * CERTBOT RENNEY >> / VAR / LOG / LETSENCRYPT.enregistrer 

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