<-
Apache > Serveur HTTP > Documentation > Version 2.5 > Modules

Module Apache mod_md

Langues Disponibles:  en  |  fr 

Description:Gestion des domaines au sein des serveurs virtuels et obtention de certificats via le protocole ACME
Statut:Expérimental
Identificateur de Module:md_module
Fichier Source:mod_md.c
Compatibilité:Disponible à partir de la version 2.4.30 du serveur HTTP Apache

Sommaire

Ce module permet de gérer les propriétés courantes des domaines pour un ou plusieurs serveurs virtuels. Il a pour principale fonctionnalité l'obtention automatique de certificats via le protocole ACME (RFC 8555). Le module effectue aussi le renouvellement des certificats avant leur expiration afin d'éviter une interruption des services internet. Il est possible de monitorer l'état de tous les domaines gérés par mod_md et de configurer le serveur de façon à ce qu'il envoie des notifications de renouvellement, d'expiration ou d'erreur personnalisées.

L'autorité de certification ACME par défaut est Let's Encrypt, mais il est possible de configurer une autre CA si cette dernière supporte le protocole.

Exemple de configuration simple :

TLS dans un contexte de serveur virtuel

MDomain example.org

<VirtualHost *:443>
    ServerName example.org
    DocumentRoot htdocs/a

    SSLEngine on
    # aucun certificat spécifié
</VirtualHost>

Au démarrage, un serveur ainsi configuré contactera Let's Encrypt pour demander un certificat pour le domaine considéré. Si Let's Encrypt peut vérifier le propriétaire du domaine, le module obtiendra le certificat et sa chaîne de certification, le stockera dans son système de fichiers (voir la directive MDStoreDir) et le proposera au prochain redémarrage à mod_ssl.

Ce processus se déroule pendant l'exécution du serveur. Tous les autres serveurs virtuels continueront à fonctionner normalement, mais tant que le certificat ne sera pas disponible, toute requête pour le domaine considéré génèrera une réponse du type '503 Service Unavailable'.

Prérequis

Pour pouvoir être utilisé, ce module nécessite le chargement préalable du module mod_watchdog.

Pour que Let's Encrypt puisse signer et renouveler votre certificat, votre serveur doit être accessible depuis l'internet public sur le port 80 (http:) et/ou 443 (https:), à moins que votre serveur soit configuré pour utiliser les vérifications DNS - pour plus de détails, voir "certificats génériques".

Le module choisit une des méthodes proposées par Let's Encrypt. En général, LE propose des méthodes de vérification sur les ports ou le DNS et Apache choisit une des méthodes disponibles.

Pour déterminer quelles méthodes sont disponibles, le module consulte les ports sur lesquels écoute Apache httpd. Si le port 80 en fait partie, le module supposera que la vérification http: nommée http-01 est disponible. Si le port 443 en fait aussi partie, la vérification https: nommée tls-alpn-01 sera ajoutée à la liste des méthodes disponibles. Enfin, si la directive MDChallengeDns01 est définie, la méthode de vérification dns-01 sera aussi ajoutée.

Si votre configuration est plus complexe, deux méthodes permettent d'orienter ce choix. En premier lieu, voyez du côté de la directive MDPortMap si le serveur se trouve derrière un redirecteur de port comme un pare-feu. En second lieu, vous pouvez court-circuiter entièrement le processus de choix du module en définissant directement la directive MDCAChallenges.

Vérifications https:

Pour la vérification de domaine via le protocole TLS, le nom de la méthode correspondante est "tls-alpn-01". Le serveur Apache doit alors être en écoute sur le port 443 (voir la directive MDPortMap si vous redirigez ce port vers un autre).

