Qu'est-ce qu'un certificat SSL (HTTPS) ?
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 []:
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.
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
je vraiment besoin de le faire dans mon project