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.
Génération du certificat
Créer un dossier certs dans /etc/nginx/ puis entrer dans le dossier certs
Créer un fichier texte qui contiendra la phrase de passe (pour copie-coller) qui sera demandé lors de la génération.
Attention : 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
C'est terminé ! Voila ce que devrait maintenant contenir votre dossier certs :
passphrase.txt (Mon mot de passe)
server.crt (le certificat géneré)
server.csr ( la demande de signature de certificat)
server.key ( a clé qui permettra de signer le certificat)
server.key.org (Sauvegarde )
Configuration avec CentOS et Tomee:
vim /etc/nginx/conf.d/tomee.conf
ssl on;
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
Vérifier avec la commande : nginx -t
Relancer tomee et nginx
systemctl stop tomme.service
systemctl stop nginx.service
systemctl start tomme.service
systemctl start nginx.service
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
Génération du certificat autosigné:
cd /etc/nginx
mkdir /etc/nginx/certs
cd certs/
vim /etc/nginx/certs/pass
Ouvrir un e autre console ssh:
cd /etc/nginx/certs/
openssl genrsa -des3 -out server.key 2048 (copie-collé de la paraphrase)
openssl req -new -key server.key -out server.csr (copie-collé de la paraphrase insi que différents éléments (pays, nom...)
!! Très important :
Common Name (eg, your name or your server's hostname) []: Nom de la machine (nom dns complet) exemple : agabfs.bibliomondo.fr
vous pouvez laisser le reste vide.)
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key (copie-collé de la paraphrase)
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
cp server.crt server.key /etc/nginx/ssl/
vim /etc/nginx/conf.d/tomee.conf
#ssl on; (:commantai ssl on cars dèja défini plus haut dans le fichier tomee.conf)
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
nginx -t (pour vérifer)
Vérification de la validité d’un certificat SSL
openssl x509 -in certificat.rsa.crt -text | grep Not
Pour voir le domaine concerné par le certificat
openssl x509 -in certificat.crt -text | grep DNS
Vérifier le hash
openssl x509 -noout -modulus -in certificat.crt |
openssl md5 && openssl rsa -noout -modulus -in certificat.key | openssl md5
Vérifier un certificat :
openssl x509 -in certificat.crt -text -noout
Vérifier une clé privée
Tester si tout fonctionne
openssl s_client -connect www.exemple.com:443
NANTES:
Le certificat est en place, pour ton info j'ai fait un lien symbolique de leur certificat dans le dossier nginx/ssl:
ln -s /etc/local/tls/certs/mondo-pp.nantesmetropole.fr+chaine.pem /etc/nginx/ssl/mondo-pp.nantesmetropole.fr.pem
ln -s /etc/local/tls/private/mondo-pp.nantesmetropole.fr.key.pem /etc/nginx/ssl/mondo-pp.nantesmetropole.fr.key
Ensuite j'ai modifier les 2 lignes suivantes pour que nginx utilise les nouveaux certificats:
ssl_certificate /etc/nginx/ssl/mondo-pp.nantesmetropole.fr.pem;
ssl_certificate_key /etc/nginx/ssl/mondo-pp.nantesmetropole.fr.key;
A