Le lecteur électronique Nia à 100 $ de Kobo bat le Kindle en termes de résolution et de stockage – Review Geek
16 juillet 2020
Le guide de régime et d'entraînement définitif
16 juillet 2020

Logo Nginx

Si vous avez juste besoin d'un chiffrement pour les connexions de serveur internes ou les sites non accessibles aux utilisateurs, la signature de vos propres certificats SSL est un moyen facile d'éviter de traiter avec une autorité de certification externe. Voici comment le configurer dans nginx.

Si vous êtes plus intéressé à obtenir des certificats SSL gratuits, vous pouvez toujours utiliser LetsEncrypt, qui convient mieux aux serveurs publics avec des sites Web destinés aux utilisateurs, car il apparaîtra comme provenant d'une autorité de certification reconnue dans les navigateurs des utilisateurs. Cependant, il ne peut pas être utilisé pour crypter des adresses IP privées, c'est pourquoi vous devez signer vous-même un certificat.

Générer et signer automatiquement un certificat SSL

Pour ce faire, nous utiliserons le openssl utilitaire. Vous l'avez probablement déjà installé, car il s'agit d'une dépendance de Nginx. Mais s'il est en quelque sorte manquant, vous pouvez l'installer à partir du gestionnaire de packages de votre distribution. Pour les systèmes basés sur Debian comme Ubuntu, ce serait:

sudo apt-get install openssl

Après openssl est installé, vous pouvez générer le certificat avec la commande suivante:

sudo openssl req -x509 -nodes -days 365 -newkey rsa: 2048 -keyout /etc/ssl/private/nginx.key -out /etc/ssl/certs/nginx.crt

On vous demandera des informations sur votre organisation. Comme il s'agit d'une auto-signature, le seul qui compte vraiment est le «nom commun», qui doit être défini sur votre nom de domaine ou sur l'adresse IP de votre serveur.

Nom du pays (code à 2 lettres) ():
Nom de l'État ou de la province (nom complet) ():
Nom de la localité (par exemple, ville) ():
Nom de l'organisation (par exemple, société) ():
Nom de l'unité organisationnelle (par exemple, section) ():
Nom commun (par exemple, nom d'hôte complet) (): votre_adresse_ip
Adresse e-mail ():

Cela prendra une seconde pour générer une nouvelle clé privée RSA, utilisée pour signer le certificat et le stocker dans /etc/ssl/private/nginx.key. Le certificat lui-même est stocké dans /etc/ssl/certs/nginx.crtet est valable pour une année entière.

Nous voulons également générer un groupe Diffie-Hellman. Ceci est utilisé pour une parfaite confidentialité secrète, qui génère des clés de session éphémères pour garantir que les communications passées ne peuvent pas être déchiffrées si la clé de session est compromise. Ce n'est pas entièrement nécessaire pour les communications internes, mais si vous voulez être aussi sécurisé que possible, vous ne devez pas ignorer cette étape.

sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096

Cela prend un certain temps – environ une heure selon la vitesse de votre serveur. Prenez un déjeuner et revenez un peu à votre terminal pour configurer Nginx.

Configurer Nginx pour utiliser votre clé privée et votre certificat SSL

Pour faciliter les choses, nous allons mettre toute la configuration dans un fichier d'extrait que nous pouvons inclure dans notre nginx serveur blocs. Créez un nouvel extrait de configuration dans nginx extraits annuaire:

touchez /etc/nginx/snippets/self-signed.conf

Ouvrez-le dans votre éditeur de texte préféré et collez ce qui suit dans:

ssl_certificate /etc/ssl/certs/nginx.crt;
ssl_certificate_key /etc/ssl/private/nginx.key;

ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
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;
ssl_session_timeout 10m;
ssl_session_cache partagé: SSL: 10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
résolveur 8.8.8.8 8.8.4.4 valide = 300s;
resolver_timeout 5s;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode = block";

ssl_dhparam /etc/nginx/dhparam.pem;
ssl_ecdh_curve secp384r1;

Les deux premières lignes de cet extrait configurent nginx pour utiliser notre certificat auto-fabriqué et notre propre clé privée. Le bloc suivant est les paramètres SSL généraux, et enfin les deux dernières lignes configurent nginx pour utiliser notre groupe Diffie-Hellman pour la sécurité directe. Vous pouvez omettre cela si vous n'avez pas envie d'attendre.

La seule autre chose à activer serait HTTP Strict Transport Security, qui configure votre site pour qu'il utilise toujours SSL. Cela nécessiterait une redirection permanente de HTTP vers HTTPS, vous devez donc vérifier que SSL fonctionne avant de l'activer.

Maintenant, modifiez votre configuration principale de nginx (généralement située à /etc/nginx/nginx.conf pour des sites uniques ou sous votre nom de domaine / etc / nginx / sites-available pour les serveurs multisites) et source l'extrait de code:

serveur {
    écouter 443 ssl;
    écouter (: :): 443 ssl;

    inclure des extraits / auto-signé.conf;

    nom_serveur example.com www.example.com;
    . . .
}

Vous voudrez également configurer une redirection de HTTP vers HTTPS, ce que vous pouvez faire avec une écoute de bloc de serveur supplémentaire sur le port 80:

serveur {
    écouter 80;
    écouter (: :): 80;

    nom_serveur example.com www.example.com;

    return 302 https: // $ server_name $ request_uri;
}

Il s'agit d'une redirection 302, qui n'est que temporaire. Vous voudrez passer à 301 si tout fonctionne correctement.

Testez votre configuration en redémarrant nginx:

redémarrage du service sudo nginx

Étant donné que le trafic HTTPS utilise le port 443, vous devrez configurer vos pare-feu pour autoriser le transport sur ce port. Si vous utilisez iptables ou UFW, vous devrez ouvrir les ports à partir de la ligne de commande. Si vous utilisez un service d'hébergement comme AWS doté d'un pare-feu intégré, vous devrez également les ouvrir à partir de leur interface Web.

Interface de pare-feu AWS

Si votre service fonctionne entièrement au sein de votre réseau local, vous souhaiterez peut-être ajouter à la liste blanche votre sous-réseau spécifique d'adresses IP pour désactiver l'accès depuis l'extérieur du réseau local et accéder à vos serveurs via une connexion VPN.

Si tout fonctionne correctement, vous devriez maintenant pouvoir accéder à votre serveur via HTTPS. Votre navigateur Web peut afficher un avertissement comme celui-ci:

avertissement SSL Chrome

Ne vous inquiétez pas, cela est prévu et la raison pour laquelle vous ne pouvez pas utiliser ces certificats pour les sites Web destinés aux clients. Vous devrez confirmer manuellement que vous faites confiance au serveur pour y accéder.

L'avertissement affiché ici est légèrement trompeur: votre site est sécurisé tant que la clé privée n'est pas compromise et il est parfaitement sécurisé si vous configurez le secret de diffusion Diffie-Hellman. Le problème réside dans l'identité, car Chrome ne peut pas vérifier que votre serveur est bien celui qu'il dit, car vous avez signé le certificat vous-même.

Une fois que vous avez vérifié qu'il n'y a aucun problème avec SSL, vous pouvez basculer la redirection HTTP vers une redirection 301:

return 301 https: // $ server_name $ request_uri;

Et redémarrez nginx pour appliquer les modifications.

//]]>