GNU/Linux >> Tutoriels Linux >  >> Linux

Comment configurer plusieurs SSL sur une seule IP avec Nginx

Avec le manque d'espace d'adressage disponible dans IPv4, les adresses IP deviennent de plus en plus difficiles à trouver et, dans certains cas, de plus en plus chères. Cependant, dans la plupart des cas, ce n'est pas un inconvénient. Les serveurs sont parfaitement capables d'héberger plusieurs sites Web sur une seule adresse IP, comme ils le font depuis des années.

Mais, il fut un temps où l'utilisation d'un certificat SSL pour sécuriser le trafic vers votre site exige ayant une adresse IPv4 distincte pour chaque domaine sécurisé. Ce n'est pas parce que les SSL étaient liés aux adresses IP, ou même aux serveurs, mais parce que la demande d'informations sur le certificat SSL ne spécifiait pas quel domaine était chargé, et donc le serveur était obligé de répondre avec un seul certificat. Une incompatibilité de nom a provoqué un avertissement de certificat non sécurisé, et par conséquent, un propriétaire de serveur devait avoir des adresses IP uniques pour tous les hôtes SSL.

Heureusement, les limitations d'IPv4 ont mis au premier plan les nouvelles technologies et la convivialité, notamment l'indication du nom du serveur (SNI).

Pourquoi ai-je besoin d'un SSL ?

Les certificats Secure Socket Layer (SSL) permettent une communication cryptée bidirectionnelle entre un client et un serveur. Cela permet de protéger toutes les données des regards indiscrets, y compris les informations sensibles telles que les numéros de carte de crédit ou les mots de passe. Les SSL sont éventuellement signés par une autorité de signature tierce bien connue, telle que GlobalSign. L'utilisation la plus courante de ces certificats consiste à sécuriser le trafic Web via HTTPS.

Lors de la navigation sur un site HTTPS, plutôt que d'afficher un indicateur positif, les navigateurs modernes affichent un négatif indicateur pour un site qui n'est pas à l'aide d'un SSL. Ainsi, les sites Web qui n'ont pas de SSL auront un drapeau rouge dès le départ pour tout nouveau visiteur. Les sites qui veulent maintenir leur réputation sont donc obligés d'obtenir un SSL.

Heureusement, il est si facile d'obtenir et d'installer un SSL, même gratuitement, que cela se réduit à une simple formalité. Nous aborderons les détails ci-dessous.

Qu'est-ce que le SNI ?

L'indication du nom du serveur est une fonctionnalité de navigateur et de serveur Web dans laquelle une requête HTTPS inclut un en-tête supplémentaire, server_name , auquel le serveur peut répondre avec le certificat SSL approprié. Cela permet à une seule adresse IP d'héberger des centaines ou des milliers de domaines, chacun avec son propre SSL !

La technologie SNI est disponible sur tous les navigateurs et logiciels de serveur Web modernes, de sorte que plus de 98 % des utilisateurs Web, selon W3, seront en mesure de la prendre en charge.

Vérification avant vol

Nous allons travailler sur un serveur VPS CentOS 7 qui utilise Nginx et PHP-FPM pour héberger des sites Web sans aucun panneau de contrôle (cPanel, Plesk, etc.). C'est ce qu'on appelle communément une pile « LEMP », qui remplace Apache par Nginx dans la pile « LAMP ». Ces instructions seront similaires à la plupart des autres versions de Linux, bien que l'installation de Let's Encrypt pour Ubuntu 18.04 soit différente. J'inclurai des instructions côte à côte pour CentOS 7 et Ubuntu 18.04.

Pour le reste des instructions, nous supposerons que Nginx est installé et configuré pour héberger plusieurs sites Web, y compris la configuration du pare-feu pour ouvrir les ports nécessaires (80 et 443). Nous sommes connectés via SSH à un shell sur notre serveur en tant que root.

RemarqueSi vous avez des SSL pour chaque domaine, mais qu'ils ne sont tout simplement pas encore installés, vous devez utiliser l'étape 3a pour les ajouter manuellement. Si vous n'avez pas de SSL et souhaitez utiliser le service gratuit Let's Encrypt pour les commander et les configurer automatiquement, vous devez utiliser l'Étape 3b .

Étape 1 :Activer SNI dans Nginx

