Qu'est-ce qu'un certificat SSL (HTTPS) ?

Août 2013

Un certificat SSL est un petit fichier utilisé dans le protocole HTTPS qui sert à accéder à un site internet de manière sécurisé car les données échangées entre le client et le serveur sont cryptées avec un algorithme de chiffrement asymétrique à clé publique / clé privée.

Du coup si un pirate récupère les informations échangées entre le client et le serveur (par exemple entre un acheteur et un site de vente en ligne au moment du paiement), il ne pourra rien en faire car il ne sera pas en mesure de déchiffrer les données.

La clé de voute de ce système c'est justement ce fameux certificat SSL qui est utilisé pour générer les clés de chiffrement (clé publique) et de déchiffrement (clé privée, qui ne transite par sur le réseau).

HTTPS ne peut pas fonctionner sans certificat SSL, les deux sont complètement liés, SSL fait partie du protocole https.

Comment obtenir un certificat SSL ?

Un certificat SSL s'achète auprès d'un organisme de certification comme l'entreprise américaine VeriSign ou certains hébergeurs. Tous les certificats ne se valent pas, ils sont plus ou moins bien reconnus selon la qualité du certificat. Ce point est important car un certificat de mauvaise qualité non reconnu affichera un message d'alerte à l'utilisateur, ce qui est très gênant, car ça peut faire fuir les clients d'un site de e-commerce ! C'est pour cette raison qu'un certificat SSL est généralement vendu avec une garantie (qui peut atteindre plus d'un million de dollar par an).

HTTPS en local avec un certificat SSL auto signé

Venons-en au point le plus intéressant de ce billet : comment tester HTTPS en local, ou encore comment utiliser HTTPS sans devoir acheter un certificat SSL ? Et bien pour cela, il suffit de générer le certificat soi-même, c'est ce qu'on appelle un certificat auto-signé (self signed certificate).

Et la bonne nouvelle c'est que Apache (et EasyPHP, WAMP...) est fourni avec le programme OpenSSL qui permet de générer un certificat SSL. Voici par exemple où le programme se trouve sur EasyPHP :

C:\EasyPHP\apache\bin\openssl.exe
C:\EasyPHP\php\extras\openssl\openssl.exe

Créer un certificat SSL avec OpenSSL

Nous allons maintenant créer un certificat SSL avec OpenSSL. Dans cet exemple, je vais travailler dans le dossier C:\test openssl, et je vais utiliser OpenSSL fourni avec EasyPHP.

Créez le dossier C:\test openssl puis lancez une invite de commande, et déplacez-vous dans le dossier C:\test openssl :

cd "C:\test openssl"

Maintenant on va créer une clé SSL (un fichier .pem et .csr) avec cette ligne de commande (pensez à modifier le chemin du fichier openssl.cnf, il n'est pas forcément dans le même dossier que sur mon exemple) :

openssl req -config "C:\EasyPHP\apache\conf\openssl.cnf" -new -out site.csr

Cette ligne de commande lance un assistant qui va poser quelques questions comme le pays, le nom de l'entreprise (organisation)... il suffit de ne rien répondre en appuyant sur Entrée :

Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
....++++++
.....++++++
writing new private key to 'privkey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:challenge
An optional company name []:

Création OpenSSL

Deuxième étape : nous allons générer un fichier .key pour éviter d'être obligé de connaître le mot de passe (passphrase) :

openssl rsa -in privkey.pem -out site.key

Enter pass phrase for privkey.pem:
writing RSA key

Voici un billet similaire qui vous permettera d'en savoir plus sur additionner des cellules avec une formule excel.

3éme étape : il faut maintenant autosigner le certificat avec cette ligne de commande :

openssl x509 -in site.csr -out site.cert -req -signkey site.key -days 365

Loading 'screen' into random state - done
Signature ok
subject=/C=FR/ST=Some-State/L=Paris/O=Internet Widgits Pty Ltd
Getting Private key

Et voici la 4éme et dernière commande qui sert à produire un certificat au format CRT (site.der.crt)

openssl x509 -in site.cert -out site.der.crt -outform "DER 9"

Configurer HTTPS dans Apache

Maintenant que nous avons notre certificat SSL, il reste à l'utiliser dans la configuration Apache pour activer le HTTPS. Pour cela, il faut modifier le fichier de configuration d'apache, l'éternel fichier httpd.conf :

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl

SSLMutex default
SSLRandomSeed startup builtin
SSLSessionCache none

<VirtualHost 127.0.0.1:443>
	SSLEngine On
	SSLCertificateFile conf/ssl/site.cert
	SSLCertificateKeyFile conf/ssl/site.key
</VirtualHost>

Ce code permet d'abord d'indiquer à apache le certificat SSL à utiliser pour gérer la clé publique et la clé privée. Ensuite on active l'utilisation de ce certificat pour le port 443 qui est le port par défaut pour le protocole HTTPS.

Donc maintenant vous pouvez accéder à votre site en local via cette URL : https://localhost/ (ou https://localhost:443/).

Allez donc jeter un oeil sur cette page : webdesign frais/pastel.

2 commentaires :
commentaire n°2670 par mtval
mtval mardi 29 octobre 2013, 03:49
Merci pour ce cours enrichissant;

Je l'ai appliqué mais la 4ème étape n'a pas fonctionné d'un coup parce qu'il fallait définir la variable d'environnement; en effet, il cherchait le fichier c:\openssl.1.0.0\ssl\openssl.cnf
jusqu'à présent mon easyphp ne démarre pas après modification du fichier httpd.conf
il signale des erreurs de syntaxe et ne reconnait pas toutes les commande commençant par SSL.
Aidez moi
commentaire n°3106 par Didas Lilandos
Didas Lilandos mardi 7 juillet 2015, 13:58
bonjours, mais je essayer de mettre en place apre -config "C:wamp\l'adresse mene vers mon fichier .cnf" et tout, et apre enter la commande me renvoi un message du commande inexistante,
je vraiment besoin de le faire dans mon project
facultatif
Facebook Twitter RSS Email
Forum Excel
Venez découvrir le nouveau forum excel question/réponse à la stackoverflow.com !
Forum Excel
hit parade n'en a rien a foutre du W3C Positionnement et Statistiques Gratuites Vincent Paré