4 231
modifications
(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" | <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"> | ||
DirectoryIndex disabled | |||
Options Indexes FollowSymLinks | Options -Indexes -FollowSymLinks | ||
AllowOverride None | AllowOverride None | ||
Require all granted | |||
</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 | wget -O /home/acme/work/networklab.fr/intermediate.pem.new https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.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 | ||
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. |