Notre première étape est déjà terminée ! Les versions de référentiel modernes de Nginx seront compilées avec la prise en charge d'OpenSSL pour les informations SNI du serveur par défaut. Nous pouvons le confirmer sur la ligne de commande avec :

nginx -V

Cela affichera un tas de texte, mais nous ne sommes intéressés que par cette ligne :

...
TLS SNI support enabled
...

Si vous n'avez pas de ligne comme celle-ci, alors Nginx devra être recompilé manuellement pour inclure ce support. Ce serait un cas très rare, comme dans une version obsolète de Nginx, déjà compilée manuellement à partir de la source avec une autre bibliothèque OpenSSL. La version Nginx installée par le référentiel CentOS 7 EPEL (1.12.2) et celle incluse avec Ubuntu 18.04 (1.14.0) prendront en charge SNI.

Étape 2 :Configuration des hôtes virtuels Nginx

Étant donné que vous avez déjà configuré plusieurs domaines dans Nginx, vous avez probablement des blocs de configuration de serveur configurés pour chaque site dans un fichier séparé. Au cas où vous ne le feriez pas, assurons-nous d'abord que nos domaines sont configurés pour le trafic non SSL. Si tel est le cas, vous pouvez ignorer cette étape. Nous allons travailler sur domain.com et example.com.

vim /etc/nginx/sites-available/domain.com

