Gestion des certificats sous nginx
Obtenir un certificat Lets'Encrypt 'gratoche' :
- génération du certificat :
Important :
. pour generer/renouveller le certificat, il est indispensable d'ouvrir le port 80 sur la freebox
. source : http://www-lium.univ-lemans.fr/~etienne/docs/linux/reseau/letsencrypt%20certbot.html
#installation de certbot sudo apt-get install certbot # arreter nginx sudo systemtcl stop nginx # generation du certificat certbot certonly --standalone -d sub.domaine.com # modification de la conf nginx .... ssl on; ssl_certificate /etc/letsencrypt/live/cornilyon.fr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/cornilyon.fr/privkey.pem; #testage conf nginx sudo nginx -t # démarrer nginx sudo systemtcl start nginx
- renouvellement du certof (valable 90 jours)
# crontab user paulo crontab -l # renouvellemnent du certificat a 6h00 (renouvellement uniquement si necessaire) # PS : il faut ouvrir le port 80 sur la freebox pour que ça fonctionne 00 06 * * * sudo /usr/bin/certbot renew --dry-run --pre-hook "service nginx stop" --post-hook "service nginx start" >>/tmp/certboot_renewal.log
OLDIES, JE NE SAIS PLUS SI CA MARCHE
-
sur mon rasp
#obtenir le script qui va bien wget https://dl.eff.org/certbot-auto #positionner le droit d'execution chmod a+x certbot-auto #sur mon rasp, ./certbot-auto ne fonctionne pas, j'ai utilisé certbot-auto certonly
-
après quelques boite de dialogues, le/les certificats sont créés dans '/etc/letsencrypt/live/cornilyon.fr'
ps : j'ai chosi l'option 'Automatically use a temporary webserver(standalone) - j'ai rajouté un nom de domaine et du coup j'ai simplement relancé le'certboot-auto certonly' (en arretant nginx)
Modification des fichiers de conf de nginx (virtualhost pour moi) :
-
dans /etc/nginx/site-available, modif des vhosts :
server { listen 443 ssl; server_name cornilyon.fr www.cornilyon.fr; root /.../.../www.cornilyon.fr; index index.html index.htm index.php; ssl on; ssl_certificate /etc/letsencrypt/live/cornilyon.fr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/cornilyon.fr/privkey.pem; if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } ## Block download agents ## if ($http_user_agent ~* LWP::Simple|BBBike|wget) { return 403; } location ~ \.php$ { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } }
Renouvellemnt du certificat (valable 90j) dans la crontab :
Ps :
- on peut lancer le renouvellement tous les jours car il celui-ci ne se fera que lorsque la date de validité du certof sera dépassée.
- crontab de l'utilisateur paulo
#crontab crontab -e 00 06 * * * sudo /etc/nginx/ssl/certbot-auto renew --standalone \ #tous les jours a 06h00 --pre-hook "service nginx stop" \ #arret nginx obligatoire --post-hook "service nginx start" \#relance >>/tmp/certboot_renewal.log \#un petit log
Issue suite a tentative de renouvellement du certificat (crontab) :
paulo@raspberrypi /etc/nginx/ssl $ sudo /etc/nginx/ssl/certbot-auto renew --standalone --pre-hook "service nginx stop" --post-hook "service nginx start" >>/tmp/certboot_renewal.log Error: couldn't get currently installed version for /root/.local/share/letsencrypt/bin/letsencrypt: Traceback (most recent call last): File "/root/.local/share/letsencrypt/bin/letsencrypt", line 7, in <module> from certbot.main import main File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/certbot/main.py", line 13, in <module> from acme import jose File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/acme/jose/__init__.py", line 37, in <module> from acme.jose.interfaces import JSONDeSerializable File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/acme/jose/interfaces.py", line 9, in <module> from acme.jose import util File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/acme/jose/util.py", line 4, in <module> from cryptography.hazmat.primitives.asymmetric import rsa File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py", line 14, in <module> from cryptography.hazmat.backends.interfaces import RSABackend File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/cryptography/hazmat/backends/__init__.py", line 7, in <module> import pkg_resources File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 21, in <module> import io File "/usr/lib/python2.7/io.py", line 51, in <module> import _io ImportError: No module named _io
Solution trouvée ici : https://community.letsencrypt.org/t/cant-use-letsencrypt-auto-importerror-no-module-named--io/2345/3
sudo mv /root/.local/share/letsencrypt /root/.local/share/letsencrypt_old
Ca fonctionne nickel chez moi (on aurait pu supprimer tout le bazar mais chui prudent...)
Ps : https://www.itzgeek.com/how-tos/linux/how-to-install-lets-encrypt-on-centos-debian-ubuntu-running-apache-web-server.html