editor, reviewer
416
modifications
(Letsencrypt - Création page) |
(Ajout des informations nginx) |
||
Ligne 8 : | Ligne 8 : | ||
Il y a bien un paquet Debian, mais il m'a posé des problèmes (de sombres histoires de dépendances python que je n'ai pas cherché à résoudre...). | Il y a bien un paquet Debian, mais il m'a posé des problèmes (de sombres histoires de dépendances python que je n'ai pas cherché à résoudre...). | ||
{{Root|Text=apt-get install -s python-letsencrypt}} | |||
<pre> | <pre> | ||
Lecture des listes de paquets... Fait | Lecture des listes de paquets... Fait | ||
Construction de l'arbre des dépendances | Construction de l'arbre des dépendances | ||
Ligne 27 : | Ligne 27 : | ||
Sans parler d'un bug dans les dépendances: | Sans parler d'un bug dans les dépendances: | ||
{{Root|Text=apt-listbugs list python-letsencrypt-apache}} | |||
<pre> | <pre> | ||
Récupération des rapports de bogue… Fait | Récupération des rapports de bogue… Fait | ||
Analyse des informations Trouvé/Corrigé… Fait | Analyse des informations Trouvé/Corrigé… Fait | ||
Ligne 39 : | Ligne 40 : | ||
J'ai donc choisi de l'installer via les sources: | J'ai donc choisi de l'installer via les sources: | ||
===Prérequis: activer et configurer le mod-proxy d'apache2 | ===Prérequis: activer et configurer le serveur web === | ||
====Si vous fonctionnez avec le mod-proxy d'apache2==== | |||
{{Root|Text=a2enmod proxy proxy_http <br /> | |||
$editeur /etc/apache2/mods-enabled/proxy.conf}} | |||
J'ai choisi le port 9999, libre à vous d'en prendre un autre. | J'ai choisi le port 9999, libre à vous d'en prendre un autre. | ||
<pre> | <pre> | ||
<IfModule mod_proxy.c> | <IfModule mod_proxy.c> | ||
Ligne 58 : | Ligne 62 : | ||
</pre> | </pre> | ||
{{Root|Text=apache2ctl restart}} | |||
====Si vous fonctionnez avec Nginx==== | |||
La première chose à rajouter est l'écriture suivante, dans la section 'server' : | |||
<pre> | |||
location '/.well-known' { | |||
allow all; | |||
} | |||
location '/.well-known/acme-challenge' { | |||
allow all; | |||
} | |||
</pre> | |||
Puis tester la config nginx et le recharger si ok : | |||
{{Root|Text=nginx -t <br /> | |||
service nginx reload}} | |||
===Installation:=== | ===Installation:=== | ||
{{Root|Text=apt-get install git <br /> | |||
cd /opt && git clone https://github.com/letsencrypt/letsencrypt}} | |||
Les autres dépendances de letsencrypt seront installée à la génération de votre premier certificat | Les autres dépendances de letsencrypt seront installée à la génération de votre premier certificat | ||
Ligne 69 : | Ligne 91 : | ||
===Premier lancement et création du premier certificat:=== | ===Premier lancement et création du premier certificat:=== | ||
{{Warning2|Text=Un DNS doit être configuré, et renvoyer sur votre serveur Web, sinon ça ne fonctionne pas. Il faut configurer un vhost, et le faire pour chaque domaine et sous-domaine !}} | |||
La commande magique: | La commande magique: | ||
{{Root|Text=cd /opt/letsencrypt/ && ./letsencrypt-auto --agree-tos --renew-by-default --standalone --standalone-supported-challenges http-01 --http-01-port 9999 --server https://acme-v01.api.letsencrypt.org/directory certonly -d domaine.tld}} | |||
cd /opt/letsencrypt/ && ./letsencrypt-auto --agree-tos --renew-by-default --standalone --standalone-supported-challenges http-01 --http-01-port 9999 --server https://acme-v01.api.letsencrypt.org/directory certonly -d domaine.tld | |||
Il installera automatiquement les dépendance manquantes : | |||
<pre> | <pre> | ||
Bootstrapping dependencies for Debian-based OSes... | Bootstrapping dependencies for Debian-based OSes... | ||
Ligne 101 : | Ligne 121 : | ||
</pre> | </pre> | ||
{{Root|Text=ls /etc/letsencrypt/live/domaine.tld <br /> | |||
cert.pem chain.pem fullchain.pem privkey.pem}} | |||
===Configuration des certificats=== | |||
====Si vous fonctionnez avec Apache 2 :==== | |||
Éditez votre VHOST et faites pointer les certificats vers les bons fichiers : | |||
<pre> | |||
... | |||
<VirtualHost xxx.xxx.xxx.xxx:443> | |||
... | |||
<IfModule mod_ssl.c> | |||
SSLEngine on | |||
SSLProtocol All -SSLv2 -SSLv3 | |||
SSLCertificateFile /etc/letsencrypt/live/votredomaine/fullchain.pem | |||
SSLCertificateKeyFile /etc/letsencrypt/live/votredomaine/privkey.pem | |||
SSLCACertificateFile /etc/letsencrypt/live/votredomaine/fullchain.pem | |||
</IfModule> | |||
</pre> | |||
Rechargez apache : | |||
{{Root|Text=/etc/init.d/apache2 force-reload}} | |||
====Si vous fonctionnez avec Nginx :==== | |||
=> Il faut modifier le contexte 'server' de votre domaine, pour modifier celui-ci, le mieux étant de le faire dans un fichier de config à part, puis de l'inclure dans votre contexte, tel que 'ssl.cfg' : | |||
<pre>include /repertoire_vers_le_fichier_config_ssl/ssl.cfg;</pre> | |||
{{Note2|Text=Pensez à virer la déclaration d'écoute sur le port 80 !}} | |||
Fichier 'ssl.cfg' : | |||
<pre> | |||
listen 443 ssl spdy; | |||
#listen [::]:443 ssl spdy; # si ipv6 actif, à décommenter ! | |||
spdy_headers_comp 9; | |||
ssl on; | |||
</pre> | |||
{{Attention2|Text=Si votre version de nginx est >= 1.9.5, ne plus utiliser les déclarations 'spdy', mais 'http2' !}} | |||
=> Ensuite, on va ajouter les autres déclarations liées à l'usage du protocole SSL : | |||
Fichier 'ssl.cfg' : | |||
<pre> | |||
add_header Strict-Transport-Security "max-age=31536000; preload" always; | |||
ssl_certificate /opt/letsencrypt/live/votre_domaine.tld/fullchain.pem; | |||
ssl_certificate_key /opt/letsencrypt/live/votre_domaine.tld/privkey.pem; | |||
ssl_trusted_certificate /opt/letsencrypt/live/votre_domaine.tld/chain.pem; | |||
ssl_dhparam /etc/ssl/private/dhp_4096.pem; | |||
#ssl_ecdh_curve chiffrement_edch_choisi; | |||
ssl_prefer_server_ciphers on; | |||
# Intermediate Mode | |||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | |||
#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:$ | |||
# Modern Mode | |||
#ssl_protocols TLSv1.2; | |||
#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:EC$ | |||
# More secure Mode | |||
#ssl_ciphers 'ECDH:DH:AES:!aNULL:!eNULL:!NULL:!DES:!3DES:!DSS:!EXPORT:!LOW:!MEDIUM:!PSK:!RC4:!SHA'; | |||
ssl_session_cache shared:SSL:10m; | |||
ssl_session_tickets off; | |||
#ssl_session_ticket_key /repertoire_vers_le_fichier_config_ticket_ssl/ticket.key; | |||
ssl_session_timeout 24h; | |||
ssl_stapling on; | |||
ssl_stapling_verify on; | |||
#resolver 127.0.0.1; | |||
# resolvers FDN, OpenNIC | |||
resolver 80.67.169.12 80.67.169.40 142.4.204.111 142.4.205.47 valid=300s; | |||
# resolver ipv6 : FQDN | |||
#resolver 2001:910:800::12 2001:910:800::40 valid=300s; | |||
resolver_timeout 3s; | |||
</pre> | |||
'''Un peu d'explication ne fera pas de mal, non ?!''' | |||
La première déclaration 'add_header' est lié à l'information HTTP STS qui demande au navigateur web de communiquer uniquement sur le protocole HTTPS, durant la période déclarée. La valeur '31536000' correspond à une année ... ''valeur qui peut, bien-sûr, être changée !'' | |||
Les trois autres premières déclarations sont liées aux certificats SSL créés ... | |||
'''ssl_dhparam''': Si vous avez créée votre clé Diffie Hellman, c'est là qu'il faut lui indiquer où elle se trouve ... | |||
Sinon, un petit code shell, tel que, devrait vous servir : | |||
{{Root|Text=openssl dhparam -rand - 4096 -out "/repertoire_ou_vous_voulez/dh_4096.pem"; chmod 0400 /repertoire_ou_vous_voulez/dh_4096.pem}} | |||
'''ssl_ecdh_curve''': est le chiffrement ECDHE choisi | |||
''- à n'utiliser que si vous avez choisi de créer des clés ECDSA ... ce qui avec le client officiel ne peut pas être le cas, à ce jour ...'' | |||
'''ssl_protocols''': On bannit tous les anciens modes SSL, pour n'utiliser QUE les modes TLS. '''C'est un impératif de sécurité !''' | |||
'''ssl_ciphers''': choisissez en décommettant l'un des modes en question ... | |||
* le mode Intermediate est à utiliser si vous voulez que d'anciens navigateurs web puissent accéder à votre site en HTTPS. | |||
* le mode Modern est à utiliser rien que pour les versions récentes de navigateurs web ... | |||
* le mode "secure" refuse ABSOLUMENT certains chiffrements - c'est à ce jour, le plus sécurisé ! | |||
'''ssl_session_tickets''' et '''ssl_session_ticket_key''' sont à utiliser, si et seulement si, vous désirez l'usage des tickets SSL ... dans ce cas, il faut générer un ticket de chiffrement de session ssl, tel que : | |||
{{Root|Text=openssl rand 48 > /repertoire_ou_vous_voulez/ticket.key; chmod 0400 /repertoire_ou_vous_voulez/ticket.key}} | |||
ssl_stapling et ssl_stapling_verify sont liés au mode OCSP stapling est un mode particulier qui oblige vos clients navigateurs web à faire la vérification relative à la validité de votre certificat SSL/TLS à partir de votre serveur web. C'est votre serveur web qui interroge le serveur OCSP, met en cache l'information, et la restitue à vos clients ... à utiliser, de forte préférence ... | |||
'''resolver''': ce sont les serveurs DNS à interroger ! | |||
---- | |||
Bon, toutes ces modifications ayant été faites, testez votre config nginx, puis relancez le service ! | |||
===Renouvellement=== | ===Renouvellement=== | ||
Ligne 109 : | Ligne 248 : | ||
La solution que j'ai choisi: crontab. | La solution que j'ai choisi: crontab. | ||
{{Root|Text=crontab -e}} | |||
<pre> | <pre> | ||
30 1 10 1,3,5,7,9,11 * cd /opt/letsencrypt/ && ./letsencrypt-auto --agree-tos --renew-by-default --standalone --standalone-supported-challenges http-01 --http-01-port 9999 --server https://acme-v01.api.letsencrypt.org/directory certonly -d domaine.tld | 30 1 10 1,3,5,7,9,11 * cd /opt/letsencrypt/ && ./letsencrypt-auto --agree-tos --renew-by-default --standalone --standalone-supported-challenges http-01 --http-01-port 9999 --server https://acme-v01.api.letsencrypt.org/directory certonly -d domaine.tld |