Memo – Création de certificat HTTPS

/assets/images/articles/memo-https.jpg

Publié le 25/04/2015, dans informatique, web, security, https, ssl, tls, apache, certificate, authority

Article mis à jour le 16/10/2015.

Afin de sécuriser son site web et de chiffrer les informations qui transitent entre ce dernier et le navigateur web, il est intéressant de sécuriser son site avec SSL/TLS.

Ceci est donc un petit memo pour moi-même ou pour toute personne qui souhaite sécuriser son site web (ici avec Apache).

Il faut normalement faire signer ses certificats de sécurité par une Autorité de Certification (CA), mais cette étape est la plupart du temps payante nous allons donc signer nous-même le certificat. Le fait d'être notre propre Autorité de Certification entraînera juste un message lors de la première connexion au site, chose qui est normal, car notre certificat n'est pas reconnu par un de ces grands organismes.

I – Les certificats

1 – Créer le certificat d'autorité

Je vous conseille de créer un dossier « cert » pour vos certificats dans le dossier d'Apache : mkdir /etc/apache2/cert && cd /etc/apache2/cert

On crée une clé de 4096 bits pour notre certificat (ou supérieur tant qu'il s'agit d'un multiple de 1024) :

openssl genrsa -aes256 4096 > ca.key

On génère le certificat chiffré en SHA2 valide pour une durée de 1 an :

openssl req -new -x509 -sha512 -days 365 -key ca.key -out ca.crt

2 – Créer le certificat du site

On crée une clé de 4096 bits pour le site :

openssl genrsa 4096 > monsite.key

On génère le certificat :

openssl req -new -key monsite.key > monsite.csr

3 – Signer le certificat du site avec notre Autorité de Certification

openssl x509 -req -in monsite.csr -out monsite.crt -CA ca.crt -CAkey ca.key -CAcreateserial -CAserial ca.srl

II – Configurer notre site en HTTPS

Il faut à présent configurer Apache pour que ce dernier utilise notre certificat.

1 – Activer le module SSL d'Apache

$ a2enmod ssl

(Vérifiez que Listen 443 se trouve bien dans le fichier ports.conf d'Apache)

2 – Configuration du site

Là il y a plusieurs manières de procéder, personnellement je tente d'éviter la casse en gardant une version HTTP classique du site.

On se rend dans le fichier /etc/apache2/sites-enabled/000-default, on change le port 80 en 443 et on ajoute les lignes en rouge pour activer SSL/TLS et spécifier le certificat à utiliser.

ServerAdmin webmaster@localhost
DocumentRoot /var/www
SSLEngine On
SSLCertificateFile /etc/apache2/cert/monsite.crt
SSLCertificateKeyFile /etc/apache2/cert/monsite.key
SSLCipherSuite EECDH+AES:+AES128:+AES256:+SHA256:+SHA512
SSLHonorCipherOrder on
SSLProtocol TLSv1.2
SSLCompression off
...

Comprendre ces lignes:

SSLCipherSuite indique les types de chiffrements autorisés.
SSLHonorCipherOrder indique si l'ordre des algos de chiffrement doit être respecté.
SSLProtocol indique les protocoles à utiliser (+ et - permettent d'ajouter ou retirer un protocol de la liste par défaut).
SSLCompression indique si la compression des données est activée.

Important: En fonction des protocoles et algo de chiffrement utilisés certains logiciels risquent de ne pas pouvoir accéder correctement à votre site, choisissez donc correctement ces paramètres.

3 – On relance Apache

$ service apache2 restart

Et voilà c'est fini !

Normalement on peut accéder au site en HTTPS.

III – Petite astuce : Rediriger automatiquement les connexions http vers hhtps

S'il faut absolument disposer d'une connexion sécurisée pour accéder à votre site, il suffit de modifier la configuration d'Apache comme précédemment en rajoutant ceci dans le virtualhost :

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]

C'est tout !

IV – Pour aller plus loin

Si vous souhaitez approfondir le sujet (qui est très intéressant) je vous conseille cet article de Aeris qui est très instructif.

Credit image : CISO Vietnam


Vous pouvez commenter en envoyant un mail via ce bouton (votre adresse ne sera pas publié).

Commenter par mail