_
~ DAMOLAB - Les tambouilles textes, teks et hacks ~
"Souris à la vie pour qu'elle te sourie." - Proverbe tunisien
DAMOLAB (#TAGS) _./._ XBNF blog _./._ Blog _./._

Securisation HTTPS autour de Apache


| FR | par DAMO | | 14/06/2025 12h00 | (last update 01/03/2026 11h04) | Commentaires |
#LINUX #SECURITY #ARCHITECTURE #APACHE
Dans cette article, est abordé la création de certificats auto-signés ou certifié avec Let's Encrypt
|


1) Apache > Activer SSL



ref1

La certification HTTPS repose sur OpenSSL, pour l'installer, selon votre distribution préférée faire:
 apt install openssl 

Ou
 yum install openssl 


Vous devez activer ces deux modules apache:
 a2enmod ssl rewrite 


Activer le site SSL:
 a2ensite default-ssl 


En tant que root, préparer un répertoire:
cd /etc/apache2
mkdir mysite.ssl
cd mysite.ssl


Générer une clef Diffie-Hellman pour renforcer crytage:
 openssl dhparam -out dhparam.pem 4096 

/!\\ Cela prend plus de deux heures sur mon raspberryPI, une heure sur un laptop.

Générer votre clef privée avec ou sans passphrase:
 openssl genrsa -des3 -out mysite.key 4096 


Si vous avez précisé une passphrase, et que vous avez besoin de l'enlever:
 openssl rsa -in mysite.key -out mysite.no-pass.key 

Vous pouvez tester le comportement avec ou sans passphrase au démarrage de Apache, NGINX, ...

Préparer la configuration HTTPS dans Apache:
 
vi /etc/apache2/sites-available/default-ssl.conf 
<IfModule mod_ssl.c>
        <VirtualHost _default_:443>

                ServerName mysite.org

                DocumentRoot /var/www/html

                ServerAdmin me@email.org
...
		# Cas d'un certificat <auto-signé>
		SSLCertificateFile    /etc/apache2/mysite.ssl/mysite-auto.crt
		SSLCertificateKeyFile /etc/apache2/mysite.ssl/mysite.key
		Include               /etc/apache2/mysite.ssl/ssl-apache.conf

		# Cas d'un Certificat <Let's Encrypt>
		SSLCertificateFile    /etc/apache2/mysite.ssl/letsencrypt/live/mysite.org/fullchain.pem
		SSLCertificateKeyFile /etc/apache2/mysite.ssl/letsencrypt/live/mysite.org/privkey.pem
		Include               /etc/apache2/mysite.ssl/letsencrypt/options-ssl-apache.conf

		# Renforcement avec la clef DH: 
		SSLOpenSSLConfCmd DHParameters "/etc/apache2/mysite.ssl/dhparam.pem"

       </VirtualHost>
</IfModule>


Dans ce billet, je ne creuse pas les paramètres de cryptage définies dans Include ci-dessus.
Je conseille d'utiliser Let's Encrypt qui fournis les fichiers des paramètres, les clefs & certificats.


2) Cas du Certificat HTTPS auto-signés



ref2
ref3

/!\\ L'utilisation en auto-signé doit être limité au cadre d'un serveur privé pour des clients connus...
En effet, un certificat auto-signé, n'est pas certifié par un tier de confiance mais par vous (auto-signé).
Cela signifie que si le serveur est usurpé (dupliqué par malveillance), un certificat peut être généré par l'usurpateur,
ayant dupliqué les infos et le site de sorte que cela donnera donc l'illusion qu'il s'agit du serveur d'origine,
seules des clients avertis qui vérifient les signatures de clefs à chaque connexion seraient en mesure de le constater...
C'est donc pour cela que les browser lèvent une exception de sécurité qu'il faut explicitement valider ou pas.


Pour tester la mécanique et comprendre les mécanismes de HTTPS, ce mode est utile.

Il est possible de générer d'un coup la clef privée et un certificat auto-signé:
 openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout mysite.key -out mysite-auto.crt 


Puis configurer et relancer Apache pour prise en compte.