Let's Encrypt ouvrira alors une connexion TLS avec Apache en utilisant l'indicateur spécial "acme-tls/1" (cette portion indication de TLS se nomme ALPN, d'où le nom de la méthode de vérification. ALPN est aussi utilisé par les navigateurs pour ouvrir une connexion HTTP/2.

Si vous ne souhaitez cependant qu'aucun de vos sites ne soit accessible sur le port 80, vous pouvez laiser ce dernier ouvert et rediriger toutes les requêtes vers vos sites en https:. Pour ce faire, utilisez la directive MDRequireHttps décrite plus loin. Votre serveur pourra alors continuer à répondre au requêtes en http: en provenance de Let's Encrypt. Comme dans le cas du protocole HTTP/2, vous pouvez configurer ceci de la manière suivante :

Protocols h2 http/1.1 acme-tls/1

La méthode de vérification "tls-alpn-01" sera alors disponible.

Certificats génériques

Les certificats génériques sont supportés à partir de la version 2.x de mod_md, mais leur obtention n'est pas triviale. Let's Encrypt impose pour ces derniers la vérification "dns-01". Aucune autre n'est considérée comme suffisamment efficace.

Apache ne peut cependant pas implémenter cette vérification de lui-même . Comme son nom l'indique, "dns-01" vous demande de présenter certains enregistrement DNS spécifiques à votre domaine qui doivent contenir certaines données de vérification. Vous devez donc être en mesure d'éditer et modifier les enregistrements DNS de votre domaine.

Si c'est le cas, vous pouvez procéder via mod_md. Supposons que vous disposiez pour cela du script /usr/bin/acme-setup-dns ; vous configurez alors Apache comme suit :

MDChallengeDns01 /usr/bin/acme-setup-dns

Apache fera alors appel à ce script lorsqu'il aura besoin de définir ou détruire un enregistrement DNS de vérification pour le domaine considéré.

Supposons ainsi que vous souhaitiez obtenir un certificat pour *.mydomain.com ; mod_md va appeler :

/usr/bin/acme-setup-dns setup mydomain.com challenge-data
# ceci nécessite de supprimer tout enregistrement DNS TXT pour
# _acme-challenge.mydomain.com et d'en créer un nouveau dont le contenu sera
# "challenge-data"

il appellera ensuite :

/usr/bin/acme-setup-dns teardown mydomain.com
# ceci nécessite de supprimer tout enregistrement DNS TXT pour
# _acme-challenge.mydomain.com

Monitoring

Apache possède un module de monitoring standard : mod_status. mod_md y ajoute une section et facilite le monitoring de votre domaine.

Vous pouvez alors visualiser tous vos domaines gérés par ordre alphabétique, les noms de domaine qu'ils contiennent, un état global, les date d'expiration ainsi que des paramètres spécifiques. Ces derniers comprennent la périodicité de renouvellement que vous avez sélectionnée (ou la valeur par défaut), la CA (autorité de certification) utilisée, etc...

La colonne "Renewal" montre des rapports d'activité ou d'erreur à propos des renouvellements de certificats, ce qui devrait faciliter la vie des utilisateurs qui souhaitent savoir si tout fonctionne correctement ou si des problèmes se produisent.

Si un des domaines gérés provoque une erreur, elle apparaîtra aussi ici, ce qui vous permettra de visualiser les éventuels problèmes sans devoir vous plonger dans les journaux du serveur.

Il existe aussi un nouveau gestionnaire, "md-status", qui peut vous fournir les informations à propos des domaines gérés à partir de "server-status" et au format JSON. Vous pouvez le configurer comme suit sur votre serveur :

<Location "/md-status">
  SetHandler md-status
</Location>

Comme pour "server-status", vous devez ajouter les autorisations nécessaires.

Si vous ne souhaitez recevoir l'état JSON que pour un domaine spécifique, ajoutez le simplement à votre URL d'état :

> curl https://<yourhost>/md-status/another-domain.org
{
  "name": "another-domain.org",
  "domains": [
    "another-domain.org",
    "www.another-domain.org"
  ],
  ...

Cet état JSON montre aussi un journal des renouvellements de certificats :

{
"when": "Wed, 19 Jun 2019 14:45:58 GMT",
"type": "progress", "detail": "The certificate for the managed domain has been renewed successfully and can be used. A graceful server restart now is recommended."
},{
"when": "Wed, 19 Jun 2019 14:45:58 GMT",
"type": "progress", "detail": "Retrieving certificate chain for test-901-003-1560955549.org"
},{
"when": "Wed, 19 Jun 2019 14:45:58 GMT",
"type": "progress", "detail": "Waiting for finalized order to become valid"
},{
"when": "Wed, 19 Jun 2019 14:45:50 GMT",
"type": "progress", "detail": "Submitting CSR to CA for test-901-003-1560955549.org"
},
...

Vous trouverez aussi ces informations dans le fichier "job.json" dans votre répertoire de test et, s'il est activé, dans le répertoire des domaines. Vous pourrez ainsi les consulter à tout moment.

Enfin, la directive MDCertificateStatus donne accès au informations à propos du certificat spécifié au format JSON.

Directives

Traitement des bugs

Voir aussi

top

Directive MDBaseServer

Description:Définit si le serveur global peut être géré ou seulement les serveurs virtuels.
Syntaxe:MDBaseServer on|off
Défaut:MDBaseServer off
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive permet de définir si le serveur global, autrement dit la partie du serveur située en dehors de tout serveur virtuel, doit être géré par mod_md ou non. Par défaut il ne le sera pas car cela provoquerait des effets de bord générateurs de confusion. Il est donc recommandé de définir des serveurs virtuels pour tous les domaines gérés, et d'exclure des domaines gérés le serveur global (serveur par défaut).

top

Directive MDCAChallenges

Description:Type de négociation ACME utilisée pour prouver l'appartenance du domaine.
Syntaxe:MDCAChallenges name [ name ... ]
Défaut:MDCAChallenges tls-alpn-01 http-01 dns-01
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive permet de définir les types de négociation utilisés et leur ordre d'exécution pour prouver l'appartenance du domaine et de court-circuiter tout processus de choix ou vérification d'absence de corruption de la part du module. Les noms sont spécifiques au protocole. La version du protocole ACME actuellement implémentée par Let's Encrypt définit trois types de négociation supportés par mod_md. Par défaut, ce dernier tentera d'utiliser le type de négociation basé sur https: sur le port 443, s'il est disponible.

Pour rappel, l'utilisation de cette directive court-circuite le processus de sélection du module. Ainsi, si vous spécifiez la méthode "http-01", le module ne vérifiera pas si le serveur écoute sur le port 80. Il utilisera directement cette méthode avec Let's Encrypt, si ce dernier la propose.

Si vos choix de configuration ne sont pas applicables ici, LE échouera à vérifier votre domaine et rendra la main au bout d'un certain temps. Cette erreur sera consignée dans votre server-status et dans md-status. Vous devrez alors tenter de comprendre pourquoi votre configuration ne fonctionne pas.

top

Directive MDCertificateAgreement

Description:Acceptation des conditions d'utilisation de l'autorité de certification.
Syntaxe:MDCertificateAgreement accepted
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Lorsque vous utilisez mod_md pour obtenir un certificat, vous devenez un client de l'autorité de certification (par exemple Let's Encrypt). Cela signifie que vous devez lire et approuver leurs conditions d'utilisation, et donc que vous avez compris ce qu'ils ont à offrir, ce qu'ils ne fournissent pas, et ce que vous devez vous-même fournir. mod_md ne peut pas de lui-même procéder à cet agrément à votre place.

top

Directive MDCertificateAuthority

Description:L'URL du service ACME de l'autorité de certification.
Syntaxe:MDCertificateAuthority url
Défaut:MDCertificateAuthority https://acme-v02.api.letsencrypt.org/directory
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

L'URL à laquelle l'autorité de certication offre son service ACME.

Let's Encrypt propose actuellement quatre URLs pour accéder à ce service. Deux pour la version précédente du protocole ACME, communément appelé ACMEv1, et deux pour la version de la RFC 8555 nommée ACMEv2.

Chaque version possède deux modes de fonctionnement : un mode production et un mode test. Le mode test est identique au mode production, à la différence près que le certificat ne sera pas reconnu par les navigateurs. Il est aussi beaucoup plus souple quant aux limitations en performances. Il permet de tester de manière répétée le service sans pour autant bloquer votre serveur.

Configuration pour le mode test de Let's Encrypt

MDCertificateAuthority https://acme-staging-v02.api.letsencrypt.org/directory
top

Directive MDCertificateFile

Description:Définit un fichier de certificat statique pour le domaine géré.
Syntaxe:MDCertificateFile path-to-pem-file
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive s'utilise dans une section MDomainSet et permet de spécifier le nom du fichier qui contiendra le certificat pour le domaine géré. La clé correspondante est spécifiée via la directive MDCertificateKeyFile.

Exemple

<MDomain mydomain.com>
  MDCertificateFile /etc/ssl/my.cert
  MDCertificateKeyFile /etc/ssl/my.key
</MDomain>

Cette directive est équivalente à la directive SSLCertificateFile de mod_ssl. Elle s'utilise dans de nombreuses applications.

Une première application est la migration de la gestion des certificats d'un domaine existant depuis le mode statique via des fichiers vers le mode automatique via Let's Encrypt. A cet effet, vous définissez tout d'abord la section MDomainSet dans laquelle vous spécifiez les fichiers, puis supprimez la directive SSLCertificateFile de la configuration de vos serveurs virtuels.

Avec cette configuration, votre serveur fonctionnera comme avant, avec probablement moins de lignes répétitives. Vous pouvez alors ajouter la directive MDRenewMode avec pour valeur "always", et le module obtiendra un nouveau cerificat avant que celui du fichier considéré n'arrive à expiration. Une fois le certificat renouvelé, vous pouvez supprimer la directive MDCertificateFile et recharger la configuration.

Une autre application est le renouvellement de vos certificats Let's Encrypt avec d'autres clients ACME comme l'excellent certbot. A cet effet, faites pointer vos domaines gérés vers les fichiers de certbot et ils travaillerons alors ensemble.

top

Directive MDCertificateKeyFile

Description:Définit une clé privée statique pour le certificat statique.
Syntaxe:MDCertificateKeyFile path-to-file
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive s'utilise dans une section MDomainSet et permet de spécifier le nom du fichier contenant la clé privée pour le domaine géré. Le certificat correspondant est spécifié via la directive MDCertificateFile.

Cette directive est équivalente à la directive SSLCertificateKeyFile de mod_ssl.

top

Directive MDCertificateProtocol

Description:Le protocole à utiliser avec l'autorité de certification.
Syntaxe:MDCertificateProtocol protocol
Défaut:MDCertificateProtocol ACME
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive permet de spécifier le protocole à utiliser. Pour l'heure, seul le protocole ACME est supporté.

top

Directive MDCertificateStatus

Description:Extrait les informations publiques du certificat au format JSON.
Syntaxe:MDCertificateStatus on|off
Défaut:MDCertificateStatus on
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Lorsque cette directive est à "on", vous disposez d'une ressource pour les domaines gérés à https://domain/.httpd/certificate-status qui renvoie un document au format JSON contenant une liste de propriétés concernant les clés, le certificat courant et, s'il est disponible, le certificat renouvelé.

Exemple

{
  "valid-until": "Thu, 29 Aug 2019 16:06:35 GMT",
  "valid-from": "Fri, 31 May 2019 16:06:35 GMT",
  "serial": "03039C464D454EDE79FCD2CAE859F668F269",
  "sha256-fingerprint": "1ff3bfd2c7c199489ed04df6e29a9b4ea6c015fe8a1b0ce3deb88afc751e352d"
  "renewal" : { ...renewed cert information... }
}
top

Directive MDChallengeDns01

Description:
Syntaxe:MDChallengeDns01 path-to-command
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive permet de définir le programme à appeler lorsque la vérification "dns-01" doit être générée/détruite. Le programme prend respectivement comme arguments "setup" ou "teardown" suivi du nom de domaine. Pour "setup", le programme prend comme argument supplémentaire les données de vérification "dns-01".

Tant que la méthode de vérification "http:" ou "https:" est valable, vous n'avez pas besoin de définir cette directive. Cependant, Let's Encrypt n'accepte que "dns-01" comme méthode de vérification valide pour les certificats génériques. Si vous avez besoin d'un tel certificat, vous devez alors définir cette directive.

Reportez vous à la section sur les certificats génériques pour plus de détails.

top

Directive MDDriveMode

Description:Ancien nom de MDRenewMode.
Syntaxe:MDDriveMode always|auto|manual
Défaut:MDDriveMode auto
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive est l'ancien nom de la directive MDRenewMode, et n'est encore supportée qu'à titre de compatibilité ascendante.

top

Directive MDHttpProxy

Description:Spécifie un serveur mandataire pour les connexions sortantes.
Syntaxe:MDHttpProxy url
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive permet de spécifier un serveur http mandataire pour se connecter à l'autorité de certification. Vous devez la définir si votre serveur web ne peut atteindre internet que via un serveur mandataire.

top

Directive MDMember

Description:Nom d'hôte additionnel pour le domaine géré.
Syntaxe:MDMember hostname
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Plutôt que de lister tous les noms DNS sur la même ligne, vous pouvez utiliser la directive MDMember pour ajouter des noms d'hôte à un domaine géré.

Exemple

<MDomain example.org>
    MDMember www.example.org
    MDMember mail.example.org
</MDomain>

Si vous utilisez cette directive au niveau de la configuration globale, en dehors de tout serveur virtuel correspondant à un domaine géré, vous ne pouvez spécifier qu'une valeur, 'auto' ou 'manual' comme mode par défaut pour tous les autres domaines gérés. Voir la directive MDomain pour une description de ces valeurs.

top

Directive MDMembers

Description:Définit si les alias de noms de domaines sont automatiquement ajoutés.
Syntaxe:MDMembers auto|manual
Défaut:MDMembers auto
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive permet de définir si les valeurs de ServerName et ServerAlias sont automatiquement ajoutées en tant que membres d'un domaine géré.

top

Directive MDMessageCmd

Description:Gère les évènements pour les domaines gérés
Syntaxe:MDMessageCmd path-to-cmd optional-args
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive permet de définir la commande à appeler lorsqu'un des évènements "renewed", "expiring" ou "errored" se produit pour un domaine géré. La commande sera probablement invoquée pour d'autres évènements dans le futur et ignorera les évènements pour lesquels elle n'aura pas été préparée.

Il s'agit d'une version plus souple de la directive MDNotifyCmd.

Exemple

MDMessageCmd /etc/apache/md-message # sera invoquée sous la forme "/etc/apache/md-message renewed mydomain.com" # lorsqu'un nouveau certificat sera disponible pour le domaine mydomain.com

                

Le programme ne doit pas être bloquant car le module attend qu'il se termine. Un code de retour autre que 0 doit indiquer une erreur d'exécution.

"errored" n'est pas l'évènement à surveiller en priorité car le renouvellement du certificat est censé se produire suffisammant tôt pour éviter toute interruption de service.

L'évènement "expiring", quant à lui, doit être pris au sérieux. Il se produit lorsque la valeur de MDWarnWindow est atteinte. Par défaut, cette valeur correspond à 10% de la durée de vie du certificat, donc actuellement pour Let's Encrypt, 9 jours avant expiration du certificat. Le message d'avertissement est répété au plus une fois par jour.

top

Directive MDMustStaple

Description:Définit si les nouveaux certificats doivent avoir le drapeau OCSP Must Staple activé.
Syntaxe:MDMustStaple on|off
Défaut:MDMustStaple off
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive permet de définir si les nouveaux certificats doivent avoir le drapeau OCSP Must Staple activé ou non. Si un certificat possède ce drapeau, le serveur devra envoyer une réponse avec agrafage OCSP à chaque client. Ceci ne fonctionne que si vous configurez mod_ssl pour générer cette agrafe (voir la directive SSLUseStapling et ses directives dérivées).

top

Directive MDNotifyCmd

Description:Lance un programme lorsqu'un domaine géré est opérationnel.
Syntaxe:MDNotifyCmd path [ args ]
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive permet de définir un programme à lancer lorsqu'un domaine géré a obtenu ou renouvelé son certificat. Ce programme reçoit le nom de domaine géré concerné comme argument additionnel (après les paramètres spécifiés ici). Il doit renvoyer un code d'état de 0 s'il s'est exécuté avec succès.

top

Directive MDomain

Description:Définit une liste de noms de domaines qui appartiennent à un groupe.
Syntaxe:MDomain dns-name [ other-dns-name... ] [auto|manual]
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Tous les domaines de la liste seront gérés par mod_md comme un seul domaine géré (Managed Domain - MD). mod_md ne demandera qu'un seul certificat qui sera valide pour tous ces noms de domaine. Cette directive s'utilise au niveau de la configuration globale (voir plus loin les autres directives MD). Si un domaine nécessite une configuration particulière, utilisez la directive <MDomainSet>.

Deux définitions supplémentaires sont nécessaires pour un domaine géré : ServerAdmin et MDCertificateAgreement. L'adresse électronique du ServerAdmin permet de s'enregistrer auprès de l'autorité de certification (par défaut Let's Encrypt). L'autorité de certification l'utilisera pour vous informer à propos du statut de vos certificats ou d'éventuelles modifications de ses services.

