Configurer un site intranet/internet en HTTPS avec Apache2 (signé par une autorité de certification interne d'entreprise)

Introduction

L'objectif est de configurer un site intranet (avec vhost) sur apache, en utilisant TLS.

TLS exige qu'un certificat soit délivré par une autorité de certification.
Puisqu'il s'agît d'un site intranet, accessible uniquement sur le réseau de l'entreprise, plutôt que de nous adresser à une autorité de certification sur internet, nous allons utiliser l'autorité de certification interne de l'entreprise (dans notre cas, un serveur Windows). Cela permet d'obtenir un certificat reconnu par les postes clients sans passer par une autorité publique sur internet !


Etape 1 : s'identifier en root, installer apache et openssl, activer TLS

apt update && apt upgrade -y
apt install apache2 -y
systemctl start apache2 && systemctl enable apache2
a2enmod ssl

Etape 2 : Clé privée et demande de signature

mkdir /etc/apache2/TLS
cd /etc/apache2/TLS

1) Créer la clé privée pour apache :

openssl genrsa -aes256 4096 > cleprivapache.key

2) Créer un certificat normal, qui servira de fichier de demande de signature à notre autorité :

openssl req -new -key cleprivapache.key > demandesignature.csr

(Nous allons à présent envoyer notre demandesignature.csr au serveur windows (ou à une authorité sur internet) afin d'obtenir un certificat signé !
Ici, je montre l'exemple d'un serveur windows qui va se charger de certifier.)

(Par exemple, depuis notre serveur Windows, nous allons récupérer la demandesignature.csr sur le serveur web :
dans un invité de commandes :)

scp root@IP-SERVEUR-WEB:/etc/apache2/TLS/demandesignature.csr C:\chemin\ou\télécharger\votre\csr

(Ensuite, sur le serveur windows,
Ouvrir PowerShell :
positionnez-vous dans l'emplacement de demandesignature.csr (il était dans E:\ chez nous))

cd E:\
certreq -attrib 'CertificateTemplate:WebServer'

(Une fenêtre s'ouvre, choisir demandesignature.csr (il est nécessaire de choisir 'Tous les fichiers' en bas à droite pour voir le fichier s'afficher).
Puis, choisir un emplacement pour enregistrer le certificat (le nommer certifapache.crt).
Ensuite, renvoyez votre certifapache.crt sur votre serveur web :)

scp E:\certifapache.crt root@IP-SERVEUR:/etc/apache2/TLS

(Nous aurons besoin des 2 fichiers suivants pour notre vhost :
- certifapache.crt (le certificat signé par notre autorité Windows)
- cleprivapache.key (clé privée pour apache))

Dernière étape très importante, modifier les permissions de vos clés et certificats :
(à n'effectuer qu'après avoir tout généré !)

chmod -R 600 /etc/apache2/TLS

Etape 4 : créer (ou copier s'il est donné) le dossier du site (jesuissuper)

mkdir /var/www/www.jesuissuper.com
echo "Mon super premier site !" > /var/www/www.jesuissuper.com/index.html

Etape 5 : le vhost

cd /etc/apache2/sites-available/
cp default-ssl.conf default-ssl.conf.BAK
mv default-ssl.conf www.jesuissuper.com.conf
vi www.jesuissuper.com.conf

# On édite le fichier, avec au moins les informations (dé-commentées) suivantes :

<VirtualHost _default_:443>
ServerName www.jesuissuper.com
DocumentRoot /var/www/www.jesuissuper.com
SSLEngine on
SSLCertificateFile /etc/apache2/TLS/certifapache.crt
SSLCertificateKeyFile /etc/apache2/TLS/cleprivapache.key
</VirtualHost>

On enregistre et on quitte


Etape 6 : activer la configuration du vhost

a2ensite www.jesuissuper.com.conf

(le nom des sites possibles s'affiche), taper jesuissuper


Etape 7 : redémarrage d'apache2

systemctl reload apache2

(ou systemctl restart apache2)


Etape 8 : résolution de nom

Faites une résolution de nom sur votre hôte.

cas 1 : le PC est sur Linux :

vi /etc/hosts
IP-DU-SERVEUR-WEB      www.jesuissuper.com

cas 2 : le PC est sous windows.

modifier le fichier hosts (cliquez ici pour accéder à la procédure), y ajouter la même ligne qu'au-dessus


Etape 9 : Importer le certificat d'autorité sur votre navigateur Firefox : ca.crt sur votre PC

(via scp ou winscp)
Lancez Firefox, paramètres, cherchez 'certificats', affichez les certificats, onglet Autorités, Importer


⬆️ Retour en haut de la page