Chocoblog

Chocoblog

Billets sur l'informatique, les logiciels libres et retours d'utilisation sont au programme avec la possibilité de publier des billets de copains.

Certificat SSL/TLS gratuit pour faire du HTTPS avec StartSSL

J'ai dû renouveller pas mal de certificats pour faire du HTTPS sur différents sites.

En attendant que Let's Encrypt arrive je suis encore allé chez StartSSL. Je vais donc faire un topo de comment créer son certificat gratuitement pour ensuite l'utiliser sur un serveur comme NGinx.

Inscription

L'authentification est différente de ce qu'on a l'habitude de voir car elle se fait à l'aide d'un certificat rattaché à une adresse email. Vous l'importez ensuite dans votre navigateur et vous vous en servez pour vous connecter. N'oubliez pas d'en faire une sauvegarde sécurisée. Le certificat est valable une année donc si vous ne voulez pas perdre votre compte vous devrez chaque année recréer un nouveau certificat pour votre adresse email.

Valider un domaine

Pour créer un certificat rattaché à un domaine, vou devez le faire valider. Pour cela vous devez aller dans l'onglet Validations Wizard et choisir Domain Name Validation :

https://lutim.cpy.re/PC9RAJdZ

Ensuite rentrez votre nom de domaine :

https://lutim.cpy.re/WLnaaV4h

Vous recevrez ensuite un email à l'adresse du domaine (postmaster@votredomaine.com par exemple) pour vérifier que vous en êtes bien le propriétaire.

Créer le certificat de votre domaine

Allez ensuite sur l'onglet Certificates Wizard et choisissez Web Server :

https://lutim.cpy.re/0JH6C3hN

À noter que si vous voulez renouveller votre compte (et donc le certificat rattaché à votre adresse email) il vous faudra choisir S/MIME and Authentification Certificate.

Il vous faut ensuite générer une clé privée. Je préfère le faire directement de mon ordinateur, donc je Skip cette partie.

J'utilise le script Shell suivant afin d'automatiser le processus :

#!/usr/bin/bash

if [[ -z "$1" ]]; then
    echo "Need the domain name as argument."
    exit
fi

domain=$1

mkdir startssl || exit
cd startssl

sudo openssl genrsa -out $domain.key 2048
sudo chmod 400 $domain.key

sudo openssl req -new -key $domain.key -out $domain.csr

echo "Please, paste the following content into StartSSL :"
cat $domain.csr

echo "Then, paste the StartSSL certificate here (Ctrl+D to validate) :"
cat > $domain.crt

wget https://www.startssl.com/certs/sub.class1.server.ca.pem
wget https://www.startssl.com/certs/ca.pem

cat $domain.crt sub.class1.server.ca.pem ca.pem > $domain.pem

echo "Done :) The certificate : $domain.pem

Ce script permet de générer une clé RSA de 2048 bits et d'en afficher la partie publique :

https://lutim.cpy.re/Ro1tM1p4

Il suffit ensuite de le copier/coller sur le site de StartSSL :

https://lutim.cpy.re/uCgmpIfb

https://lutim.cpy.re/YYxAxB96

Il vous affichera alors le certificat pour votre domaine. Il vous suffit de le copier dans le script shell, d'ajouter un retour à la ligne et de faire un Ctrl+D. Il s'occupe ensuite du reste afin de créer le fichier unifié .pem qui contiendra les différents certificats (root et celui de class 1) de StartSLL ainsi que celui de votre domaine.

Paramétrage de NGinx

Vous avez deux fichiers qui vous intéressent particulièrement : domaine.pem et domaine.key. Vous devez ensuite uploader ces fichiers sur votre serveur. Attention, domaine.pem est public mais domaine.key est votre clé privée. Si celle-ci est compromise, c'est la fin des haricots.

Vous les utilisez ensuite entre autres en ajoutant ssl au listen et en précisant le chemin de votre certificat public et de votre clé privée :

server {    
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/domaine.pem;
    ssl_certificate_key /etc/nginx/ssl/domaine.key;

    server_name domaine.com;

    root /var/www/domaine;
}