RemarqueSi vous n'avez pas de dossiers activés pour les sites ou disponibles pour les sites et que vous souhaitez les utiliser, vous pouvez créer /etc/nginx/sites-available et /etc/nginx/sites-enabled avec le mkdir commande. Ensuite, dans /etc/nginx/nginx.conf , ajoutez cette ligne n'importe où dans le http{} principal block (nous vous recommandons de le placer juste après cette ligne d'inclusion qui parle de conf.d) :

include /etc/nginx/sites-enabled/*;

Sinon, vous pouvez faire vos configurations dans /etc/nginx/conf.d/*.conf .

À tout le moins, insérez les options suivantes, en remplaçant la racine du document par le véritable chemin d'accès aux fichiers de votre site et en ajoutant toute autre variable dont vous avez besoin pour vos sites :

server {
listen 80;
server_name domain.com;
root /var/www/domain.com;
...
}

Un fichier similaire doit être configuré pour example.com et tous les autres domaines que vous souhaitez héberger. Une fois ces fichiers créés, nous pouvons les activer avec un lien symbolique :

ln -s /etc/nginx/sites-available/domain.com /etc/nginx/sites-enabled/

ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Maintenant, nous redémarrons Nginx…

systemctl reload nginx

Cela recharge les fichiers de configuration sans redémarrer l'application. Nous pouvons confirmer que les deux que nous venons de créer sont chargés en utilisant :

nginx -T

Vous devriez voir votre server_name ligne pour domain.com et example.com.

RemarqueL'écoute ligne incluse dans le bloc serveur ci-dessus permettra au site d'écouter sur n'importe IP qui est sur le serveur. Si vous souhaitez spécifier une adresse IP à la place, vous pouvez utiliser le IP:port format à la place, comme ceci :

server {
listen 123.45.67.89:80;
...
}

Étape 3a :Ajouter des SSL existants aux hôtes virtuels Nginx

Maintenant que nous avons des configurations d'exécution valides, nous pouvons ajouter les SSL que nous avons pour ces domaines en tant que nouveaux blocs de serveur dans Nginx. Tout d'abord, enregistrez votre certificat SSL et la clé (privée) dans un dossier global sur le serveur, avec des noms qui indiquent le domaine concerné. Disons que vous avez choisi le dossier global de /etc/ssl/ . Nos noms, dans ce cas, seront /etc/ssl/domain.com.crt (qui contient le certificat lui-même et tous les certificats de chaîne de l'autorité de signature), et /etc/ssl/domain.com.key , qui contient la clé privée. Modifiez les fichiers de configuration que nous avons créés :

vim /etc/nginx/sites-available/domain.com

Ajoutez un tout nouveau bloc de serveur sous la fin du bloc existant (en dehors de la dernière accolade) avec les informations suivantes :

server {
listen 443;
server_name domain.com;
root /var/www/domain.com;
ssl_certificate /etc/ssl/domain.com.crt;
ssl_certificate_key /etc/ssl/domain.com.key;
...
}

Notez le changement du port d'écoute en 443 (pour HTTPS) et l'ajout du ssl_certificate et ssl_certificate_key lignes. Au lieu de réécrire tout le bloc, vous pouvez copier le bloc serveur d'origine, puis ajouter ces lignes supplémentaires, tout en modifiant le port d'écoute. Enregistrez ce fichier et rechargez la configuration Nginx.

systemctl reload nginx

Nous confirmons à nouveau que le changement est en place en utilisant :

nginx -T

Pour certaines configurations, vous verrez deux les lignes nom_serveur chacune pour domaine.com et exemple.com, une utilisant le port 80 et une utilisant le port 443. Si vous le faites, vous pouvez passer à l'étape 4, sinon passez à l'étape suivante.

Étape 3b :Installer et configurer Let's Encrypt

Configurons ensuite le fournisseur SSL gratuit Let's Encrypt pour signer automatiquement les certificats pour tous les domaines que nous venons de configurer dans Nginx. Sur Ubuntu 18.04 , ajoutez le PPA et installez les scripts de certificat avec apt itude :

add-apt-repository ppa:certbot/certbot

apt-get update

apt-get install certbot python-certbot-nginx

Dans CentOS 7 , nous installons le référentiel EPEL et installons l'assistant de certificat à partir de là.

yum install epel-release

yum install certbot python2-certbot-nginx

Sur les deux systèmes, nous pouvons maintenant lire la configuration Nginx et demander au Certbot de nous attribuer des certificats.

certbot --nginx

Cela vous posera quelques questions sur les domaines que vous souhaitez utiliser (vous pouvez laisser l'option vide pour sélectionner tous les domaines) et si vous souhaitez que Nginx redirige le trafic vers votre nouveau SSL (nous le ferions !). Une fois le processus de signature terminé, Nginx devrait recharger automatiquement sa configuration, mais si ce n'est pas le cas, rechargez-la manuellement :

systemctl reload nginx

Vous pouvez maintenant vérifier la configuration en cours avec :

nginx -T

Vous devriez maintenant voir deux lignes nom_serveur chacune pour domaine.com et exemple.com, une utilisant le port 80 et une utilisant le port 443.

Les certificats Let's Encrypt ne sont valables que pendant 90 jours à compter de leur émission, nous voulons donc nous assurer qu'ils sont automatiquement renouvelés. Modifiez le fichier cron pour l'utilisateur root en exécutant :

crontab -e

Le cron devrait ressembler à ceci :

45 2 * * 3,6 certbot renew && systemctl reload nginx

Une fois ce fichier enregistré, tous les mercredis et samedis à 2h45, le certbot La commande vérifiera les renouvellements nécessaires, téléchargera et installera automatiquement les certificats, suivi d'un rechargement de la configuration Nginx.

Étape 4 :Vérifier l'installation et la validité

Nous devons maintenant vérifier la validité de nos SSL et nous assurer que les navigateurs voient correctement le certificat. Visitez sslcheck.liquidweb.com et saisissez vos noms de domaine pour vérifier le SSL du site sur votre serveur. Vous devriez voir quatre coches vertes, indiquant la protection SSL.

Nous espérons que vous avez apprécié notre didacticiel sur l'installation de SSL sur plusieurs sites au sein d'un même serveur. Les clients de Liquid Web ont accès à notre équipe d'assistance 24h/24 et 7j/7. Nous pouvons vous aider avec SSL signé ou commander un nouveau serveur pour un transfert facile vers Liquid Web.


Linux
  1. Comment configurer plusieurs sites Web avec le serveur Web Apache

  2. Comment configurer l'origine Cloudflare SSL avec Nginx

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

  4. Comment configurer plusieurs certificats SSL sur un VPS CentOS avec Apache en utilisant une seule adresse IP

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

Comment configurer Nginx avec la prise en charge HTTP/2 sur Ubuntu 18.04

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

Comment configurer la synchronisation de l'heure avec NTP sur Ubuntu 18.04

Comment configurer un serveur Seafile avec Nginx sur Ubuntu 18.04

Comment configurer un serveur FTP avec ProFTPD dans Ubuntu 18.04

Comment configurer un serveur de messagerie avec Modoboa sur Ubuntu 20.04