Chez oim, forum libreChez oim, forum libre

 
Pages: [1]   En bas

Auteur Sujet: Tuto : Obtenir, gérer et renouveler ses certificats SSL automatiquement sous Apache avec le module Mod_md  (Lu 609 fois)

alex

  • Administrateur
  • Moulin à paroles
  • ********
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 20.210
  • Proprio officiel chez oim !






Obtenir, gérer et renouveler ses certificats de sécurité SSL automatiquement sous Apache avec le module Mod_md (fonctionne sous Linux).




ATTENTION ! La version 2.4.30 minimum de Apache est nécessaire !



Introduction
Préparer la config Apache
Créer un Alias afin d'autoriser L'accès à Lets Encrypt
Créer un Vhost afin d'obtenir notre premier certificat
Procéder à un premier test
Vérifier et contrôler les certificats






(Haut de page)
- Introduction
Avertissement :
ATTENTION !
Pour avoir des certificats de sécurité "officiels" sous Wamp, il est indispensable de posséder un nom de domaine ou un sous domaine qui pointe vers votre machine, sinon ça ne marchera pas !
N'espérez pas obtenir un certificat de Lets Encrypt pour localhost ou un autre domaine contenu dans votre fichier hosts. Il faut impérativement des enregistrements DNS pour votre (sous) domaine !

Vous pouvez obtenir jusqu'à 3 sous domaines gratuits se mettant à jour avec l'IP de votre machine automatiquement chez www.noip.com
Il existe également Freenom, mais je le déconseille, ils confisquent les domaines quand ça leur chante : www.freenom.com


Dans ce nouveau tuto, vous l'aurez compris, nous allons encore parler de certificats de sécurité.
Mais cette fois, avec les évolutions de Apache et de leurs contributeurs, nous n'aurons plus à nous occuper de nos certificats, Apache le fera à notre place !
Oui, vous avez bien lu. Nous allons confier nos certificats de sécurité à Apache et il se chargera de les gérer et renouveler en toute transparence.

Pour commencer, sachez que Apache est livré avec le module mod_md depuis la version 2.4.30 et c'est ce module que nous utiliserons.
Si vous pensez ne pas avoir besoin de ce tuto ou si vous souhaitez prendre connaissance de ce que peut bien faire le module mod_md, penchez-vous donc sur la documentation Apache concernant le module mod_md.

N'ayez pas peur ! Il s'agit là d'un tuto, tout vous sera expliqué le plus simplement du monde.
Sachez que ce tuto s'adresse aux machines Windows utilisant Wamp.
Ceci dit, rien ne vous empêche de vous en inspirer pour une machine fonctionnant sous Linux, la souplesse de Apache le permet. Il vous suffira juste de modifier les chemins Windows vers des chemins Unix dans les exemples donnés.


Vous êtes prêts ? Allons-y ! :)
D'avance, toutes mes excuses aux Linuxiennes et Linuxiens. Ce tuto parle brièvement de vous, vous devriez y arriver si vous n'êtes pas un débutant.




(Haut de page)
- Préparer Apache

Dans tous les exemples présentés, nous utiliserons Wamp avec Apache 2.4.41 et PHP 7.1.16
Si vous utilisez une autre version de Apache/PHP, vous n'aurez qu'à simplement modifier celle-ci dans les exemples.

Tout d'abord, nous allons créer un dossier nommé MD dans le dossier de Wamp, C:\wamp\md
MD signifie simplement Management Domains (gestion des domaines).
Rendez-vous donc dans le dossier C:\wamp et créez le dossier MD.
Dans ce dossier C:\wamp\MD, créez le dossier \challenges. Ca nous donnera C:\wamp\MD\challenges
Dans ce même dossier C:\wamp créez le dossier md-scripts. C'est ce dossier que nous utiliserons pour placer nos scripts PHP chargés de redémarrer Wamp lorsqu'un certificat et créé ou renouvelé.





(Haut de page)
- Préparer la config Apache

