Tout le monde a la possibilité de se faire son propre site web avec un contrôle total dessus, au lieu d’utiliser un hébergeur web tierce, qu’il soit payant ou gratuit. Ainsi, nous avons décidé de faire un guide pour que vous soyiez capable de créer votre propre site, avec HTTPS, sur Nginx.

Nécessités

  • Un serveur/ordinateur avec un système d’exploitation basé sur Debian (Debian, Ubuntu, Mint, Tails…) avec un accès SSH et un compte sudo/root.
  • Un autre ordinateur avec un client SSH quelconque (PuTTY, MinTTY, le client intégré ssh de Windows 10, openssh-clients sur Linux Shell)
  • Posséder un nom de domaine

Options

  • Un client SCP visuel peut aider pour visualiser les fichiers. Nécessite un accès SSH sur le serveur où le site sera installé
  • Posséder un certificat SSL/TLS déjà présent

1. Associer les records DNS du serveur au nom de domaine

Avant tout, il est nécessaire de posséder un nom de domaine. Vous ne voudriez pas tout de même forcer vos visiteurs à accéder directement à l’adresse IP de votre serveur ou par le nom d’hôte (hostname) du serveur par défaut…

Dans le cas où vous n’en possédez pas encore, vous pouvez en magasiner chez multiples registrars comme Whois, 1&1, GoDaddy, et la liste est longue. Bien sûr faites attention de bien regarder leur accréditation ICANN et magasinez bien: les prix varient grandement. Vous êtes bons si vous en possédez déjà.

Ensuite, vous vous connecterez sur l’interface de votre registrar. Ainsi, vous pourrez accéder aux paramètres DNS de votre nom de domaine.

Il doit y alors avoir quelque chose du genre:

HOST
TYPE
VALUE
TTL
@
A Record
0.0.0.0
3600
www
A Record
0.0.0.0
3600

Il faut que vous changiez 0.0.0.0 pour l’adresse IP de votre serveur où vous allez mettre votre site.

Il est possible que vous ayiez une autre adresse du genre 2001:470:1f2c:d0::2 – Il s’agit d’une adresse IPv6, que vous pouvez rajouter comme un record AAAA pour les hôtes @ et www.

Généralement, vous saurez déjà l’adresse IP de votre serveur, particulièrement si vous achetez un serveur dédié ou un VPS. Sinon, ouvrez votre ordinateur où vous souhaitez mettre votre site et cherchez votre adresse IP publique. (Ouvrez vos ports 80 et 443 sur votre routeur si il s’agit de votre réseau internet de la maison).

2. Préparez votre serveur / Installez Nginx

Connectez-vous sur votre serveur via ssh:

$ ssh user@host

User correspond à votre nom d’utilisateur et host est l’adresse du serveur: adresse IP ou nom de domaine. Vous devrez ensuite entrer votre mot de passe. Vous l’avez probablement défini lorsque vous aviez initialement installé le système d’exploitation.

Il faut ensuite préparer le serveur pour Nginx, il faut donc d’abord vérifier qu’il n’y a aucune trace de Nginx auparavant.

$ sudo apt-get purge -- auto-remove nginx nginx-common
$ sudo apt-get clean
$ sudo apt-get update && sudo apt-get upgrade

Désactivez tous les autres serveur HTTP utilisant les ports 80 et 443 et vous pourrez continuer.

Pour les prochaines étapes, remplacez domaine.com par votre nom de domaine que vous avez enregistré.

3. Installez Nginx

$ sudo apt-get update
$ sudo apt-get install nginx

4. Paramétrez nginx.conf

$ sudo nano /etc/nginx/nginx.conf

Ajoutez dans le fichier:

user www-data;
pid /run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 65535;

events {
	multi_accept on;
	worker_connections 65535;
}

http {
	charset utf-8;
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	server_tokens off;
	log_not_found off;
	types_hash_max_size 2048;
	client_max_body_size 16M;

	# spécifiez le type MIME
	include mime.types;
	default_type application/octet-stream;

	# activez l'historique pour consulter ces logs en cas de problème
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log warn;

	# paramétrez les paramètres SSL par défaut
	ssl_session_timeout 1d;
	ssl_session_cache shared:SSL:50m;
	ssl_session_tickets off;

	# définissez les paramètres Diffie-Hellman pour les suites de chiffrage DHE
	ssl_dhparam /etc/nginx/dhparam.pem;

	# paramètres de connection SSL
        # définissez les versions de TLS activées
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        # définissez les suites de chiffrage à vos goûts mais celle-ci marche avec la majorité des navigateurs
	ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
	ssl_prefer_server_ciphers on;

	# Attachez le protocole OCSP à votre certificat
	ssl_stapling on;
	ssl_stapling_verify on;
	resolver 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s; # Google DNS and OpenDNS are here as DNS resolvers for the OCSP service.
	resolver_timeout 2s;

	# charger les configuration par site - nécessaire
	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

5. Paramétrer _general.conf

$ sudo nano /etc/nginx/_general.conf

Ajoutez le contenu suivant dans le fichier:

# définissez les en-têtes HTTP pour plus de sécurité
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

# . files
location ~ /\. {
        deny all;
}

# définissez les fichiers à garder en cache
location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
        expires 7d;
        access_log off;
}

# SVG, polices d'écriture
location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff|woff2)$ {
        add_header Access-Control-Allow-Origin "*";
        expires 7d;
        access_log off;
}

