Gestion des certificats sous nginx

Rédigé par Paulo Aucun commentaire
Classé dans : Web Mots clés : certificat

 


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

 

Les commentaires sont fermés.