Cette fois, vous allez pouvoir utiliser l'interface de Wamp en partie, mais le plus emmerdant se fera à la main...
Cliquez sur l'icone Wamp et activez les modules MD, Status et Watchdog.




Si vous n'aviez pas le module mod_md et qu'il n’apparaît pas, redémarrez Wamp et recommencez après avoir ajouté cette ligne dans httpd.conf : (Attention ! Ce tuto n'a pas été testé sur de vieilles version d'Apache n'ayant pas ce module)
Code: apache
LoadModule md_module modules/mod_md.so
Sous Linux, vous devrez activer ces modules dans le httpd.conf de la façon décrite ci-dessus.


Maintenant, intéressons nous à une petite configuration qui nous permettra "d'ausculter" l'état des certificats gérés par Apache et de préparer leur traitement par le module mod_md.
Ouvrez le fichier C:\wamp\bin\apache\apache2.4.41\conf\httpd.conf (changez le N° de version de Apache selon votre version).

En toute fin de fichier, ajoutez ceci :
Code: html
<IfModule mod_status.c>
<Location "/server-status">
SetHandler server-status
Require local
</Location>

<IfModule mod_md.c>
<Location "/md-status">
SetHandler md-status
Require local
</Location>
</IfModule>
</IfModule>

<IfModule mod_md.c>
MDBaseServer off
MDCAChallenges http-01
MDCertificateAgreement accepted
MDCertificateAuthority https://acme-v02.api.letsencrypt.org/directory
MDCertificateProtocol ACME
MDCertificateStatus on
# MDMessageCmd C:/Wamp/Bin/Php/php7.1.16/php.exe C:/Wamp/md-scripts/message.php
# MDNotifyCmd  C:/Wamp/Bin/Php/php7.1.16/php.exe C:/Wamp/md-scripts/notify.php
MDMustStaple on
MDPortMap http:80 https:443
MDPrivateKeys RSA 4096
MDRenewMode always
MDRenewWindow 30d
MDRequireHttps temporary
MDStoreDir "C:/wamp/MD"
</IfModule>
Vous l'aurez remarqué, il existe deux lignes en commentaire. Tout d'abord, changez pour votre version de PHP.
Ensuite, nous reviendrons sur ces lignes plus loin. C'est ces lignes qui permettent de recharger Apache lorsqu'un certificat est créé/renouvelé.

Concernant /server-status et /md-status, si vous ne connaissez pas le module status, on en reparlera plus loin aussi.
Pour les Linuxiens, vous modifierez les chemins, rien de bien sorcier.




(Haut de page)
- Créer un Alias afin d'autoriser L'accès à Lets Encrypt

Si nous voulons un certificat, il va falloir que Lets Encrypt puisse accéder à notre serveur Apache. Il ne peut pas en être autrement.
Le module mod_md créera des fichiers de signature que Lets Encrypt voudra consulter pour validation. Ca se passe toujours comme ça, Lets Encrypt accède au site à la recherche des fichiers de signature d'un domaine et ce, sur tous les serveurs de la planète.
La seule alternative est la validation DNS, mais ce module ne l'a propose pas pour l'instant.

Rendez-vous dans le dossier C:\wamp\alias. Si le fichier lets-encrypt.conf n'existe pas, créez le.
Ouvrez ce fichier en édition et, si il contient quelque chose, remplacez son contenu par ceci (sinon remplissez le avec ce qui suit) :

Code
Alias /.well-known/acme-challenge "C:\wamp\MD\challenges"

<directory "C:\wamp\MD\challenges">
Options -Indexes
AllowOverride none
Require all granted
</Directory>
L'avantage d'un alias pointant sur un autre dossier que votre dossier WWW est que vous n'aurez pas à vous farcir des contrôles d'accès longs et pénibles à mettre en place.
En terme de sécurité, c'est beaucoup plus efficace !

Sous Wamp, ce fichier sera chargé automatiquement au démarrage du serveur.
Sous Linux, vous devrez ajouter une entrée vers ce fichier dans httpd.conf




(Haut de page)
- Créer un Vhost afin d'obtenir notre premier certificat

Cette fois, nous y sommes presque, il ne reste plus qu'à créer un Vhost et les dossiers du domaine qui accueilleront le certificat.
Nous allons demander un certificat pour le domaine chez-alex.fr, ce domaine possédera les sous domaine www.chez-alex.fr et mail.chez-alex.fr

Dans le dossier C:\wamp\MD créez le dossier chez-alex.fr qui recevra notre certificat et sa clé.
Ouvrez le dossier C:\wamp\bin\apache\apache2.4.41\conf\extra et créez un fichier texte portant le nom de votre Vhost : chez-alex.fr.conf
Ouvrez ce fichier en édition et placez ce qui suit dedans :

Code
<MDomain chez-alex.fr>
MDCertificateFile "C:/wamp/MD/chez-alex.fr/pubcert.pem"
MDCertificateKeyFile "C:/wamp/MD/chez-alex.fr/privkey.pem"
</MDomain>

<VirtualHost *:443>
ServerName chez-alex.fr
ServerAlias www.chez-alex.fr
ServerAlias mail.chez-alex.fr
DocumentRoot "C:/wamp/www"


SSLEngine on

<directory C:/wamp/www>
<IfModule mod_headers.c>
# HSTS
#Header always set Strict-Transport-Security "max-age=15552000"
# secured cookies
#Header always edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
</IfModule>
</directory>
</VirtualHost>
Ajoutez autant de directives Apache ServerAlias que vous avez de sous domaines. Le certificat sera demandé pour le domaine (ServerName) et les sous domaine (ServerAlias).
Ré-ouvrez le fichier http.conf, puis, en toute fin de fichier, ajoutez la ligne :
Code
Include conf/extra/chez-alex.fr.conf
Include conf/extra/ssl-proto-ciphers.conf
Vous avez repéré la dernière ligne parlant du fichier ssl-proto-ciphers.conf ? Bravo ! Effectivement, nous avons besoin de "calibrer" la connexion SSL.
Créez le fichier ssl-proto-ciphers.conf dans le même dossier que votre Vhost et placez ceci dedans :

Code
SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.3 +TLSv1.2
SSLCipherSuite          ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256

ProtocolsHonorOrder on
SSLHonorCipherOrder on
SSLCompression  off
SSLSessionTickets on
SSLInsecureRenegotiation off

<IfModule mod_md.c>
MDStapling on
MDStapleOthers off
</IfModule>
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingFakeTryLater on
SSLStaplingCache shmcb:C:/Windows/Temp/OCSPstapling_cache(128000)

SSLSessionCache shmcb:C:/Windows/Temp/ssl_scache(512000)
SSLSessionCacheTimeout 300

#SSLOpenSSLConfCmd DHParameters "C:/wamp/bin/apache/apache2.4.41/conf/extra/dh-4096.key"

#Protocols h2 h2c http/1.1
#Protocols h2 h2c
Protocols h2 http/1.1
#Protocols h2

H2Push Off
L'avantage d'avoir la configuration SSL dans un fichier séparé, c'est que vous pouvez créer autant de Vhost que vous le souhaitez, ils auront tous la même configuration.

Bien entendu, vous modifierez les noms de dossiers en fonction de votre version de Apache et du nom de votre domaine.

Et voilà, nous avons terminé ! Presque...
Attention ! Nous allons rencontrer un problème si vous redémarrez Apache de suite.




(Haut de page)
- Procéder à un premier test

Comme déjà dit, si nous relançons Apache de suite, nous allons avoir un problème.
En effet, Apache va chercher les fichiers C:/wamp/MD/chez-alex.fr/pubcert.pem et C:/wamp/MD/chez-alex.fr/privkey.pem et il ne les trouvera pas. Apache ne pourra donc pas démarrer...
Je pense qu'il s'agit là d'un bug du module mod_md qui, normalement, devrait créer les certificats avant le démarrage de Apache.

Ca ne pose pas de réel problème. Il suffit de placer n'importe quel certificat wildcard auto-signé et sa clé dans le dossier et quand Apache sera lancé, il créera les certificats voulus. Le certificat auto-signé sera uniquement un wildcard, pas de domaine désigné, sinon Apache se braquera en remarquant que les noms ne correspondent pas !
Ne paniquez pas ! Cerise sur le gâteau, votre serviteur a créé un certificat et une clé que vous n'avez plus qu'à télécharger et placer dans le dossier du domaine.
Ca se passe ici :
Le certificat
La clé du certificat

Placez ces 2 fichiers dans le dossier du domaine C:/wamp/MD/chez-alex.fr/ (ou le nom que vous aurez choisi) et redémarrez Apache de Wamp.
Apache démarre correctement ? Alors vous devriez bientôt obtenir votre "vrai" certificat en remplacement de ceux présents !




(Haut de page)
- Vérifier et contrôler les certificats

Il ne nous reste plus qu'à contrôler que nous allons bien obtenir notre certificat.
Grâce au module mod_status nous allons voir ce qui se passe sur notre serveur.
Allons-y : http://localhost/server-status/

Je vous laisse découvrir la page pleine d'infos qui se présente à vous, seuls les domaines SSL nous intéressent.
Si votre serveur vient de (re)démarrer, vous devriez avoir un aperçu comme celui-ci :


Cette information signifie que votre certificat est en train d'être créé/renouvelé.
Si tout se passe bien, vous obtiendrez ceci :


Là, Apache vous informe simplement qu'il doit être redémarré pour prendre en compte le nouveau certificat.
Allez-y, redémarrez Apache et vous obtiendrez cette dernière info :


Maintenant, Apache nous dit que tout va bien.
Et voilà, vous avez obtenu votre certificat, et maintenant, c'est Apache qui se chargera de le renouveler tout seul comme un grand !



Je parie que vous n'avez pas oublié les deux scripts PHP dont il était question au début et dont on devait reparler.
J'ai bien tout tenté, mais il n'est pas possible de redémarrer Apache depuis un script appelé par Apache lui même (sous Windows).
Si vous avez la combine pour redémarrer Apache, je compte sur vous pour me passer l'info.
Ceci dit, la plupart des internautes ne seront pas gênés, vu que l'ordinateur est éteint le soir et rallumé le lendemain. C'est l'équivalent d'un redémarrage de Apache et ces internautes n'auront plus à s'occuper de leurs certificats. :)

