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

Posté le Mercredi 3 février 2016 - 09:45
Dernière mise à jour le Lundi 25 septembre 2017 - 15:51
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
 

Comments

X

Posté le Mercredi 6 juin 2018 - 16:46

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

Posté le Vendredi 21 septembre 2018 - 19:47

Merci pour le partage, j'ai ajouté ce lien dans la bibliographie de cette page wiki.
J'avance entre Let's Encrypt pour la production et un certificat auto-signé en local.
J'aimerais tout de même avoir mieux qu'un certificat auto-signé en local, si je décide de partager mon site via Tor. Comment faire à ce moment la ?

https://www.visionduweb.eu/wiki/index.php?title=Certificats_SSL_TLS_Let…

Mro

Posté le Mardi 1 janvier 2019 - 21:10

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é

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...