L’auteur a choisi la Electronic Frontier Foundation comme récipiendaire d’un don dans le cadre du programme Write for DOnations.
Cloudflare est un service qui se situe entre le visiteur et le serveur du propriétaire du site web, agissant comme un proxy inverse pour les sites web. Cloudflare fournit un Réseau de Diffusion de Contenu (CDN), ainsi que des services d’atténuation des DDoS et de serveurs de noms de domaine distribués.
Nginx est un serveur web populaire qui héberge certains des sites les plus importants et les plus fréquentés d’Internet. Il est courant que des organisations desservent des sites web avec Nginx et utilisent Cloudflare comme fournisseur de CDN et de DNS.
Dans ce tutoriel, vous allez sécuriser votre site web servi par Nginx avec un certificat Origin CA de Cloudflare et ensuite configurer Nginx pour utiliser des requêtes d’extraction authentifiées. Les avantages de cette configuration sont que vous bénéficiez du CDN et de la résolution DNS rapide de Cloudflare tout en vous assurant que toutes les connexions passent par Cloudflare. Cela empêche toute requête malveillante d’atteindre votre serveur.
Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :
sudo
et un pare-feu.Origin CA de Cloudflare vous permet de générer un certificat TLS gratuit signé par Cloudflare, à installer sur votre serveur Nginx. En utilisant le certificat TLS généré par Cloudflare, vous pouvez sécuriser la connexion entre les serveurs de Cloudflare et votre serveur Nginx.
Pour générer un certificat avec Origin CA, connectez-vous à votre compte Cloudflare dans un navigateur web. Sélectionnez le domaine que vous souhaitez sécuriser et naviguez jusqu’à la section SSL/TLS de votre tableau de bord Cloudflare. De là, naviguez jusqu’à l’onglet Origin Server (Serveur d’origine) et cliquez sur le bouton Create Certificate (Créer un certificat) :
Laissez l’option par défaut Let Cloudflare generate a private key and a CSR (Laisser Cloudflare générer une clé privée et une RSE) sélectionnée.
Cliquez sur Next (Suivant) et vous verrez un dialogue avec le Origin Certificate (certificat d’origine) et la Private key (clé privée). Vous devez transférer à la fois le certificat d’origine et la clé privée de Cloudflare vers votre serveur. Pour des raisons de sécurité, les informations relatives à la clé privée ne s’afficheront plus. Copiez donc la clé sur votre serveur avant de cliquer sur Ok.
Nous utiliserons le répertoire /etc/ssl
sur le serveur pour contenir les fichiers de certificat d’origine et de clé privée. Le dossier existe déjà sur le serveur.
Tout d’abord, copiez le contenu du certificat d’origine affiché dans la boîte de dialogue de votre navigateur.
Ensuite, sur votre serveur, ouvrez /etc/ssl/cert.pem
dans votre éditeur de texte préféré :
- sudo nano /etc/ssl/cert.pem
Ajoutez le contenu du certificat dans le fichier. Ensuite, sauvegardez et quittez l’éditeur.
Retournez ensuite à votre navigateur et copiez le contenu de la clé privée. Ouvrez le fichier /etc/ssl/key.pem
pour le modifier :
- sudo nano /etc/ssl/key.pem
Collez la clé privée dans le fichier, enregistrez le fichier et quittez l’éditeur.
Remarque : parfois, lorsque vous copiez le certificat et la clé à partir du tableau de bord Cloudflare et que vous les collez dans les fichiers correspondants sur le serveur, des lignes vierges sont insérées. Nginx considérera ces certificats et ces clés comme non valides, assurez-vous donc qu’il n’y a pas de lignes blanches dans vos fichiers.
Attention : le certificat Origin AC de Cloudflare n’est fiable que sur Cloudflare et ne doit donc être utilisé que par les serveurs d’origine qui sont activement connectés à Cloudflare. Si, à un moment donné, vous mettez en pause ou désactivez Cloudflare, votre certificat d’AC d’origine affichera une erreur de certificat non fiable.
Maintenant que vous avez copié les fichiers de clés et de certificats sur votre serveur, vous devez mettre à jour la configuration de Nginx pour les utiliser.
Dans la section précédente, vous avez généré un certificat d’origine et une clé privée en utilisant le tableau de bord de Cloudflare et avez enregistré les fichiers sur votre serveur. Vous allez maintenant mettre à jour la configuration de Nginx pour votre site afin d’utiliser le certificat d’origine et la clé privée pour sécuriser la connexion entre les serveurs de Cloudflare et votre serveur.
Tout d’abord, assurez-vous que UFW autorisera le trafic HTTPS. Activez Nginx Full
, qui ouvrira à la fois le port 80
(HTTP) et le port 443
(HTTPS) :
- sudo ufw allow 'Nginx Full'
Relancez maintenant UFW :
- sudo ufw reload
Enfin, vérifiez que vos nouvelles règles sont autorisées et que UFW est actif :
- sudo ufw status
Vous verrez un résultat similaire à ce qui suit :
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Vous êtes maintenant prêt à ajuster votre bloc serveur Nginx. Nginx crée un bloc serveur par défaut lors de l’installation. Supprimez-le s’il existe encore, car vous avez déjà configuré un bloc de serveur personnalisé pour votre domaine :
- sudo rm /etc/nginx/sites-enabled/default
Ensuite, ouvrez le fichier de configuration Nginx pour votre domaine :
- sudo nano /etc/nginx/sites-available/your_domain
Le dossier devrait ressembler à ceci :
server {
listen 80;
listen [::]:80;
root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
server_name your_domain www.your_domain;
location / {
try_files $uri $uri/ =404;
}
}
Nous allons modifier le fichier de configuration de Nginx pour faire ce qui suit :
80
et redirigez toutes les requêtes pour qu’elles utilisent le protocole https
.443
et utilisez le certificat d’origine et la clé privée que vous avez ajoutés dans la section précédente.Modifiez le fichier de manière à ce qu’il ressemble à ce qui suit :
server {
listen 80;
listen [::]:80;
server_name your_domain www.your_domain;
return 302 https://$server_name$request_uri;
}
server {
# SSL configuration
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl on;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
server_name your_domain www.your_domain;
root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
Enregistrez le fichier et quittez l’éditeur.
Ensuite, procédez à un test pour vous assurer qu’il n’y a aucune erreur de syntaxe dans aucun de vos fichiers Nginx :
- sudo nginx -t
Si aucun problème n’a été trouvé, redémarrez Nginx pour permettre vos modifications :
- sudo systemctl restart nginx
Allez maintenant dans la section SSL/TLS du tableau de bord Cloudflare, naviguez jusqu’à l’onglet Overview (Vue d’ensemble), et changez le mode de cryptage SSL/TLS en mode Full (strict). Ceci informe Cloudflare de toujours crypter la connexion entre Cloudflare et votre serveur Nginx d’origine.
Visitez maintenant votre site web à l’adresse https://your_domain
pour vérifier qu’il est correctement configuré. Vous verrez votre page d’accueil s’afficher et le navigateur vous indiquera que le site est sécurisé.
Dans la section suivante, vous allez mettre en place des Authenticated Origin Pulls (Extractions à l’Origine Authentifiée) pour vérifier que votre serveur d’origine parle bien à Cloudflare et non à un autre serveur. Ce faisant, Nginx sera configuré pour n’accepter que les requêtes qui utilisent un certificat client valide de Cloudflare ; toutes les requêtes qui ne sont pas passées par Cloudflare seront abandonnées.
Le certificat Origin CA aidera Cloudflare à vérifier qu’il parle au bon serveur d’origine. Cette étape utilisera l’authentification du client TLS pour vérifier que votre serveur Nginx d’origine parle à Cloudflare.
Dans le cadre d’un handshake TLS authentifié par le client, les deux parties fournissent un certificat à vérifier. Le serveur d’origine est configuré pour n’accepter que les requêtes qui utilisent un certificat client Cloudflare valide. Les requêtes qui ne sont pas passées par Cloudflare seront abandonnées car elles n’auront pas le certificat de Cloudflare. Cela signifie que les pirates ne peuvent pas contourner les mesures de sécurité de Cloudflare, ni se connecter directement à votre serveur Nginx.
Cloudflare présente des certificats signés par une AC avec le certificat suivant :
-----BEGIN CERTIFICATE-----
MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
+4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
fVQ6VpyjEXdiIXWUq/o=
-----END CERTIFICATE-----
Vous pouvez également télécharger le certificat directement à partir de Cloudflare ici.
Copiez ce certificat.
Puis, créez le fichier /etc/ssl/cloudflare.crt
pour y placer le certificat de Cloudflare :
- sudo nano /etc/ssl/cloudflare.crt
Ajoutez le certificat au fichier. Ensuite, enregistrez le fichier et quittez l’éditeur.
Mettez maintenant à jour votre configuration Nginx pour utiliser les Extractions d’Origine Authentifiée TLS. Ouvrez le fichier de configuration de votre domaine :
- sudo nano /etc/nginx/sites-available/your_domain
Ajoutez les directives ssl_client_certificate
et ssl_verify_client
, comme indiqué dans l’exemple suivant :
. . .
server {
# SSL configuration
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl on;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client on;
. . .
Enregistrez le fichier et quittez l’éditeur.
Ensuite, testez Nginx pour vous assurer qu’il n’y a pas d’erreurs de syntaxe dans votre configuration Nginx :
- sudo nginx -t
Si aucun problème n’a été trouvé, redémarrez Nginx pour permettre vos modifications :
- sudo systemctl restart nginx
Enfin, pour activer les Extractions Authentifiées, ouvrez la section SSL/TLS dans le tableau de bord Cloudflare, naviguez jusqu’à l’onglet Origin Server (Serveur d’Origine) et cochez l’option Authenticated Origin Pulls.
Visitez maintenant votre site web à l’adresse https://your_domain
pour vérifier qu’il est correctement configuré. Comme auparavant, vous verrez s’afficher votre page d’accueil.
Pour vérifier que votre serveur n’accepte que les demandes signées par l’AC de Cloudflare, basculez l’option Authenticated Origin Pulls pour la désactiver, puis rechargez votre site web. Le message d’erreur suivant devrait apparaître :
Votre serveur d’origine génère une erreur si une requête n’est pas signée par l’AC de Cloudflare.
Remarque : la plupart des navigateurs mettent les requêtes en cache. Pour voir le changement ci-dessus, vous pouvez donc utiliser le mode de navigation Incognito/Privé dans votre navigateur. Pour éviter que Cloudflare ne mette les requêtes en cache pendant que vous configurez votre site web, naviguez jusqu’à l’aperçu dans le tableau de bord Cloudflare et basculez en Development Mode (Mode Développement).
Maintenant que vous savez qu’il fonctionne correctement, retournez à la section SSL/TLS du tableau de bord Cloudflare, naviguez jusqu’à l’onglet Origin Server (Serveur d’origine) et activez à nouveau l’option Authenticated Origin Pulls pour l’activer.
Dans ce tutoriel, vous avez sécurisé votre site web alimenté par Nginx en cryptant le trafic entre Cloudflare et le serveur Nginx à l’aide d’un certificat Origin CA de Cloudflare. Vous avez ensuite configuré des Authenticated Origin Pulls (Extractions d’Origine Authentifiée) sur le serveur Nginx pour vous assurer qu’il n’accepte que les requêtes des serveurs Cloudflare, empêchant ainsi toute autre personne de se connecter directement au serveur Nginx.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!