N'hésitez pas à consulter la documentation Apache, la documentation Github du projet Manage Domains (MD) et à revenir m'en apprendre un peu plus.

De plus, je vous laisse découvrir ce que le status de md-status vous fournira comme informations. ;)




ATTENTION !
En fonction de votre box, il vous faudra certainement rediriger les ports 80 & 443 vers la machine sur laquelle est installé Wamp.
Sur ce point précis, je ne peux pas vous aider. Chaque box possède ses spécificités propres, je ne peux pas donner l'astuce pour toutes les box.
D'autant plus que la France n'est pas le seul pays à nous lire. Ca représente des centaines de box ! ::)


alex

  • Administrateur
  • Moulin à paroles
  • ********
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 20.210
  • Proprio officiel chez oim !
Re: Tuto : Obtenir, gérer et renouveler ses certificats SSL automatiquement sous Apache avec le module Mod_md
« Réponse #1 le: samedi 08 février 2020, 15:05 »
le: samedi 08 février 2020, 15:05

Le monde animal s'exprime sur ce tuto :


Waaaaaah !



Signaler au modérateur   IP archivée

lagrace

  • Observateur
  • Orateur persévérant
  • *
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 31
      • lagmedia

bonjour Alex

voila avec la chance que j ai rien ne fonctionne pour moi apache ne demarre pas je te joint l erreur que j ai pourtant j ai relus et relus sans cesse ton magnifique tuto desole