La seconde définition, MDCertificateAgreement doit avoir pour valeur "accepted". Vous confirmez ainsi que vous acceptez les conditions d'utilisation du CA.

Exemple

ServerAdmin mailto:admin@example.org
MDCertificateAgreement accepted
MDomain example.org www.example.org

<VirtualHost *:443>
    ServerName example.org
    DocumentRoot htdocs/root

    SSLEngine on
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.org
    DocumentRoot htdocs/www

    SSLEngine on
</VirtualHost>

En plus de la liste des domaines gérés, cette directive accepte un paramètre supplémentaire qui peut prendre pour valeur 'manual' ou 'auto'. Ce paramètre permet de définir si un domaine sera géré sous le nom spécifié dans la liste seul ('manual'), ou si tous les noms du serveur virtuel correspondant seront gérés ('auto'). C'est d'ailleurs cette dernière valeur qui est la valeur par défaut.

Exemple

MDomain example.org

<VirtualHost *:443>
    ServerName example.org
    ServerAlias www.example.org
    DocumentRoot htdocs/root

    SSLEngine on
</VirtualHost>

MDomain example2.org auto

<VirtualHost *:443>
    ServerName example2.org
    ServerAlias www.example2.org
    ...
</VirtualHost>

Dans cet exemple, le domaine 'www.example.org' est automatiquement ajouté à la liste MD 'example.org'. De manière similaire, le domaine 'www.example2.org' sera automatiquement ajouté à la liste MD 'example2.org' pour laquelle 'auto' est explicitement spécifié. Chaque fois que vous ajouterez des noms à ces serveurs virtuels via ServerAlias, ils seront ajoutés à la liste MD correspondante.

