• Applications
  • [Discussion] Certificat SSL signé et gratuit avec Let's Encrypt

Ca marche. Merci beaucoup d'avoir pris le temps de m'expliquer Hardware !

Je vais m'ateler à ca.
6 jours plus tard
Pour info, la bêta publique de Let's Encrypt est ouverte !
Et plutot bonne nouvelle, depuis la beta ouverte, même si on sait que les certificats "wildards" ne sont pas acceptés (et ont apriori, pas vocation a l'être par Let's Encrypt), on peu désormais obtenir un certificat pour autre chose que domain.tld et www.domain.tld !

J'ai fait l'essai avec domain.tld, www.domain.tld, mail.domain.tld et torrent.domain.tld : ca fonctionne tip top.



coom wrote:Et plutot bonne nouvelle, depuis la beta ouverte, même si on sait que les certificats "wildards" ne sont pas acceptés (et ont apriori, pas vocation a l'être par Let's Encrypt), on peu désormais obtenir un certificat pour autre chose que domain.tld et www.domain.tld !

J'ai fait l'essai avec domain.tld, www.domain.tld, mail.domain.tld et torrent.domain.tld : ca fonctionne tip top.

http://img15.hostingpics.net/pics/6842952015120323h3205.png

8o)
Cool ton thème rutorrent, c'est quoi ?
coom wrote:Et plutot bonne nouvelle, depuis la beta ouverte, même si on sait que les certificats "wildards" ne sont pas acceptés (et ont apriori, pas vocation a l'être par Let's Encrypt), on peu désormais obtenir un certificat pour autre chose que domain.tld et www.domain.tld !

J'ai fait l'essai avec domain.tld, www.domain.tld, mail.domain.tld et torrent.domain.tld : ca fonctionne tip top.

http://img15.hostingpics.net/pics/6842952015120323h3205.png

8o)
Et du coup, si j'ai déja enregistré un domaine durant la beta fermée, je fais comment pour obtenir un certif pour chacun de mes sous domaine ? Je relance l'instal ?
winz: tu relances le même process que pour la beta fermée, mais sans spécifier le serveur. Au moment ou il te demande les domaines, tu les specifie tous en les séparant par un espace.

Tu peu aussi faire ca avec un "one-liner" :
/tmp/letsencrypt/letsencrypt-auto auth -d domain.tld -d www.domain.tld -d torrent.domain.tld -d mail.domain.tld -d pop.domain.tld -d imap.domain.tld
etc etc..

xataz: C'est le thème Agent46.
coom wrote:winz: tu relances le même process que pour la beta fermée, mais sans spécifier le serveur. Au moment ou il te demande les domaines, tu les specifie tous en les séparant par un espace.

Tu peu aussi faire ca avec un "one-liner" :
/tmp/letsencrypt/letsencrypt-auto auth -d domain.tld -d www.domain.tld -d torrent.domain.tld -d mail.domain.tld -d pop.domain.tld -d imap.domain.tld
etc etc..

xataz: C'est le thème Agent46. 😉

J'arrive pas à trouver à quoi l'argument "auth" corresponds
xataz: A la base le client sert à traiter avec les serveurs de Let's Encrypt afin de recuperer le certificat, et il configure au passage ton serveur web. Comme le support de nginx est tjs en beta (visiblement pas super stable aux dernieres news), tu peux utiliser "certonly" pour obtenir le certificat mais sans modifier la conf de ton serveur web.

Le mode "certonly" est aussi connu sous le nom "auth".

Source: letsencrypt-auto --help
root@linux:/tmp/letsencrypt# ./letsencrypt-auto --help
Updating letsencrypt and virtual environment dependencies.......
Running with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt --help

  letsencrypt [SUBCOMMAND] [options] [-d domain] [-d domain] ...

The Let's Encrypt agent can obtain and install HTTPS/TLS/SSL certificates.  By
default, it will attempt to use a webserver both for obtaining and installing
the cert. Major SUBCOMMANDS are:

  (default) run        Obtain & install a cert in your current webserver
  certonly             Obtain cert, but do not install it (aka "auth")