Code
State of services:

 The service 'wampapache64' is NOT started
 EXIT error code:1066
 Help message for error code 1066 is:Le service a renvoyé un code d'erreur qui lui est spécifique.
>>> Invalid command 'H2Push', perhaps misspelled or defined by a module not included in the server configuration     .
>>> AH00526: Syntax error on line 29 of C:/wamp64/bin/apache/apache2.4.43a/conf/extra/ssl-proto-ciphers.conf:     .

 The service 'wampmariadb64' is started
 Service Session : LocalSystem

WampServer (Apache, PHP and MySQL) will not function properly if any service
'wampapache64'
'wampmariadb64'
 is not started.

all services BINARY_PATH_NAME are OK
Signaler au modérateur   IP archivée

Otomatic

  • Observateur
  • Saint patron des orateurs
  • *****
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 890
  • Vieux geek assagi
      • Aviatechno

Bonjour,

Faut aller voir la ligne 29 du fichier C:/wamp64/bin/apache/apache2.4.43a/conf/extra/ssl-proto-ciphers.conf

Apache dit qu'il y a une erreur !
Signaler au modérateur   IP archivée
« La vie sans musique est tout simplement une erreur, une fatigue, un exil. » Friedrich Nietzsche.
« Ce n'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont forcément raison. » Coluche