Si vous préférez déclarer explicitement tous les noms de domaines, utilisez le mode 'manual'. Une erreur sera enregistrée dans le journal si les noms ne correspondent pas à ceux attendus.

top

Directive <MDomainSet>

Description:Conteneur de directives à appliquer à un ou plusieurs domaines gérés.
Syntaxe:<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive est équivalente à la directive MDomain avec la possibilité supplémentaire d'ajouter des paramètres seulement pour le domaine géré considéré. En fait, vous pouvez aussi utiliser "<MDomain ..>" à titre de raccourci.

Cette directive permet de configurer un domaine géré en spécifiant un autre CA, ou d'autres paramètres de renouvellement des certificats, etc...

Exemple

<MDomain sandbox.example.org>
    MDCertificateAuthority   https://someotherca.com/ACME
</MDomain>

Cette configuration est souvent utilisée pour définir des paramètres https: spécifiques à votre domaine.

Exemple

<MDomain example.org>
    MDRequireHttps temporary
</MDomain>
top

Directive MDPortMap

Description:Mappage des ports externes avec les ports internes pour vérifier à qui appartient le domaine.
Syntaxe:MDPortMap map1 [ map2 ]
Défaut:MDPortMap http:80 https:443
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Le protocole ACME propose deux méthodes pour vérifier à qui appartient le domaine via HTTP : la première utilise les URLs en "http:" (port 80) et la deuxième les URLs en "https:" (port 443). Si votre serveur n'est accessible sur aucun de ces ports, ACME ne pourra fonctionner que si vous configurez votre serveur DNS de manière adéquate (voir la directive MDChallengeDns01).