Avec ça tu devrais avoir du A+ :
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/ssl/dh4096.pem;
ssl_session_cache shared:SSL:10m;
ssl_ecdh_curve secp521r1;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
ssl_session_tickets off;
Bien générer un dhparam d'une taille d'au moins 2048 dans /etc/nginx/ssl (et adapter la directive).
Rajouter des protocoles si nécessaire.
    Rate limit on registrations per IP is currently 10 per 3 hours
    Rate limit on certificates per Domain is currently 5 per 7 days
    Obligé d'attendre...
    Petit tuto pour avoir un A+

    Il faut se connecter en root, pour les opérations suivantes.

    Il faut stopper nginx avant tout
    service nginx stop
    Toujours mettre à jour le serveur avant :
    aptitude update && aptitude upgrade
    mkdir /etc/nginx/ssl
    openssl openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
    # vim /etc/nginx/ssl/ciphers.conf
    
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA";
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_ecdh_curve secp384r1;
    ssl_session_tickets off;
    
    add_header Strict-Transport-Security "max-age=31536000";
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    note : le max age de Strict-Transport-Security correspond à 1an.

    Ensuite il faut inclure le fichier ciphers.conf dans http {}
    # vim /etc/nginx/nginx.conf
    
    http {
        include /etc/nginx/ssl/ciphers.conf
    }
    Installation de letsencrypt
    cd /tmp
    git clone https://github.com/letsencrypt/letsencrypt
    cd letsencrypt
    Après cette étape il faut générer le certificat via let's encrypt, avec une clée RSA de 4096bits
    ./letsencrypt-auto --help all
    ./letsencrypt-auto certonly --rsa-key-size 4096
    Il faudra ajouter une adresse mail, accepter la licence, et ajouter les sous domaines espacer d'un espace.

    Pour finir il faudra ajouter 2 lignes dans chacun de vos vhosts.
    # vim /etc/nginx/sites-enbled/monsite.fr.conf
    
    server {
        ssl_certificate /etc/letsencrypt/live/monsite.fr/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/monsite.fr/privkey.pem;
    }
    Pour finaliser il ne faut pas oublier de redémarrer nginx
    service nginx start
    Quitte à avoir une configuration homogène, et pour éviter un léger surcoût CPU, mettre ssl_ecdh_curve à secp384r1 est plus que suffisant. Il est aussi bon de de savoir que par défaut, letsencrypt génère des clés RSA 2048 bits, il est donc possible d'utiliser une taille de 4096 par exemple, il suffira de préciser (c'est le petit plus pour les paranoïaques et ceux qui veulent gonfler leur note sur ssllabs).
    Oui, proposez vos améliorations au niveau de la config nginx, je mettrai le tuto de jede à jour si il ne le fait pas.

    ATTENTION : J'ai eu un soucis avec les header envoyé par nginx à vos navigateur web, notamment avec HSTS.
    C'est cette ligne qui pose problème dans certain cas.
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
    Elle va vous poser un problème si vous avez des sous domaines que vous voulez garder en http://.
    Votre navigateur web va forcer le https sur tous les sous domaines de votre nom de domaine.
    J'ai eu le problème avec le https://chat.mondedie.fr ou même http://flarum.mondedie.fr

    Pour résoudre le problème j'ai modifié comme ça
    add_header Strict-Transport-Security "max-age=31536000";
    edit : je pense que l'on va garder cette config
    Je suis du même avis que Wonderfall, mettre plutôt un ECC à 384 bits au lieu de 521, surtout pour des questions de compatibilité avec certains navigateurs :
    ssl_ecdh_curve secp384r1;
    Pour la suite de chiffrement je te conseil :
    ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA"
    ça équivaut à "EECDH+AES" mais sans ECDHE-ECDSA, inutile vu que ta clé publique est de type RSA.

    Tout est expliqué ici : https://blog.imirhil.fr/2015/09/02/cryptcheck-verifiez-implementations-tls.html

    Peut être aussi activer TLSv1 et v1.1 pour des raisons de compatibilité, mais bon les navigateurs récents supportent tous TLSv1.2, à voir.

    Pour HSTS, vaut mieux partir sur la directive que tu as modifié :
    add_header Strict-Transport-Security "max-age=31536000";
    includeSubdomains pose soucis vu que plusieurs sous-domaines n'ont pas encore de certificats valides et la directive preload est inutile vu que mondedie.fr n'est pas présent dans les listes HSTS préchargées des navigateurs.

    Mais sinon c'est good !
    Bonjour à tous,
    J'ai pris chez OVH un VPS, installé Prestashop par OVH.
    Tout marche bien visiblement. Or je n'arrive pas a lancer Let's encrypt
    Je me connecte en root et j'essaie de recuperer let's encrypt mais rien ne se passe.
    Quelqu'un aurait il une idée ?
    Mon niveau de compétence est franchement pas terrible, oui je sais ...
    mirtouf wrote:Et bim !
    Prefix handling Not valid for "www.mondedie.fr" CONFUSING

    Je confirme une belle erreur sur https://www.mondedie.fr
    une redirection 301 ?
    c'est réglé.
    malartic wrote:Bonjour à tous,
    J'ai pris chez OVH un VPS, installé Prestashop par OVH.
    Tout marche bien visiblement. Or je n'arrive pas a lancer Let's encrypt
    Je me connecte en root et j'essaie de recuperer let's encrypt mais rien ne se passe.
    Quelqu'un aurait il une idée ?
    Mon niveau de compétence est franchement pas terrible, oui je sais ...
    Copie/colle ton message d'erreur ici
    Pour le faire en une commande (pratique pour des scripts d'auto génération, pour mettre à jour le cert) :
    ./letsencrypt-auto certonly --agree-tos -m contact@domain.tld -d mail.domain.tld -d domain.tld -d www.domain.tld