alex

  • Administrateur
  • Moulin à paroles
  • ********
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 20.210
  • Proprio officiel chez oim !

Voilà, Oto a répondu.
C'est ton fichier ssl-proto-ciphers.conf à la ligne 29 qui fout la merde. :iq:
Signaler au modérateur   IP archivée

lagrace

  • Observateur
  • Orateur persévérant
  • *
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 31
      • lagmedia

oui sait indique lol   sais la commande    H2Push off

et en regardant une de tes images j ai du installer le module watching mod pour que ca bouge   j ai pleins de fichiers json  mais ca ne prend en compte que tes 2 fichiers  qui ont une duree de 5 ans rien de plus
Signaler au modérateur   IP archivée

alex

  • Administrateur
  • Moulin à paroles
  • ********
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 20.210
  • Proprio officiel chez oim !

Quoi ?!
De où que mes fichiers ont 5 ans ?
Ne confonds pas Alex et Apache qui redistribue les mêmes fichiers de configuration d'une version à une autre.

Le module watching, je ne vois pas ce que c'est du tout. A mon avis, tu fais des conneries... :jr:

Sinon, tu peux mettre H2Push off mais si H2Push n'est pas connu parce-que tu n'as pas chargé le module HTTP2, ça ne marchera pas.
Signaler au modérateur   IP archivée

lagrace

  • Observateur
  • Orateur persévérant
  • *
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 31
      • lagmedia

je parle belge lol sait surtout ca


sait le module watchdog que j ai du activer pour que ca bouge et sa ma remplacer mon certicat de l autre tuto par un certificat qui debute le 20 fevirier jusqu au 20 fevrier 2025 je suppose que sait les 2 fichiers que j ai mis dans le dossier du domaone dans le dossier MD
Signaler au modérateur   IP archivée

alex

  • Administrateur
  • Moulin à paroles
  • ********
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 20.210
  • Proprio officiel chez oim !

Et il fait quoi ce module watchdog ?

Sinon oui, le module MD a créé les certificats pour les stocker dans le dossier /MD
Maintenant c'est ce module qui se chargera de renouveler tout seul les certificats.
Sympa non ? :)
Signaler au modérateur   IP archivée

lagrace

  • Observateur
  • Orateur persévérant
  • *
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 31
      • lagmedia

Prérequis
Pour pouvoir être utilisé, ce module nécessite le chargement préalable du module mod_watchdog.
Signaler au modérateur   IP archivée

lagrace

  • Observateur
  • Orateur persévérant
  • *
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 31
      • lagmedia

bonjour que veut dire cette erreur s il vous plait merci

