meta données pour cette page
Ajouter de la sécurité (Nginx)
Sécuriser les communications (TLS)
Site de vérifications pour tester la qualité du chiffrage :
Site de recommandation :
Officiel avec Let's Encrypt
On a besoin de ces dépendances :
apt-get install git bc wget curl
Téléchargeons et installons le logiciel client :
git clone https://github.com/Neilpang/acme.sh.git cd acme.sh/ ./acme.sh --install rm -r acme.sh/
Créons le dossier qui contiendra les certificats et le Diffie-Hellman :
mkdir -p /etc/nginx/ssl/exemple.com/ cd /etc/nginx/ssl/exemple.com/ openssl dhparam -out dhparams.pem 4096
Créons les certificats pour notre site web :
acme.sh --issue -w /var/www/html/ -d exemple.com -k 4096
On déclare les certificats dans notre contexte Nginx :
nano /etc/nginx/sites-available/exemple.com
- exemple.com
server { #... config de base puis on ajoute ces lignes : ssl on; ssl_certificate /etc/nginx/ssl/exemple.com/exemple.com.cer; ssl_certificate_key /etc/nginx/ssl/exemple.com/exemple.com.key; ssl_session_timeout 30m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS; ssl_session_cache shared:SSL:10m; ssl_dhparam /etc/nginx/ssl/exemple.com/dhparams.pem; ssl_prefer_server_ciphers on; ## Improves TTFB by using a smaller SSL buffer than the nginx default ssl_buffer_size 8k; ## Enables OCSP stapling ssl_stapling on; resolver 8.8.8.8; ssl_stapling_verify on; ## Send header to tell the browser to prefer https to http traffic add_header Strict-Transport-Security max-age=31536000; }
Installer les certificats pour le serveur nginx :
acme.sh --installcert -d exemple.com --keypath /etc/ssl/private/exemple.com/exemple.com.key --fullchainpath /etc/ssl/certs/exemple.com/exemple.com.cer --reloadcmd 'systemctl reload nginx'
Félicitation! Testez et obtetez le résultat des clés d'échange via SSL Labs
Pour renouveler son certificat, il suffit de faire :
acme.sh --renew -d exemple.com
On peut l'ajouter dans une tâche cron pour automatiser le renouvellement :
crontab -e
Puis ajouter cette ligne pour qu'elle soit exécuté tous les 3 mois au même jour où les certificats ont été créer :
1 1 18 */3 * "/home/pi/.acme.sh/acme.sh --renew -d exemple.com" > /dev/null
Ce tutoriel est un condensé du tutoriel suivant : https://www.cyberciti.biz/faq/how-to-configure-nginx-with-free-lets-encrypt-ssl-certificate-on-debian-or-ubuntu-linux/
Ça fonctionne toujours pas ? Peut être qu'avec ce tutoriel ça marchera.
Auto-signé
openssl req -x509 -sha256 -newkey rsa:4096 -days 365 -nodes -out /etc/ssl/certs/example.com.crt -keyout /etc/ssl/private/example.com.key -subj "/C=FR/ST=Example/L=Example/O=Example/CN=example.org"
server { listen 443 ssl; ssl_certificate /etc/ssl/certs/example.com.crt; ssl_certificate_key /etc/ssl/private/example.com.key; }
Cacher la version de développement
nano /etc/nginx/nginx.conf
On enlève le dièse devant ce commentaire :
server_tokens off;
Eviter les petites attaques par DDOS
On ajoute dans le paramètre http du fichier nginx.conf ces lignes :
#Connexions maximum par ip limit_conn_zone $binary_remote_addr zone=limit_per_ip:1m; limit_conn limit_per_ip 30; #Nombre de requêtes par secondes maximum par ip limit_req_zone $binary_remote_addr zone=allips:10m rate=150r/s; limit_req zone=allips burst=150 nodelay;
Protéger un répertoire
On créer un utilisateur :
htpasswd -c /var/www/html/.htpasswd mon-utilisateur
location / { auth_basic "site protégé"; auth_basic_user_file conf/htpasswd; }
Cele requis le module suivant :
ngx_http_auth_basic_module