Dans ce mode (auto-signé), il faut importer la clef coté client, pour cela,
il faut produire un .pfx au format pkcs12 à partir des .key et .crt précédement généré:
 openssl pkcs12 -export -in mysite-auto.crt -inkey mysite.key -out mysite.pfx 


(*) Renseignez un mot de passe d'export afin de sécuriser le .pfx en cas de fuite, car il contient la clef privée.

Ensuite, importez votre .pfx dans vos paramètres de sécurité de votre browser:
  • Firefox > Paramètres > Vie privée et sécurité > Certificats > afficher les certificats... >

Vos certificats > [Importer...]
  • Chrome > Paramètres > Paramètres Avancés > Confidentialité et sécurité > Gérer les certificats >

Personnal > [Import...]


3) Cas du Certificat HTTPS valide et certifié par un tier de confiance



Dans le cadre d'un serveur publique, vous souhaitez obtenir un cadenat vert indiquant que la chaine de confiance est valide,
contrairement à un serveur privé, la clef privée reste sur le serveur, c'est le browser client qui, grâce au tier de confiance,
authentifiera le site par rapport à son Common Name, il s'agit de vérifier que le nom DNS correspond bien au certificat.

Inutile d'inclure les certificats d'authorité (DigitCert, Let's Encrypt) car il font partie de la chaine de confiance,
et sont récupérés par le browser directement et authentifié grâce aux certificats usine lors de l'installation.
Au final, ils attestent de la validité du certificat intermédiaire qui vous sera fournis.

Les fichiers suivants doivent être crées:
  • clef privée <.key>
  • requête de demande de certificat <.csr> à communiquer à l'organisme de certification choisis
  • certificat intermédiaire <.pem> fournis par l'organisme tier de confiance



3.1) CertBot/Let's encrypt - service gratuit


ref4

/!\\ Certbot vérifie le site en HTTP, vous devez garder l'accès HTTP (port 80) de votre apache.

Le script certbot s'occupe de tout (clefs, certificats, config).

En tant qu'utilisateur root, installer certbot:
 apt install certbot python3-certbot-apache 


lancer certbot pour Apache:
 certbot --apache 


Remplir le formulaire avec soin:
 * ...
 * me@email.com
 * (A)gree
 * mysite.org
 * 1: No redirect 


Le script va dans /etc/letsencrypt/ générer:
  • la clef privée .key
  • le formulaire pour la requête (.csr)
  • le certificat intermédaire convoité pour votre site


Normalement, positionner les pointeurs dans /etc/apache2/sites-available/default-ssl.conf.

Personnelement, j'aime avoir tout dans /etc/apache2/mysite.ssl/:
cd /etc
mv letsencrypt /etc/apache2/mysite.ssl/
ln -s /etc/apache2/mysite.ssl/letsencrypt



3.2) DigitCert - service payant


Pour générer la requête de certification et remplir les infos:
 openssl req -new -key mysite.key -out mysite.csr 

...
Common Name  : mysite.org
Email Address: me@mysite.org


Vérifier le .csr:
 openssl req -noout -text -verify -in mysite.csr 


Ce .csr doit maintenant être communiqué à un organisme de certification.


Aller sur DigitCert

Remplir le formulaire:
  • requester: vos nom/prénom / email
  • recopier le contenu du .csr (votre requête CSR)
  • Common Name: my-company.org qui doit être dans un domaine DNS publique déposé
  • SANs: team1.my-company.org, team2.my-company.org, ... Entrez toutes les machines du domaines
  • Additional certificate options:
    • Server platform : Apache, NGINX, ...
    • Choisir l'organisation proposée par défaut
    • Additional emails (optional): renseigner obligatoirement une mailing list (celle du csr)
  • Custom fields: à voir selon s'il s'agissait d'un projet d'entreprise sous contrat ou pas


Votre requête est acceptée ..., DigitCert vous communique le lien avec la chaine de certification:
  • un certificat généré pour votre domaine
  • un certificat intermédiaire pour attester le tier de confiance (Digitert)



4) Renouvellement d'un certificat