# Activer la compression gzip pour plus rapidement se connecter
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss application/atom+xml image/svg+xml;

6. Créez et configurez le site

$ sudo mkdir -p /var/www/html/DOMAINE
$ touch /var/www/html/DOMAINE/index.html && cat "Bientôt ouvert" > /var/www/html/DOMAINE/index.html
$ sudo nano /etc/nginx/sites-available/DOMAINE

Ajoutez le contenu suivant:

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        server_name www.DOMAINE.com;
        root /var/www/html/DOMAINE/;

        # SSL
        ssl_certificate /var/ssl/DOMAINE/certificate.crt;
        ssl_certificate_key /var/ssl/DOMAINE/certificate.crt;

        include _general.conf;
}

# Redirecting domain apex

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        server_name DOMAINE.com;

        # SSL
        ssl_certificate /var/ssl/DOMAINE/certificate.crt;
        ssl_certificate_key /var/ssl/DOMAINE/certificate.crt;

        return 301 https://www.DOMAINE.com$request_uri;
}

# Redirection HTTP à HTTPS

server {
        listen 80;
        listen [::]:80;
        server_name www.DOMAINE.com DOMAINE.com;
        return 301 https://$host$request_uri;
}
$ sudo ln -s /etc/nginx/sites-available/DOMAINE /etc/nginx/sites-enabled/DOMAINE

Si vous ne vous sentez pas confortable pour installer un certificat SSL, utilisez cette simple configuration pour les systèmes Nginx qui sont très sous-puissants. Nous le recommandons pas pour les standards d’aujourd’hui.

server {
        listen 80;
        listen [::]:80;

        server_name www.DOMAINE.com DOMAINE.com;
        include _general.conf;
        root /var/www/html/DOMAIN/;
}

7. Créer et configurer un site par défaut

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        server_name _;
        root /var/www/html/default/;

        # SSL
        ssl_certificate /var/ssl/default/certificate.crt;
        ssl_certificate_key /var/ssl/default/certificate.crt;

        include _general.conf;
}

# Redirecting HTTP to HTTPS

server {
        listen 80;
        listen [::]:80;

        server_name _;

        return 301 https://$host$request_uri;
}

Remplacez naturellement les valeurs des variables par celles qui vous conviennent.

Définir un site par défaut pour Nginx est surtout utile lorsque vous avez plusieurs sites web mais que vous ne voulez pas avoir d’erreurs de mauvais certificat, particulièrement les vieux clients, ou parce que vous ne voulez pas que d’autres noms de domaine associés à la même adresse IP que votre serveur servent le contenu de votre site web.

$ sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default

8. Créer un certificat SSL

Ignorez cette étape si vous disposez déjà d’un certificat SSL de n’importe quelle autorité de certification (COMODO, GoDaddy, Certum, DigiCert, Symantec…).

Rendez-vous sur sslforfree.com pour obtenir un certificat SSL de Let’s Encrypt.

Entrez *.domaine.com et domaine.com et cliquez sur « Create free SSL certificate ».

Cliquez ensuite sur « Manual verification » et vous obtiendrez des records DNS que vous entrerez chez votre registrar dans les paramètres DNS. Une fois fait, Cliquez sur « Verify _acme-challenge.domaine.com » et les deux records devraient apparaître. Sinon, attendez le nombre de secondes spécifié dans le TTL (mettez le au minimum dans votre gestionnaire DNS, c’est important, car parfois il faut attendre jusqu’à 12 heures si vous l’avez mal configuré).

Une fois que les deux records sont apparus, cliquez sur Download SSL certificate et vous serez menés à une page avec 3 zones de texte. Il s’agit de votre certificat. Vous pourrez ensuite l’installer dans votre chemin vers les certificats SSL tels que spécifiés dans votre configuration Nginx.

Il est nécessaire de combiner le certificat et le CA_Bundle en 1 seul fichier certificate.crt sur votre serveur et mettez la clé privée dans un fichier private.key dans le même dossier dans le chemin d’accès tel que spécifié dans votre configuration Nginx.

Faites de même pour tous les sites que vous voudriez avoir à côté de celui-ci.

Copiez le certificat de votre site le plus important dans le dossier du certificat SSL par défaut ou créez un nouveau certificat SSL qui couvre tous les domaines. Il y a une limite théorique de 255 SAN qui varie en pratique selon les autorités de certification.

Une fois tout cela fait…

9. Redémarrez Nginx

$ /etc/init.d/nginx configtest
$ nginx -s reload
$ sudo systemctl restart nginx

Exécutez ces commandes pour redémarrer Nginx et voyez votre serveur web actif!

10. Vérifiez la configuration SSL de votre (vos) site(s)

Attendez quelques minutes puis accédez votre site avec votre navigateur, si la barre d’adresse affiche « Secure » ou un cadenas vert, cela veut dire que vous l’avez correctement installé. Bravo!

Visitez www.ssllabs.com pour vérifier votre statut SSL avec des conseils concernant la sécurité sur le web.

11. Commencez à éditer votre site!

Vous pouvez éditer votre site dans /var/www/html/DOMAINE/. Pour le moment il n’y a qu’un seul fichier index.html contenant « Bientôt ». Modifiez-le ou écrasez-le pour éditer votre site.


Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

%d blogueurs aiment cette page :