Let's Encrypt
Let's Encrypt permet de générer des certificats HTTPS gratuitement pour vos sites internet.
Pour pouvior générer des certificats HTTPS, il faut avoir accès au serveur en ligne de commande.
Générer un certificat HTTPS
Sur le serveur, il faut exécuter :
git clone https://github.com/letsencrypt/letsencrypt
Ensuite, il faut arrêter les serveurs qui écoute sur le port 80 :
service nginx stop
si vous avez Nginx ou si vous avez Apache :
service apache2 stop
Aller dans le dossier où Let’s Encrypt a été cloné, et exécutez :
./letsencrypt-auto --server https://acme-v01.api.letsencrypt.org/directory certonly
Choisissez le certificat standalone, puis donner votre adresse email et les noms de domains à certifier séparer par des espaces. Avec Let's Encrypt, vous ne pouvez pas utilisez le wildcard (*) pour certifier plusieurs domaines ou sous domaines à la fois.
Le résultat dans la console sera :
Generating key (2048 bits): /etc/letsencrypt/keys/0003_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0003_csr-certbot.pem
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/wadzaa.fr/fullchain.pem. Your cert will expire on 2017-05-21. To obtain a new or tweaked version of this certificate in the future, simply run letsencrypt-auto again. To non-interactively renew *all* of your certificates, run "letsencrypt-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Intégrer les certificats avec Apache
Ensuite, pour Apache, il faut inclure les fichiers générés dans le virtualhost :
SSLCertificateFile "/etc/letsencrypt/live/monsite.net/cert.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/monsite.net/privkey.pem"
SSLCertificateChainFile "/etc/letsencrypt/live/monsite.net/chain.pem"
Pour faire la redirection de HTTP vers HTTPS, il faut ajouter au début du fichier :
<Virtualhost *:80>
ServerName oc.kgaut.net
RedirectMatch permanent ^(.*)$ https://oc.kgaut.net$1
</Virtualhost>
Intégrer les certificats avec Nginx
Ou avec Nginx :
include /etc/nginx/conf.d/monsite.net.certificate;
monsite.net.certificate est le fichier suivant :
#### Let's Encrypt Pass-Through
#### Inclusion de SSL
#### En-têtes de sécurité
# [ATTENTION] Strict-Transport-sécurité arrêtera l'accès HTTP pour le temps spécifié.
#add_header Strict-Transport-Security "max-age=63072000";
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
# [ATTENTION] X-Frame-Options DENY brisera les sites iframe.
#add_header X-Frame-Options DENY;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options nosniff;
#add_header X-Xss-Protection "1";
## Désactivé par rapport utilisation ruby on rails errors copy 2x
add_header X-XSS-Protection "1; mode=block";
#### Liens clés SSL
ssl on;
# [OPTION] Nom du serveur
# Lien symbolique vers les fichiers principaux
# ln -s /etc/letsencrypt/live/monsite.net/fullchain.pem /home/user1/config/ssl/monsite.net.pem
# ln -s /etc/letsencrypt/live/monsite.net/privkey.pem /home/user1/config/ssl/monsite.net.privkey.pem
ssl_certificate /home/da/config/ssl/monsite.net.pem;
ssl_certificate_key /home/da/config/ssl/monsite.net.privkey.pem;
ssl_trusted_certificate /home/da/config/ssl/monsite.net.pem;
#### SSL Stapling
# [ATTENTION] Nécessite un 'ssl_trusted_certificate' valide
ssl_stapling on;
ssl_stapling_verify on;
# Google DNS, Open DNS, Dyn DNS.
resolver 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 216.146.35.35 216.146.36.36 valid=300s;
resolver_timeout 3s;
#### Tickets de session
ssl_session_tickets on;
ssl_session_timeout 24h;
# [ATTENTION] Il faudra générer le ticket de session.
ssl_session_cache shared:SSL:100m;
#
ssl_session_ticket_key /etc/nginx/ssl/ticket.key;
#### Paramètres de Diffie-Helman
# [ATTENTION] Les paramètres Diffie-Helman doivent être générés.
ssl_dhparam /etc/nginx/ssl/dhparam4.pem;
#### ECDH Curve
# [DEFAULT] Généralement suffisante.
ssl_ecdh_curve secp384r1;
#### Préférence & Protocoles
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# [DEFAULT] Mozilla SSL Configuration Generator
# https://mozilla.github.io/server-side-tls/ssl-config-generator/
# Nginx for Modern Browsers
# Grade A (A+ with HSTS at >= 6 Months)
# 90 % Security
# Medium Compatibility
# - No Java 6 (No DH parameters > 1024 bits)
# - No IE on XP
# Robust Forward Secrecy
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
Regénérer les certificats
Les certificats seront valides 90 jours, pour les revalider 90 jours, il faut lancer la commande :
letsencrypt-auto again
Il y a aussi cette commande mais j’ai pas compris à quoi elle sert :
letsencrypt-auto renew
Sources https://kgaut.net/journal/2015/comment-generer-son-certificat-ssl-avec-lets-encrypt.html