/!\\ à expiration du certificat, il faut renouveller au minimum le fichier .pem (certificat intermédiaire),
il est recommendé de tout regénérer.

4.3) avec Let's Encrypt


La durée de validité est de 90 jours ce qui est court mais le renouvelement est automatiquement,
c'est un démon en tâche de fond qui va vérifier la validité et effectuera le renouvellement si nécessaire:
 systemctl status certbot.timer 


Pour tester manuellement que le renouvellement fonctionne:
 certbot renew --dry-run 


/!\\ Certbot vérifie le site en HTTP, vous devez garder l'accès HTTP (port 80) de votre apache.
voici l'erreur que j'ai eu avec apache configuré sans HTTP (HTTPS seulement):
...
Cleaning up challenges
Unable to find a virtual host listening on port 80 which is currently needed for Certbot to 
prove to the CA that you control your domain. 
Please add a virtual host for port 80.
...


Autre problème de connectivité, l'alias mysite.org renvoyait sur ma box internet,
l'ajout d'une règle NAT (redirection de ports) du port 80 (en externe vers l'IP de mon RPI):
...
Waiting for verification...
Challenge failed for mysite.org
http-01 challenge for mysite.org
Cleaning up challenges
Failed to renew certificate mysite.org with error: Some challenges have failed.
...


Si OK, effectuer le renouvellement:
 certbot renew 


Je n'ai pas eu besoin de redémarrer apache.

5) Révocation d'un certificat



/!\\ Il ne peut y avoir deux certificats en paralèlle, il faut donc planifier une fenêtre de maintenance.

La révocation dépend de l'organisme de certification:
  • formulaire d'entreprise pour DigitCert,
  • commande vu précédement pour Let's Encrypt.



6) Informations sur le certificat dans le browser



Ouvrir l'URL de votre site mysite.org et cliquer sur le cadenas.

6.4) Durée de validité d'un certificat


       
6.4.1) avec Chrome


Cadenas > connection is secure > Certificat is valid >
la fenêtre avec les détails du certificat >
section validity period > Expires On

       
6.4.2) avec Firefox


Cadenas > Connexion sécurisée > Plus d'information >
Afficher le certificat > Aller dans le dernier onglet >
Validité > Pas après



Bonne sécurisation !


0.1) DamoLab


DamoLab@Sourceforge
DamoLab@DockerHub

0.2) Calculette composants radio


Electro-slide

0.3) Technologies


-- IA --
Mistral IA (le chat) (i)

-- Cyber-securité --
Shodan (i)11
Have I been pwned ? (i)
personal-data-leak-check
Osint
Zataz actualités

-- Adresses IP --
Mes Infos (IP, UA, ...)
info IP: WHOIS,ping,...
info IP: WHOIS,ping,...
info IP: Locallisation
info IP: abus
DNS checker

-- Mails --
GMX
Hushmail - mail temporaire sécurisé

encode/decode email for defeating bots
 $_='mailto: matt@org';s/(.)/chr(ord($1)+5)/eg;$_ 


-- Linux --
News LinuxFr
Mind-map Linux
Tutorials
crontab

-- Blogs Teks --
@TechWorldwithNana
@Cookieconnect
@GoCloudArchitects
@grafikart
@Underscore_
@cybernewsenfrancais


-- Geek Code --

décoder un GC

GCS d>+(---) s- a+ C++$ UL+>$ UOS++$
P++++>$ L++ E W++(++) N(+) o-- K+ w>--- O- M>+ PS+>+++ PE-- Y+@ t-(+) >5 X+ R>+ !tv b+
D---- D+ G e+++ h---- r+++ z+++



Rescue NEO...
(JS by Rezmason)


Nom/surnom:
Message:


revenir sur l'article
#LINUX #SECURITY #ARCHITECTURE #APACHE

Aucun commentaire.

dans
une
galaxy
lointaine
Charte du site damolab.zapto.org est motorisé par

"La force est une sorte de fluide crée par tout être vivant, une énergie qui nous entoure et nous pénètre, et qui maintient la galaxie en un tout unique."
- Obi-Wan à Luke Yoda