Créer un certificat SSL autosigné pour le développement en local

Créer un certificat SSL autosigné pour le développement en local

Le SLL se démocratise de plus en plus, poussée avec l'arrivée de certificats gratuits proposé Let's Encrypt et les nouvelles mesures de google et firefox pour l'encourager.

Du coup il est intéressant d'en utiliser en local, afin d'être au plus proche de la configuration de production.

Pour le local on peut utiliser un certificat dit auto-signé, ou self-signed, c'est à dire sans certification d'une autorité compétente (let's encrypt ou gandi par exemple).

Un certificat auto-signé déclenche une alerte dans la plupart des navigateurs, ce qui est évidement pas recommandé pour de la production, mais cela suffira très bien en local.

2015-11-20-092039-screenshot.png

Dans "Advanced" il faudra ajouter une exception.

Génération du certificat

Pour commencer, personnellement je crée un dossier certs à côté du dossier contenant les sources, les dumps de db... de mon projet :

2016-02-03-092410-screenshot.png

Dans ce dossier et je commence par créer un fichier texte qui contiendra la phrase de passe (une sorte de mot de passe pour le certificat) qui me sera demandé lors de la génération. Attention : je fais ça car je suis en local, dans un environnement de production, ces éléments doivent être gardés très précieusement et à l'abri des curieux.

Ensuite ouvrez un terminal et lancez la commande suivante qui va générer la clé qui permettra de signer le certificat :

openssl genrsa -des3 -out server.key 1024

Génération du fichier csr (Cerficat Signing Request)

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

Vous devrez renseigner votre passphrase ainsi que différents éléments (pays, nom...) vous pouvez laisser l'ensemble vide.

Maintenant nous allons supprimer la passphrase de la clé afin qu'apache ne nous la demande pas à chaque fois qu'il démarre :

//Création d'un backup
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

La passphrase vous sera demandée une dernière fois.

Enfin, génération du certificat :

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

Et c'est terminé ! Voila ce que devrait maintenant contenir votre dossier certs :

2016-02-03-100056-screenshot.png

Configuration avec Apache 2

Maintenant il faut modifier votre virtual host, (ici avec apache2) :

Je laisse volontairement l'accès sans https activé. Les chemins sont à adapter en fonction de votre configuration.

<VirtualHost *:80>
	ServerName monsite.dev
	ErrorLog /media/vhosts/monsite.com/logs/error.log
	CustomLog /media/vhosts/monsite.com/logs/access.log common
	#PHPINIDir /media/vhosts/monsite.com/conf
	DocumentRoot "/media/vhosts/monsite.com/www/"
	<directory /media/vhosts/monsite.com/www/>
		Options -Indexes +FollowSymLinks +MultiViews
		AllowOverride All
		Require all granted
	</Directory>
</VirtualHost>


<virtualhost *:443>
  ServerName monsite.dev
  ServerAlias *.monsite.dev
  DocumentRoot "/media/vhosts/monsite.com/www/"
  ErrorLog /media/vhosts/monsite.com/logs/error.log
  CustomLog /media/vhosts/monsite.com/logs/access.log common
  # Activation du mode SSL
  SSLEngine On
  SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire

  SSLCertificateFile "/media/vhosts/monsite.com/certs/server.crt"
  SSLCertificateKeyFile "/media/vhosts/monsite.com/certs/server.key"

  <directory /media/vhosts/monsite.com/www/>
    Options -Indexes +FollowSymLinks +MultiViews
    AllowOverride All
    Require all granted
  </Directory>
</virtualhost>

Les lignes importantes sont les suivantes :

  SSLEngine On
  SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire

  SSLCertificateFile "/media/vhosts/monsite.com/certs/server.crt"
  SSLCertificateKeyFile "/media/vhosts/monsite.com/certs/server.key"

Pensez à activer le module SLL d'apache 2 :

sudo a2enmod ssl

et enfin relancez apache2 :

sudo service apache2 restart

Contenus en rapport

Comment générer son certificat SSL avec Let's Encrypt

Let's encrypt (https://letsencrypt.org/) est un service, actuellement en beta fournissant la validation de certificats SSL (pour donc du HTTPS par exemple).

Ce service est possible via d'autres autorités de certifications, comme Gandi par exemple, mais se différentie ici par sa gratuité.

Commentaires

Tu aurais le logiciel sur ton PC ?
Le site n'existe plus et donc le lien de téléchargement non plus...

T'as pas l'impression d'avoir zappé la génération du CSR ???

J'ai rien dit ! :-/

Avec Open SSL 1.1, cela ne fonctionne plus, Apache refuse de démarrer avec cette erreur :

SSL Library Error: error:140AB18F:SSL routines:SSL_CTX_use_certificate:ee key too small

Pour que ça fonctionne de nouveau, il faut générer une clé plus grande lors de la première commande. Par exemple :

openssl genrsa -des3 -out server.key 4096

Ajouter un commentaire

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...