Sécurisation SSL d’un serveur HTTP

Re bonjour à tous,

Comme promis dans l’article précédent, nous allons parler ici de la mise en place d’une connexion SSL pour un serveur web.
Avant de commencer, une connexion SSL permet, en résumé, de sécuriser la connexion entre votre navigateur et le serveur qui héberge un site Internet (le fameux « httpS« ). C’est un énorme facteur rassurant, surtout lorsqu’il s’agit de transférer des informations/fichiers personnels sur le serveur en question.

Cela dit, même si sécuriser un site web n’est pas extrêmement compliqué, il y a un bémol : si on veut une sécurisation « officielle » et reconnue, il faut mettre la main au portefeuille ! 🙁
En effet, le SSL se base sur des certificats de sécurité (cryptage à clé publique/privée), et si la création d’un tel certificat est l’affaire de quelques lignes de commandes, sa validation auprès d’un organisme officiel, en revanche, est très souvent payante (et pas forcément donnée … de l’ordre de $100 pour une validation basique)

Nous verrons donc ici comment créer ce certificat, mais il faudra se rendre à l’évidence : le site affichera une erreur de certificat la première fois qu’on s’y connectera… Rien de méchant lorsqu’on sait pourquoi, mais ça peut tout de même rebuter des internautes novices.

La création d’un certificat se fait en utilisant l’outil openssl (qu’il faudra donc installer si vous ne le possédez pas 😉
Premièrement, on génère une clé de cryptage RSA de 2048 bits avec la commande :

openssl genrsa -out certificat.key 2048

Ensuite, on génère un CSR (Certification Signing Request) à partir de la clé précédemment générée

openssl req -new -key certificat.key -out certificat.csr

Et pour terminer, nous allons signer ce CSR avec la clé, et ainsi créer le certificat final (qui aura une durée de vie de 365 jours)

openssl x509 -req -days 365 -in certificat.csr -signkey certificat.key -out certificat.crt

Voila, les fichiers nécessaires sont créés, il nous reste plus qu’à les déplacer dans les bons répertoires

mv ./certificat.csr /etc/ssl/private
mv ./certificat.key /etc/ssl/private
mv ./certificat.crt /etc/ssl/certs

évidemment, mettez les bons répertoires

Pour faciliter la création de certificats, j’ai créé ce petit script shell :

vi create_ssl

#!/bin/sh

SSL_PATH=/etc/ssl
SSL_CERT_PATH=$SSL_PATH/certs/
SSL_KEY_PATH=$SSL_PATH/private/
SSL_CSR_PATH=$SSL_KEY_PATH

if  [ $1 ]
then
CERT_NAME=$1
else
echo ‘Parametre manquant : nom du certificat’
exit
fi

openssl genrsa -out $CERT_NAME.key 2048

# La seconde étape consiste à générer le CSR ( Certification Signing Request ) à partir de notre clé 2048 bits, dans cette partie nous allons rempl$
openssl req -new -key $CERT_NAME.key -out $CERT_NAME.csr

# Puis auto-signons notre certificat :
openssl x509 -req -days 365 -in $CERT_NAME.csr -signkey $CERT_NAME.key -out $CERT_NAME.crt

# Puis déplaçons nos fichiers dans les bons dossiers :
mv $CERT_NAME.crt $SSL_CERT_PATH
mv $CERT_NAME.key $SSL_KEY_PATH
mv $CERT_NAME.csr $SSL_CSR_PATH

 

Là encore, adaptez-le selon votre configuration. Son utilisation est simple : ./create_ssl.sh nom_du_certificat

Une fois les certificats créés et placés dans les bons dossiers, il faut prévenir Apache (dans mon cas) afin qu’il sache où les trouver.

Copiez le fichier /etc/apache2/sites-available/le_site vers le_site_https, puis rajoutez/modifiez les informations suivantes :

<VirtualHost *:443>

SSLEngine On
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCertificateFile /etc/ssl/certs/certificat.crt
SSLCertificateKeyFile /etc/ssl/private/certificat.key
(…)

encore une fois, adaptez !
une fois ce virtualhost créé, il faut l’activer puis demander à Apache de recharger sa config

a2ensite le_site_https
/etc/init.d/apache2 reload

S’il n’y a pas de messages d’erreur, vous pourrez désormais accéder à votre site sur l’adresse https://votresupersite.ext
Souvenez-vous quand même qu’un message d’erreur s’affichera à ce moment là, le certificat n’étant pas validé par un organisme de certification agréé

 

 

 

Publié dans divers