Code
[Mon May 11 14:45:38.015288 2020] [ssl:emerg] [pid 4780:tid 364] AH02562: Failed to configure certificate lagmania.ddns.net:443:0 (with chain), check C:/wamp64/MD/lagmania.ddns.net/pubcert.pem
[Mon May 11 14:45:38.015288 2020] [ssl:emerg] [pid 4780:tid 364] SSL Library Error: error:02001002:system library:fopen:No such file or directory (fopen('C:/wamp64/MD/lagmania.ddns.net/pubcert.pem','rb'))
[Mon May 11 14:45:38.015288 2020] [ssl:emerg] [pid 4780:tid 364] SSL Library Error: error:20074002:BIO routines:file_ctrl:system lib
[Mon May 11 14:45:38.015288 2020] [ssl:emerg] [pid 4780:tid 364] SSL Library Error: error:140DC002:SSL routines:use_certificate_chain_file:system lib
AH00016: Configuration Failed
Signaler au modérateur   IP archivée

alex

  • Administrateur
  • Moulin à paroles
  • ********
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 20.210
  • Proprio officiel chez oim !

Ca c'est une boulette des concepteurs de Wamp...
En fonction du Wamp installé (wamp 32bit ou wamp 64bit), le nom du chemin change.
Ca devient C:/wamp/MD/ pour Wamp 32bit et C:/wamp64/MD/ pour Wamp 64bit.

C'est devenu comme ça sans que personne ne soit prévenu !
Le plus malin aurait été de créer un lien symbolique pour garder la compatibilité...

Il faut que tu modifies les chemins vers tout ton bazars. Tout ce qui est dans les exemples et qui est C:/wamp/MD/ doit devenir C:/wamp64/MD/
Je vais prévenir sur le tuto, et je vais en profiter pour râler un coup, c'est du grand n'importe quoi ! :il:

Wamp est censé s'adresser aux nuls, ceux qui ne connaissent rien, et voilà que deux types de chemins apparaissent, n'importe nawak ! :ga:
Signaler au modérateur   IP archivée

Otomatic

  • Observateur
  • Saint patron des orateurs
  • *****
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 890
  • Vieux geek assagi
      • Aviatechno

Le chemin d'installation est ce qu'a décidé l'utilisateur lors de l'installation ; C:\wamp et c:\wamp64 est ce qui est proposé — parce que oui ! on peut très bien avoir deux installations une en 32bit et une en 64bit.
Il y a des utilisateurs qui ont même choisi C:\users\moi\serveurwamp.

Donc oui, le chemin d'installation peut être quasiment n'importe quoi et c'est pour ça qu'il passe par une variable dans Apache :
${INSTALL_DIR}. Donc, on se sert de la variable Apache et pas d'un chemin en dur !
Signaler au modérateur   IP archivée
« La vie sans musique est tout simplement une erreur, une fatigue, un exil. » Friedrich Nietzsche.
« Ce n'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont forcément raison. » Coluche

lagrace

  • Observateur
  • Orateur persévérant
  • *
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 31
      • lagmedia

ok j avais changer tous en wamp64 ca j avais compris on peut le mettre ou on veux a l install wampserver meme sur un autre disque dur si on veut lol ya beaucoup de logiciel qui font cela bon je vous souhaitent une bonne fin de soiree moi dodo boulot demain et encore merci pour vos reponses
Signaler au modérateur   IP archivée

alex

  • Administrateur
  • Moulin à paroles
  • ********
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 20.210
  • Proprio officiel chez oim !

Le tuto a été revu suite au retour d'expérience de Lagrace et il n'est plus proposé de télécharger le module mod_md sur Github.
Aujourd'hui, ce module est assez avancé dans les versions proposées de Apache.


Merci à Lagrace pour avoir corrigé l'erreur commise avec le module mod_watchdog! :)

Signaler au modérateur   IP archivée
Pages: [1]   En haut
 

+ Réponse Rapide

Page générée en 0.08 secondes avec 25 requêtes.