Sur la plupart des serveurs publics, "http:" arrive sur le port 80 et "https:" sur le port 443. Ce module vérifie les ports sur lesquels votre serveur Apache est en écoute et suppose qu'ils sont disponibles. Autrement dit, si votre serveur n'est pas en écoute sur le port 80, le module suppose que les requêtes en "http:" en provenance d'internet ne seront pas traitées.

Ce raisonnement est légitime, mais il peut s'avérer faux. Par exemple, même si votre serveur est effectivement en écoute sur le port 80, votre pare-feu peut bloquer ce dernier. "http:" ne sera alors disponible que sur votre intranet. Dans ce cas, le module va supposer de manière erronée que Let's Encrypt peut effectuer des vérifications en "http:" avec votre serveur. Ces dernières échouerons car elles auront été rejetées par votre pare-feu.

Exemple

MDPortMap http:- https:8433

L'exemple précédent montre comment spécifier que les requêtes en "http:" en provenance d'internet n'arriveront jamais. En outre, il indique que les requêtes en "https:" arriveront sur le port 8433.

Cette définition peut s'avérer nécessaire si vous faites de la redirection de port ; votre serveur peut ainsi être accessible depuis l' Internet sur le port 443, alors que le port local utilisé par httpd sera différent. Par exemple, votre serveur peut n'être en écoute que sur les ports 8443 et 8000, mais accessible depuis internet sur les ports 443 et 80.

