« Sécuriser ses sites avec letsencrypt et acme-tiny » : différence entre les versions

Aller à la navigation Aller à la recherche
 
(15 versions intermédiaires par le même utilisateur non affichées)
Ligne 23 : Ligne 23 :
=Pré-configuration (pour la première utilisation)=
=Pré-configuration (pour la première utilisation)=
Avant de générer les certificats, commencez par créer un utilisateur dédié qui se chargera de faire tourner le script.
Avant de générer les certificats, commencez par créer un utilisateur dédié qui se chargera de faire tourner le script.
Nous partirons sur un utilisateur nommé acme, avec un home dans /home/acme.
Nous partirons sur un utilisateur nommé acme, avec un home dans /home/acme et dont les mails sont redirigés vers root :
<pre>
adduser --disabled-login --disabled-password acme
echo "acme:  root" >> /etc/aliases
postalias /etc/aliases
</pre>


Avec cet utilisateur (su - acme) :
Avec cet utilisateur (su - acme) :
Ligne 55 : Ligne 60 :
mkdir /home/acme/work/networklab.fr
mkdir /home/acme/work/networklab.fr
chmod -R 750 /home/acme/work/
chmod -R 750 /home/acme/work/
chmod -x /home/acme/work/*/*
</pre>
</pre>
Ici pour le domaine networklab.fr, à adapter dans votre cas. On créé également un répertoire dédié au domaine dans work.
Ici pour le domaine networklab.fr, à adapter dans votre cas. On créé également un répertoire dédié au domaine dans work.
Ligne 61 : Ligne 67 :
Afin de demander votre certificat il est nécessaire de générer une demande de certificat.
Afin de demander votre certificat il est nécessaire de générer une demande de certificat.
Si vous n'avez qu'une adresse qui sera derrière votre certificat :
Si vous n'avez qu'une adresse qui sera derrière votre certificat :
<pre>openssl req -new -sha256 -key /home/acme/secrets/networklab.fr.key -subj "/CN=networklab.fr" > /home/acme/work/networklab.fr/networklab.fr.csr</pre>
<pre>openssl req -new -sha256 -key /home/acme/secrets/networklab.fr.key -subj "/CN=networklab.fr" -out /home/acme/work/networklab.fr/networklab.fr.csr</pre>
Mais plus généralement vous en aurez au moins deux (une avec et une sans le www) :
Mais plus généralement vous en aurez au moins deux (une avec et une sans le www) :
<pre>openssl req -new -sha256 -key /home/acme/secrets/networklab.fr.key -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:networklab.fr,DNS:www.networklab.fr")) > /home/acme/work/networklab.fr/networklab.fr.csr</pre>
<pre>openssl req -new -sha256 -key /home/acme/secrets/networklab.fr.key -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:networklab.fr,DNS:www.networklab.fr")) -out /home/acme/work/networklab.fr/networklab.fr.csr</pre>
 
Vous pouvez vérifier les différentes informations entrés dans le CSR avec la commande suivante :
<pre>openssl req -in /home/acme/work/networklab.fr/networklab.fr.csr -noout -text</pre>


Avant de générer votre certificat, letsencrypt vient vérifier que votre site vous appartient bien. Pour cela le script va déposer un fichier de "challenge" à l'endroit que vous lui définissez et qui doit être accessible à l'adresse /.well-known/acme-challenge/.
Avant de générer votre certificat, letsencrypt vient vérifier que votre site vous appartient bien. Pour cela le script va déposer un fichier de "challenge" à l'endroit que vous lui définissez et qui doit être accessible à l'adresse /.well-known/acme-challenge/.
Ligne 86 : Ligne 95 :
<pre>
<pre>
<Directory "/home/networklab.fr/www/challenges">
<Directory "/home/networklab.fr/www/challenges">
     AllowOverride FileInfo AuthConfig Limit Indexes
     DirectoryIndex disabled
     Options Indexes FollowSymLinks MultiViews
     Options -Indexes -FollowSymLinks
     AllowOverride None
     AllowOverride None
     Order allow,deny
     Require all granted
    Allow from all
</Directory>
  </Directory>
Alias /.well-known/acme-challenge "/home/networklab.fr/www/challenges"
Alias /.well-known/acme-challenge "/home/networklab.fr/www/challenges"
</pre>
</pre>
Ligne 114 : Ligne 122 :
python /home/acme/acme-tiny/acme_tiny.py --account-key /home/acme/secrets/account.key --csr /home/acme/work/networklab.fr/networklab.fr.csr --acme-dir /home/networklab.fr/www/challenges/ > /home/acme/work/networklab.fr/networklab.fr.crt
python /home/acme/acme-tiny/acme_tiny.py --account-key /home/acme/secrets/account.key --csr /home/acme/work/networklab.fr/networklab.fr.csr --acme-dir /home/networklab.fr/www/challenges/ > /home/acme/work/networklab.fr/networklab.fr.crt
umask 027
umask 027
wget -O - https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem > /home/acme/work/networklab.fr/intermediate.pem
wget -O /home/acme/work/networklab.fr/intermediate.pem.new https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem
cat /home/acme/work/networklab.fr/networklab.fr.crt /home/acme/work/networklab.fr/intermediate.pem  > /home/acme/work/networklab.fr/networklab.fr.pem
 
openssl x509 -in /home/acme/work/networklab.fr/networklab.fr.crt -text -noout &> /dev/null
error=$?
if [ ! $error == 0 ] ; then
        echo "ERROR: ACME output is not a valid x509 certificate"
        exit 1
fi
 
openssl x509 -in /home/acme/work/networklab.fr/intermediate.pem.new -text -noout &> /dev/null
error=$?
if [ ! $error == 0 ] ; then
        echo "ERROR: intermediate.pem is not a valid x509 certificate"
        exit 1
fi
 
#only done if no error
mv /home/acme/work/networklab.fr/intermediate.pem.new /home/acme/work/networklab.fr/intermediate.pem
cp /home/acme/work/networklab.fr/networklab.fr.crt /home/acme/work/networklab.fr/networklab.fr.pem
chmod o-r /home/acme/work/networklab.fr/*
</pre>
</pre>
Le changement d'umask permet d'écrire le fichier de challenges avec des droits permettant à Apache de servir le fichier (le fichier étant créé en acme:acme, l'umask 027 ne le permet pas).
Le changement d'umask permet d'écrire le fichier de challenges avec des droits permettant à Apache de servir le fichier (le fichier étant créé en acme:acme, l'umask 027 ne le permet pas).
Ligne 149 : Ligne 175 :
         SSLCertificateFile /home/acme/work/networklab.fr/networklab.fr.pem
         SSLCertificateFile /home/acme/work/networklab.fr/networklab.fr.pem
         SSLCertificateKeyFile /home/acme/secrets/networklab.fr.key
         SSLCertificateKeyFile /home/acme/secrets/networklab.fr.key
        SSLProtocol all -SSLv2 -SSLv3 -TLSv1
        SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
        SSLHonorCipherOrder on
         Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
         Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
         Header always set X-Frame-Options DENY
         Header always set X-Frame-Options DENY
Ligne 161 : Ligne 184 :
On retrouve la configuration du certificat intermédiaire, du certificat de notre domaine et de la clé.
On retrouve la configuration du certificat intermédiaire, du certificat de notre domaine et de la clé.
Ensuite différentes configurations SSL, à adapter selon la date à laquelle vous lirez ce tuto.
Ensuite différentes configurations SSL, à adapter selon la date à laquelle vous lirez ce tuto.
Exemple de redirection automatique vers HTTPS :
<pre>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/.*
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
</pre>
Vous noterez l'exemption qui est faite à <code>/.well-known/acme-challenge/</code> pour que letsencrypt vienne toujours vérifier les challenges en HTTP et éviter un blocage lié à un certificat expiré.


Dernière étape, configurer un reload d'Apache juste après la date prévue pour le renouvellement de vos certificats.
Dernière étape, configurer un reload d'Apache juste après la date prévue pour le renouvellement de vos certificats.
4 203

modifications

Menu de navigation