Sécuriser un serveur web via HTTPS avec un certificat auto-signé

de | 18 février 2023

Sécuriser un serveur web via HTTPS avec un certificat auto-signé

Afin de sécuriser au mieux le service web, nous aurons besoin de mettre en place un certificat HTTPS.
Si le serveur est connecté à internet nous pourrons utiliser Let’s Encrypt.
Ici par soucis de sécurité nous ne connecterons pas ce serveur vers l’extérieur. Nous générerons donc notre propre autorité de certification et un certificat « homeCA » pouvant être réutilisé sur n’importe quel serveur web de votre organisation.
Vous pourrez si nécessaire diffuser le certificat racine via une GPO sur tous les postes de votre domaine.

Nous commencerons par passer en root et par créer le dossier de travail nécessaire à ce nouveau serveur faisant « autorité de certification » et nous nous y placerons:

* Attention de bien adapter ce tutoriel en fonction de votre FQDN ! Dans ce tutoriel mon FQDN est : srvweb.home.lan (Nom machine : srvweb / Domaine : home.lan)
  • Passer en "Super Utilisateur : su"
  • Installation de "Openssl : apt-get install openssl"
  • mkdir /etc/ssl/srvweb.home.lan/
  • cd /etc/ssl/srvweb.home.lan/

Nous commencerons par générer la clé privée pour l’autorité de certification en rentrant un mot de passe.
Ce dernier sera absolument nécessaire pour la signature de certificat, conservez le précieusement:
  • openssl genrsa -des3 -out homeCA.key 2048
  • Enter PEM pass phrase:
  • Verifying - Enter PEM pass phrase:

Puis nous générerons le certificat root de l’autorité de certification à destination des clients au format .pem:

  • openssl req -x509 -new -nodes -key homeCA.key -sha256 -days 3650 -out homeCA.pem
  • Enter pass phrase for homeCA.key:

You are about to be asked to enter information that will be incorporatedinto 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 blankFor 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]:Ile de France
  • Locality Name (eg, city) []:Paris
  • Organization Name (eg, company) [Internet Widgits Pty Ltd]:HOME
  • Organizational Unit Name (eg, section) []:IT
  • Common Name (e.g. server FQDN or YOUR name) []:srvweb.home.lan
  • Email Address []:admin@home.lan

Pour des raisons pratiques nous génèrerons également un certificat au format .crt:
  • openssl x509 -in homeCA.pem -inform PEM -out homeCA.crt

Nous créerons la clé privée utilisée pour tous les serveurs de home.lan de telle manière que le certificat final soit un certificat home (*.home.lan).
Puis nous génererons le CSR (Certificate Signing Request) :

  • openssl genrsa -out srvweb.home.lan.key 2048
  • openssl req -new -key srvweb.home.lan.key -out srvweb.home.lan.csr

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]:Ile de France
  • Locality Name (eg, city) []:Paris
  • Organization Name (eg, company) [Internet Widgits Pty Ltd]:HOME
  • Organizational Unit Name (eg, section) []:IT
  • Common Name (e.g. server FQDN or YOUR name) []:srvweb.home.lan
  • Email Address []:admin@home.lan
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Nous créerons un fichier contenant les paramètres pour notre certificat HTTPS:

  • nano srvweb.home.lan.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.home.lan

Enfin nous signerons notre certificat avec notre autorité de certification et obtiendrons le certificat public pour Apache.
Lors de ce processus le mot de passe de notre autorité de certification nous sera demandé:

  • openssl x509 -req -in srvweb.home.lan.csr -CA homeCA.pem -CAkey homeCA.key -CAcreateserial -out srvweb.home.lan.crt -days 3650 -sha256 -extfile srvweb.home.lan.ext

Certificate request self-signature ok
subject=C = FR, ST = Ile de France, L = Paris, O = HOME, OU = IT, CN = srvweb.home.lan, emailAddress = admin@home.lan
  • Enter pass phrase for homeCA.key:

Configuration du VHost Apache

Nous devrons ensuite configurer le VHost nécessaire à la publication du site. Nous exécuterons donc la commande:

  • nano /etc/apache2/sites-available/srvweb.home.lan.conf

Et nous compléterons ce fichier comme ci-dessous:

<VirtualHost *:80>
DocumentRoot /var/www/srvweb.home.lan
ServerName srvweb.home.lan
Redirect permanent / https://srvweb.home.lan/
ErrorLog ${APACHE_LOG_DIR}/srvweb_error.log
CustomLog ${APACHE_LOG_DIR}/srvweb_access.log combined
</VirtualHost>
 
<VirtualHost *:443>
ServerAdmin admin@home.lan
DocumentRoot /var/www/srvweb.home.lan
ServerName srvweb.home.lan
 
SSLEngine On
SSLCertificateFile /etc/ssl/srvweb.home.lan/srvweb.home.lan.crt
SSLCertificateKeyFile /etc/ssl/srvweb.home.lan/srvweb.home.lan.key
 
<Directory /var/www/srvweb.home.lan>
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/srvweb_error.log
CustomLog ${APACHE_LOG_DIR}/srvweb_access.log combined
</VirtualHost>
 

Puis nous activerons le module Apache SSL:

  • sudo a2enmod ssl

Nous créerons le lien symbolique et redémarrerons Apache:

  • sudo ln -s /etc/apache2/sites-available/srvweb.home.lan.conf /etc/apache2/sites-enabled/srvweb.home.lan.conf
  • sudo systemctl restart apache2

Importation du certificat dans Mozilla Firefox

  • Récupérer le certificat cert.crt (Ici le fichier homeCA.crt)
  • Ouvrir le navigateur Mozilla Firefox et se rendre sur l'url du serveur
  • Importer le certificat

 

Installation du certificat dans le magasin de certificats de Windows

  • Double clique sur le certificat

Enjoy !