top

Directive MDPrivateKeys

Description:Définit le type et la taille des clés privées générées.
Syntaxe:MDPrivateKeys type [ params... ]
Défaut:MDPrivateKeys RSA 2048
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive permet de définir les paramètres de construction des clés privées pour les domaines gérés. Seule la valeur 'RSA' est à l'heure actuelle supportée pour le paramètre type, et le paramètre params spécifie la nombre de bits utilisés pour la clé.

La recommandation actuelle (en 2017) est de 2048 bits au minimum, et une valeur inférieure ne sera pas acceptée. Des valeurs supérieures offriront une plus grande sécurité mais seront plus gourmandes en ressources, et augmenteront donc la charge de votre serveur, ce qui pourra (ou non) être gênant pour vous.

D'autres types de clés seront supportés dans le futur.

Exemple

MDPrivateKeys RSA 3072

Notez que cette directive n'aura d'effet que sur les nouvelles clés. Toute clé préexistante ne sera pas affectée. En outre, seules les clés privées générées pour les certificats sont concernées, les clés de comptes ACME n'étant pas affectées.

top

Directive MDRenewMode

Description:Contrôle le renouvellement des certificats.
Syntaxe:MDRenewMode always|auto|manual
Défaut:MDRenewMode auto
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

En mode "auto" (mode par défaut), le module va agir de la manière la plus opportune pour chaque domaine géré. Si un domaine ne possède pas de certificat, le module en demandera un à l'autorité de certification.

Si par contre vous avez défini un domaine géré qui n'est utilisé par aucun serveur virtuel, le module n'effectuera aucune demande de renouvellement. De même, pour les domaines gérés avec des fichiers de certificats statiques (voir MDCertificateFile), le module supposera que vous avez votre propre source et n'effectuera aucune demande de renouvellement.

Avec le mode "always", le module renouvellera les certificats des modules gérés, même s'il ne sont pas utilisés ou possèdent un fichier de certificats statique.

A l'opposé, avec le mode "manual", mod_md n'effectuera aucune demande automatique de renouvellement pour aucun domaine géré.

top

Directive MDRenewWindow

Description:Définit le moment auquel un certificat doit être renouvelé.
Syntaxe:MDRenewWindow duration
Défaut:MDRenewWindow 33%
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Lorsqu'un certificat arrive à expiration, mod_md va tenter d'en obtenir un nouveau signé.

Normalement, les certificats ont une validité de 90 jours, et mod_md les renouvelle lorsqu'il leur reste 33% de durée de vie (soit 30 jours pour une durée de vie de 90 jours). Si cela ne correspond pas à ce que vous souhaitez, vous pouvez spécifier une autre valeur comme dans les exemples suivants :

Exemple

# 21 jours avant expiration
MDRenewWindow 21d 
# 30 secondes (peut-être un peu juste !)
MDRenewWindow 30s
# lorsqu'il reste 10% de durée de vie au certificat
MDRenewWindow 10%

En mode pilotage automatique, le module va vérifier le statut des domaines gérés au moins toutes les 12 heures pour voir s'il y a quelque chose à faire. En cas d'erreur, par exemple lorsque le CA est inaccessible, il va dans un premier temps réessayer après quelques secondes. Si l'erreur persiste, il va réduire son intervalle de vérification de 12 à 1 heure.

top

Directive MDRequireHttps

Description:Redirige le trafic http: vers https: pour les domaines gérés.
Syntaxe:MDRequireHttps off|temporary|permanent
Défaut:MDRequireHttps off
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive facilite la migration de vos domaines gérés de http: vers https:. Dans l'exemple suivant,

Exemple

MDRequireHttps temporary

vous indiquez que vous désirez que pour l'instant, tout le trafic via des URLs en http: doit être redirigé vers des URLs en https:. Cette directive est sans risque et vous pouvez la désactiver à tout moment.

Ce qui suit par contre, a des conséquences : si vous souhaitez que les clients n'utilisent plus d'URLs en http:, spécifiez :

Permanent (pour au moins 6 mois !)

MDRequireHttps permanent

Cette directive a deux effets :

  1. Toutes les requêtes pour une ressource en http: sont redirigées vers la même requête en remplaçant le protocole http: par https: et en renvoyant le code d'état 301. Ce dernier indique aux clients que cette modification est permanente et qu'ils doivent mettre à jour leurs liens en conséquence.
  2. Toutes les réponses aux requêtes en https: comporteront l'en-tête Strict-Transport-Security avec une durée de vie de six mois. Cela indique au navigateur qu'il ne devra jamais utiliser http: (pendant six mois) lorsqu'il formulera une requête pour le domaine concerné. Avec cette information, les navigateurs refuseront de contacter votre site en mode non chiffré. Ceci interdit à des middlewares malicieux de dégrader les connexions et d'écouter/manipuler le trafic. C'est une bonne chose, mais cette configuration ne peut pas être désactivée aussi simplement que la configuration temporaire ci-dessus.

Vous pouvez obtenir le même résultat de manière simple avec mod_alias et une configuration basée sur la directive Redirect. Si vous le faites vous-même, assurez-vous d'exclure les chemins /.well-known/* de votre redirection, sinon mod_md aura des difficultés pour signer les nouveaux certificats.

Si vous effectuez cette configuration au niveau global, elle s'appliquera à tous les domaines gérés. Si vous souhaitez qu'elle ne s'applique qu'à un domaine spécifique, utilisez :

Exemple

<MDomain xxx.yyy>
  MDRequireHttps temporary
</MDomain>
top

Directive MDServerStatus

Description:Définit si les informations à propos des domaines gérés sont ajoutés ou non à server-status.
Syntaxe:MDServerStatus on|off
Défaut:MDServerStatus on
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Le gestionnaire d'Apache "server-status" vous permet de configurer une ressource pour monitorer le fonctionnement du serveur. Cette ressource inclut maintenant une section indiquant tous les domaines gérés avec leur nom DNS, l'état de renouvellement du certificat, la durée de vie de ce dernier, ainsi que d'autres propriétés fondamentales.

Cette directive permet d'activer/désactiver cette ressource.

top

Directive MDStoreDir

Description:Chemin dans le système de fichiers local du répertoire où seront stockées les données à propos des domaines gérés.
Syntaxe:MDStoreDir path
Défaut:MDStoreDir md
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Cette directive permet de définir le répertoire dans le système de fichiers local où seront stockées les données à propos des domaines gérés. Il s'agit d'un chemin absolu ou relatif à la racine du serveur. Par défaut, le répertoire "md" sera créé à la racine de votre serveur.

Si vous souhaitez changer de répertoire et si ce dernier contient déjà des données, copiez tout d'abord les données vers le nouveau répertoire, puis modifier la configuration et redémarrez le serveur. Si vous commencez par modifier la configuration et redémarrer le serveur sans copier les données, ce dernier croira que les certificats sont absents et il tentera d'en obtenir de nouveaux.

top

Directive MDWarnWindow

Description:Définit la fenêtre de temps pendant laquelle vous serez informé de l'expiration prochaine d'un certificat.
Syntaxe:MDWarnWindow duration
Défaut:MDWarnWindow 10%
Contexte:configuration globale
Statut:Expérimental
Module:mod_md

Voir la directive MDRenewWindow pour une description de la méthode à employer pour spécifier cette durée.

Le module inspecte la durée de vie restante des certificats et invoque MDMessageCmd lorsqu'une de ces durées devient inférieure à la fenêtre de temps spécifiée. Si l'on conserve la valeur par défaut, cette durée correspond à 9 jours pour les certificats de Let's Encrypt.

Cette directive s'applique aussi aux domaines gérés via des fichiers de certificats statiques (voir la directive MDCertificateFile).

Langues Disponibles:  en  |  fr 

top

Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.