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

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
    
    Merci Magicalex,
    Le message d'erreur est le suivant :
    bash : git : commande introuvable
    malartic wrote:Merci Magicalex,
    Le message d'erreur est le suivant :
    bash : git : commande introuvable
    apt-get install git
    xataz wrote:
    malartic wrote:Merci Magicalex,
    Le message d'erreur est le suivant :
    bash : git : commande introuvable
    apt-get install git

    A présent :
    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances
    Lecture des informations d'état... Fait
    E: Impossible de trouver le paquet git

    avec apt-get install git-core c'est pareil

    Alors je vous l'avez pas dit que j'étais pas doué ?
    Si mes posts floodent votre forums, je le comprends pas de soucis, surtout vu leur niveau.
    Alors je m'arreterai là
    Tente de faire :
    apt-get update && apt-get upgrade && apt-get install git-core
    xataz wrote:Tente de faire :
    apt-get update && apt-get upgrade && apt-get install git-core
    ça à l'air de fonctionner, je poursuis
    J'ai réussi à avancer, grace à vous,
    Tout se passe bien jusqu'à la fin et j'obtiens ceci :

    Failed authorization procedure. domain.example.tld (tls-sni-01)
    the server couldn't connect to the client for the DV Server failure at resolver
    malartic wrote:J'ai réussi à avancer, grace à vous,
    Tout se passe bien jusqu'à la fin et j'obtiens ceci :

    Failed authorization procedure. domain.example.tld (tls-sni-01)
    the server couldn't connect to the client for the DV Server failure at resolver

    Peux tu préciser la commande que tu exécutes ?
    Peux tu préciser la commande que tu exécutes ?

    oui bien sur, j'ai procédé ainsi :
    cd /tmp
    git clone https://github.com/letsencrypt/letsencrypt
    cd letsencrypt
    ./letsencrypt-auto --agree-dev-preview --server https://acme-v01.api.letsencrypt.org/directory auth

    ensuite je rentre mon email, mon domaine
    puis j'obtiens le message suivant :

    Failed authorization procedure. domain.example.tld (tls-sni-01)
    the server couldn't connect to the client for the DV Server failure at resolver
    Merci
    Le fonctionnement à un peu changé en passant à la beta public:

    Arrête nginx (ou autre serveur web) :
    service nginx stop
    Puis lance letsencrypt :
    ./letsencrypt-auto certonly
    Les certificats ce trouvent ensuite dans /etc/letsencrypt/live


    Relance ensuite nginx :
    service nginx start
    Merci Xataz,
    Visiblement ça a fonctionné avec ton aide précieuse.

    the certificate was successfully created and placed in /etc/nginx/live/example.com/

    A présent je trouve sur le net des infos différentes je ne voudrais pas essayer n'importe quoi et tout planter.
    J'ai eu pour l'instant des reponses comme : permission non accordé ou commande introuvable