Skip to content

Instantly share code, notes, and snippets.

@magikcypress
Last active February 17, 2016 19:11
Show Gist options
  • Save magikcypress/f0b9ff570921e887f8e5 to your computer and use it in GitHub Desktop.
Save magikcypress/f0b9ff570921e887f8e5 to your computer and use it in GitHub Desktop.
Créer un certificat SSL Let's encrypt

Créer un certificat SSL Let's encrypt

Ce petit article va nous permet de comprendre comment créer un certificat SSL pour apache en utilisant les certificats de let's encrypt. Attention à l'heure ou j'écris cet article, il n'est pas recommandé d'utiliser les certificats sur un serveur de production. Si vous avez des certificats auto-signé, vous pouvez toujours les remplacer par ceux de LE.

Nous allons commencer par télécharger un petit outil qui va nous permettre de créer notre certificat, cette outil est plus simple que le client proposé par Let's Encrypt. Personnellement, je le trouve un peu lourd avec ses plugins. ACME est un petit outil de 200 lignes, facile a auditer si besoin

 $ cd /usr/local/src/
 $ git clone https://github.com/diafygi/acme-tiny.git

Voilà ACME est sur notre serveur, nous allons créer un répertoire letencrypt sur notre serveur pour stocker nos clef, certificats, chaine, etc ...

 $ mkdir /etc/letencrypt
 $ cd /etc/letencrypt/

Nous allons créer deux clés privées. L'une des clef privée va nous permettre de nous identifier et l'autre pour identifier le serveur.

 $ openssl genrsa 4096 > clef_privee_perso.key
 $ openssl genrsa 4096 > clef_privee_machine.key

Nous allons créer un Certificate Signing Request (CSR) pour faire notre demande de certificat chez Let's Encrypt. Ce formulaire nous permettra de faire notre demande de renouvellement par la suite.

 $ openssl req -new -sha256 -key clef_privee_machine.key -subj "/CN=jedegage.info" > formulaire_de_demande.csr

Nous allons chercher le certificat intermédiaire de Let's Encrypt, ce certificat permet d'éviter des avertissements. Celà marche sans, mais autant l'avoir sur son serveur

 $ wget https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem

Lors de la création du certificat, Let's Encrypt va devoir dialoguer avec le serveur pour fourni un token (jeton), nous allons créer un répertoire pour permettre à Let's Encrypt de nous identifier.

 $ mkdir -p /home/www/jedegage.info/web/.well-known/acme-challenge/

C'est ici que nous allons faire notre demande de certificat, comme vu plus haut nous allons utiliser le petit script acme_tiny pour faire notre demande. Pour celà nous avons besoin de notre clef privée perso généré au début et notre formulaire de demande (le certificat a fournir à Let's Encrypt).

 $ python /usr/local/src/acme-tiny/acme_tiny.py --account-key clef_privee_perso.key --csr ./formulaire_de_demande.csr --acme-dir /home/www/jedegage.info/web/.well-known/acme-challenge/ > ./certificat-domaines.pem

Il nous reste à modifier le virtual host d'apache pour configurer le domaine avec SSL.

 $ vi /etc/apache2/sites-enabled/jedegage.info

    SSLEngine on
    SSLProtocol             all -SSLv2 -SSLv3
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-DSS-AES128-SHA256:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA256:!DHE-RSA-CAMELLIA128-SHA:!DHE-RSA-CAMELLIA256-SHA
    SSLHonorCipherOrder     on
    SSLCompression          off
    
    SSLOptions +StrictRequire
    
    SSLCertificateFile /etc/letencrypt/certificat-domaines.pem
    SSLCertificateChainFile /etc/letencrypt/lets-encrypt-x1-cross-signed.pem
    SSLCertificateKeyFile /etc/letencrypt/clef_privee_machine.key
    
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown

Si vous avez besoin de configurer nginx sur votre serveur, je vous invite à vous reporter au README de acme-tiny pour celà.

A prendre en compte :

  • Rate limit on registrations per IP is currently 10 per 3 hours
  • Rate limit on certificates per Domain is currently 5 per 7 days

##Renouveler les certificats

 $ cat /etc/crontab
 # Renew certificat (runs once per month)
 0 0 	1 * * 	root 	/etc/letencrypt/renew_cert.sh 2>> /var/log/renewcert_letencrypt.log

 $ cat /etc/letencrypt/renew_cert.sh
 
 python /opt/certs/acme-tiny/acme_tiny.py --account-key /etc/letencrypt/clef_privee_perso.key --csr  
 /etc/letencrypt/formulaire_de_demande.csr --acme-dir /home/www/jedegage.info/web/.well-known/acme-challenge/
  > /etc/letencrypt/jedegage.info.pem

 wget -O /etc/letencrypt/lets-encrypt-x1-cross-signed.pem https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment