1. Installation du client Let's encrypt
apt-get update apt-get -y install git bc git clone https://github.com/certbot/certbot /opt/certbot
Let's encrypt est désormais installé dans /opt/letsencrypt
2. Création fichier de config
mkdir /usr/local/etc/letsencrypt vi /usr/local/etc/letsencrypt/example.com.ini
/usr/local/etc/letsencrypt/example.com.ini
# This is an example of the kind of things you can do in a configuration file. # All flags used by the client can be configured here. Run Let's Encrypt with # "--help" to learn more about the available options. # Use a 4096 bit RSA key instead of 2048 rsa-key-size = 4096 email = yourcontact@gmail.com domains = example.com,www.example.com webroot-path = /var/www/example-webroot
3. Obtention du certificat
cd /opt/certbot ./certbot-auto certonly --config /usr/local/etc/letsencrypt/example.com.ini --webroot
ls /etc/letsencrypt/live/example.com
4. Configuration serveur Nginx
vi /etc/nginx/sites-available/example
server { server_name www.example.com example.com; listen 443 ssl; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; root /var/www/example; index index.php index.html index.htm; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # pass the PHP scripts to FastCGI server listening on the php-fpm socket location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } server { listen 80; #Redirect all request from 80 port to https server_name example.com, www.example.com; return 301 https://$host$request_uri; }
Sauvegarder et quitter, redémarrer Nginx
service nginx restart
Désormais, on peut tester si l'url example.com est bien en HTTPS.
4.Bis Configuration serveur Apache
<VirtualHost _default_:443> ServerAdmin webmaster@localhost ServerName example.com DocumentRoot /var/www <Directory /var/www/> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM SSLCertificateFile "/etc/letsencrypt/live/example.com/cert.pem" SSLCertificateKeyFile "/etc/letsencrypt/live/example.com/privkey.pem" SSLCertificateChainFile "/etc/letsencrypt/live/example.com/chain.pem" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost> <VirtualHost *:80> #Redirect all traffic on 80 port to https ServerName example.com RedirectMatch permanent ^(.*)$ https://example.com$1 </VirtualHost>
Activer SSL sur apache
a2enmod ssl
5. Mise en place du renouvellement automatique
Les certificats let's encrypt sont valident 90 jours, nous devons donc les renouveller avant cela. Pas question de renouveller à la main.
apt-get install curl
curl -L -o /usr/local/sbin/le-renew-webroot https://gist.githubusercontent.com/spiderneo/3f4b66c4282809e228f2/raw/e62f6f63e52cf3814c790b72c453a575add29b04/le-renew-webroot chmod +x /usr/local/sbin/le-renew-webroot
Test le script
le-renew-webroot output Checking expiration date for example.com... The certificate is up to date, no need for renewal (89 days left).
On ajoute une ligne au crontab
crontab -e 30 2 * * 1 /usr/local/sbin/le-renew-webroot >> /var/log/le-renewal.log
6. Options - Force rechargement d'un domaine
cd /opt/certbot ./certbot-auto certonly -a webroot --renew-by-default --config /usr/local/etc/letsencrypt/example.com.ini
Redémarrer Nginx
service nginx restart
7. Problème création acme-challenge 403 ou 404 sur apache
Impossible de valider le lien sur apache avec ma config (allez savoir pourquoi). A chaque fois ->W erreur 403 le dossier .well-know était innacessible.
Pour palier à celà, on va rediriger les utilisateur vers un sous dossier sans le .
mkdir -p /srv/www/acme-challenges/ vi /etc/apache2/conf-enabled/acme-challenges.conf
Coller cette conf afind e rediriger les utilsateur qui ouvrent /.well-known/acme-challenge vers /srv/www/acme-challenges
Alias /.well-known/acme-challenge /srv/www/acme-challenges <Directory "/srv/www/acme-challenges"> Options -Indexes AllowOverride all Require all granted </Directory>
Création du lien symbolique qui permet à Certbot de savoir que well-know/acme-challenge a change de répertoire.
cd /var/www/example.com/.well-known/ ln -s /srv/www/acme-challenges/ acme-challenge
Relancer votre certbot-auto et Voilà
Wildcard
apt-get install certbot python-certbot-apache apt-get install python3-certbot-dns-ovh