Serveur HTTP Apache Version 2.5
Description: | Implémentation de la transparence des certificats (Certificat Transparency - RFC 6962) |
---|---|
Statut: | Extension |
Identificateur de Module: | ssl_ct_module |
Fichier Source: | mod_ssl_ct.c |
Ce module implémente la transparence des certificats en conjonction
avec mod_ssl
et les outils en ligne de commande du
projet open source certificate-transparency.
Le but de la transparence des certificats consiste à révéler
l'utilisation de certificats de confiance délivrés par
erreur ou dans un but malintentionné. Vous trouverez plus de détails à
propos de la transparence des certificats ici : http://www.certificate-transparency.org/.
Voici la signification des termes utilisés dans cette documentation :
logtout au long de ce document, est un service réseau auquel les certificats de serveurs sont soumis. Un agent utilisateur peut vérifier que le certificat d'un serveur auquel il accède a bien été soumis à un log auquel il fait confiance, et que le log lui-même n'a pas rencontré de problème avec ce certificat.
Cette implémentation pour Apache httpd fournit les fonctionnalités suivantes pout les serveurs et mandataires TLS :
La configuration des logs peut être définie statiquement au niveau de
la configuration du serveur web, ou enregistrée dans une base de données
SQLite3. Dans ce dernier cas, mod_ssl_ct
rechargera à
intervalles réguliers la base de données, de façon à ce que tout
changement dans la configuration de la maintenance et de la propagation
des logs pour un site spécifique ne nécessite pas de redémarrer httpd.
Les mécanismes de configuration, le format des données enregistrées pour l'audit hors ligne, ainsi que d'autres caractéristiques sont appelés à évoluer en fonction des tests et retours d'informations à venir.
Les serveurs doivent pouvoir envoyer les SCTs aux clients. Les SCTs seront envoyés sous la forme d'une extension de certificat ou au sein d'une réponse OCSP agrafée sans logique préprogrammée. Ce module gère l'envoi des SCTs configurés par l'administrateur ou en provenance des logs définis.
Le nombre de SCTs envoyés au cours de la phase ServerHello (c'est à
dire les SCTs autres que ceux inclus dans une extension de certificat
ou une réponse OCSP agrafée) peut être limité via la directive
CTServerHelloSCTLimit
.
Pour chaque certificat de serveur, un processus maintient une liste de SCTs à envoyer au cours de la phase ServerHello ; cette liste est créée à partir des SCTs configurés statiquement, mais aussi à partir de ceux reçus depuis les logs. Les logs marqués comme suspects ou arrivés à péremption seront ignorés. A intervalles réguliers, le processus va soumettre les certificats à un log selon les besoins (suite à un changement de configuration du log ou de sa durée de vie), et reconstruire la concaténation des SCTs.
La liste des SCTs pour un certificat de serveur sera envoyée au cours de la phase ClientHello, lorsque ce certificat de serveur particulier est utilisé, à tout client qui fait savoir qu'il supporte cette fonctionnalité.
Le serveur mandataire indique qu'il supporte la Transparence des Certificats au cours de la phase ClientHello en incluant l'extension signed_certificate_timestamp. Il peut reconnaître les SCTs reçus au cours de la phase ServerHello dans une extension du certificat du serveur original, ou au sein d'une réponse OCSP agrafée.
Une vérification en ligne est effectuée pour tout SCT reçu :
Si la vérification échoue ou renvoie un résultat négatif pour au
moins un SCT et si la directive CTProxyAwareness
est définie à
require, la tentative de connexion est abandonnée.
En outre, si la directive CTAuditStorage
est définie, la chaîne
de certification du serveur et les SCTs sont stockés pour une
vérification hors ligne.
A titre d'optimisation, la vérification en ligne et le stockage des données en provenance du serveur ne sont effectués que la première fois où un processus enfant du serveur web reçoit ces données, ce qui permet d'économiser du temps processeur et de l'espace disque. Dans le cas d'une configuration typique de mandataire inverse, seule une légère augmentation de la charge processeur sera induite.
Les serveurs et les mandataires utilisent des informations différentes en ce qui concerne les logs et leurs traitements. Cette configuration des logs peut être effectuée de deux manières :
ctlogconfig
et en
définissant le chemin vers cette base de données via la directive
CTLogConfig
.
mod_ssl_ct
relit la base de données à
intervalles réguliers ; cette méthode de configuration supporte donc
les mises à jour dynamiques. En outre, la commande d'audit hors
ligne ctauditscts
peut utiliser cette configuration pour
trouver l'URL des logs.CTStaticLogConfig
. Toute
modification de cette directive nécessitera alors un redémarrage du serveur
pour être prise en compte, comme pour toutes les autres directives.Les éléments de configuration pouvant être définis par l'une ou l'autre méthode sont les suivants :
En général, seuls quelque uns de ces éléments de configuration sont
définis pour un log donné. Pour plus de détails, veuillez vous référer
à la documentation de la directive CTStaticLogConfig
et de la commande
ctlogconfig
.
Le module mod_ssl_ct
permet de configurer les SCTs
de manière statique via la directive
CTStaticSCTs
. Ils doivent alors être sous une forme
binaire prête à être envoyée au client.
Vous trouverez dans le Dépôt ct-tools de Tom
Ritter un exemple de code sous la forme d'un script Python
(write-sct.py
) permettant de générer un SCT sous un
format correct avec des données en provenance d'un log.
Dans les deux modes mandataire et serveur, les variables
SSL_CT_PROXY_STATUS
et
SSL_CT_CLIENT_STATUS
sont définies et indiquent si le
serveur supporte les CTs.
Dans le mode mandataire, la variable
SSL_CT_PROXY_SCT_SOURCES
est définie pour indiquer si des
SCTs ont été reçus ainsi que leur source (phase ServerHello de la
connexion, extension de certificat, etc...).
Les valeurs de ces variables peuvent être journalisées via la
chaîne de format %{varname}e
de
mod_log_config
.
Le support de cette fonctionnalité en est au stade expérimental, et
est implémenté par la commande ctauditscts
, qui repose
elle-même sur l'utilitaire verify_single_proof.py
du
projet open source certificate-transparency. La commande
ctauditscts
peut parcourir des données, et ainsi effectuer
un audit hors ligne (activé via la directive CTAuditStorage
) en invoquant
l'utilitaire verify_single_proof.py
.
Voici quelques indication à l'état brut pour l'utilisation de
ctauditscts
:
requirements.txt
du projet
certificate-transparency, et exécuter les étapes suivantes
avec ce virtualenv activé.PYTHONPATH
de façon à inclure le
répertoire python
dans les chemins par défaut des
utilitaires du projet certificate-transparency.PATH
de façon à inclure le chemin du
répertoire python/ct/client/tools
.ctauditscts
avec comme
arguments la valeur de la directive
CTAuditStorage
, et éventuellement le chemin
de la base de données de configuration des logs. Cette dernière sera
utilisée pour extraire les URLs des logs en fonction de leurs
identifiants.Les données stockées à des fins d'audit peuvent aussi être
utilisées par d'autres programmes ; veuillez vous référer au code
source de ctauditscts
pour plus de détails à propos du
traitement des données.
Description: | Répertoire de stockage des données pour l'audit hors ligne |
---|---|
Syntaxe: | CTAuditStorage directory |
Défaut: | none |
Contexte: | configuration globale |
Statut: | Extension |
Module: | mod_ssl_ct |
La directive CTAuditStorage
permet de
définir le chemin du répertoire où les données destinées à un audit hors
ligne seront stockées. Ce répertoire doit exister au préalable. Si le
chemin contenu dans l'argument directory n'est pas absolu, il
sera considéré comme relatif au chemin défini par la directive
DefaultRuntimeDir
.
Si cette directive n'est pas définie, aucune donnée ne sera stockée en vue d'un audit hors ligne.
Le répertoire considéré contiendra des fichiers nommés
PID.tmp
pour les processus enfants actifs et
PID.out
pour les processus enfants terminés. Les
données disponibles pour un audit hors ligne sont donc contenues dans les
fichiers .out
. La commande expérimentale
ctauditscts
(située dans l'arborescence des sources de
httpd, mais non encore prise en compte par le processus
d'installation), fait appel aux utilitaires du projet
certificate-transparency pour effectuer l'audit.
Description: | Chemin de l'utilitaire client du log certificate-transparency |
---|---|
Syntaxe: | CTLogClient executable |
Défaut: | none |
Contexte: | configuration globale |
Statut: | Extension |
Module: | mod_ssl_ct |
executable est le chemin complet de l'utilitaire client du
log qui est normalement le fichier cpp/client/ct
(ou
ct.exe
) de l'arborescence des sources du projet open
source certificate-transparency.
Il est possible d'utiliser une implémentation alternative pour extraire les SCTs d'un certificat de serveur à partir du moment où l'interface de la ligne de commande est équivalente.
Si cette directive n'est pas définie, il n'est pas possible de soumettre les certificats aux logs pour en extraire les SCTs ; seuls les SCTs gérés par l'administrateur ou situés dans une extension de certificat seront alors fournis aux clients.
Description: | Base de données pour la configuration des logs avec mises à jour dynamiques |
---|---|
Syntaxe: | CTLogConfigDB filename |
Défaut: | none |
Contexte: | configuration globale |
Statut: | Extension |
Module: | mod_ssl_ct |
La directive CTLogConfigDB
permet de définir
le nom de la base de données contenant la configuration des logs
connus. Si le chemin contenu dans filename n'est pas absolu,
il est considéré comme relatif au chemin défini par la directive
ServerRoot
.
Veuillez vous référer à la documentation du programme
ctlogconfig
qui gère la base de données.
Description: | Age maximum d'un SCT obtenu depuis un log avant son raffraîchissement |
---|---|
Syntaxe: | CTMaxSCTAge num-seconds |
Défaut: | 1 jour |
Contexte: | configuration globale |
Statut: | Extension |
Module: | mod_ssl_ct |
Les certificats de serveur dont les SCTs sont supérieurs à cet âge maximum seront soumis à nouveau aux logs définis. En général, le log va renvoyer le même SCT que précédemment, mais ceux-ci font alors l'objet d'une opération de la part du log. Les SCTs seront raffraîchis autant que nécessaire au cours du fonctionnement normal du serveur, les nouveaux SCTs étant envoyés aux clients au fur et à mesure de leur disponibilité.
Description: | Niveau de prise en compte et de mise en oeuvre des CTs pour un mandataire |
---|---|
Syntaxe: | CTProxyAwareness oblivious|aware|require |
Défaut: | aware |
Contexte: | configuration globale, serveur virtuel |
Statut: | Extension |
Module: | mod_ssl_ct |
Cette directive permet de contrôler la prise en compte et les recherches de SCTs valides pour un mandataire. Les options disponibles sont les suivantes :
Description: | Répertoire où les SCTs sont stockés |
---|---|
Syntaxe: | CTSCTStorage directory |
Défaut: | none |
Contexte: | configuration globale |
Statut: | Extension |
Module: | mod_ssl_ct |
La directive CTSCTStorage
permet de définir
le nom du répertoire où les SCTs et listes de SCTs seront stockés. Si
le chemin contenu dans directory n'est pas absolu, il sera
considéré comme relatif au chemin défini par la directive DefaultRuntimeDir
.
Chaque certificat voit ses informations stockées dans un sous-répertoire qui lui est propre ; le nom de ce sous-répertoire correspond au hash SHA-256 du certificat considéré.
Les sous-répertoires propres à chaque certificat contiennent des SCTs en provenance des logs définis, des listes de SCTs préparées à partir des SCTs configurés statiquement et des SCTs extraits, ainsi que diverses informations utilisées pour gérer les SCTs.
Description: | Nombre maximum de SCTs pouvant être renvoyés au cours de la phase ServerHello |
---|---|
Syntaxe: | CTServerHelloSCTLimit limit |
Défaut: | 100 |
Contexte: | configuration globale |
Statut: | Extension |
Module: | mod_ssl_ct |
Cette directive permet de définir le nombre maximum de SCTs pouvant être renvoyés par un serveur TLS au cours de la phase ServerHello dans le cas où le nombre de logs définis et de SCTs définis statiquement est assez important.
En général, seuls quelques SCTs sont disponibles, cette directive n'est donc nécessaire que dans certaines circonstances particulières.
Cette directive ne tient pas compte des SCTs contenus dans les extensions de certificats ou les réponses OCSP agrafées.
Description: | Configuration statique d'un log |
---|---|
Syntaxe: | CTStaticLogConfig log-id|- public-key-file|-
1|0|- min-timestamp|- max-timestamp|-
log-URL|- |
Défaut: | none |
Contexte: | configuration globale |
Statut: | Extension |
Module: | mod_ssl_ct |
Cette directive permet de configurer un log particulier. Elle est
particulièrement appropriée dans les cas où cette configuration est
rarement modifiée. Si votre cas nécessite plutôt une configuration
dynamique, veuillez vous référer à la documentation de la directive
CTLogConfigDB
.
Chacun des six champs doit être renseigné, mais en général, la configuration d'un log nécessite peu d'information ; utilisez - lorsque vous ne disposez d'aucune information à spécifier pour un champ particulier. Par exemple, dans le cas d'une configuration de serveur simple (non mandataire), l'administrateur n'a besoin de spécifier que l'URL du log auquel soumettre des certificats de serveur afin d'en extraire les SCTs.
Les champs se définissent comme suit :
ServerRoot
.-
pour un des repères de
temps s'il n'est pas connu. Par exemple, lorsque vous définissez le
repère de temps minimum valide pour un log qui reste valide,
spécifiez -
pour
max-timestamp.
Description: | Configuration statique d'un ou plusieurs SCTs pour un certificat de serveur |
---|---|
Syntaxe: | CTStaticSCTs certificate-pem-file sct-directory |
Défaut: | none |
Contexte: | configuration globale |
Statut: | Extension |
Module: | mod_ssl_ct |
Cette directive permet de définir statiquement un ou plusieurs SCTs correspondant à un certificat de serveur. Ce mécanisme peut être utilisé à la place ou en complément de l'obtention dynamique des SCTs en provenance des logs. Toute modification dans le jeu de SCTs d'un certificat de serveur particulier sera prise en compte de manière dynamique sans avoir à redémarrer le serveur.
certificate-pem-file fait référence au fichier contenant
le certificat de serveur au format PEM. Si ce chemin n'est pas absolu,
il sera considéré comme relatif au chemin défini par la directive
ServerRoot
.
sct-directory doit contenir le chemin vers un ou plusieurs
fichiers possédant l'extension de nom de fichier .sct
,
représentant un ou plusieurs SCTs correspondant au certificat de
serveur. Si ce chemin n'est pas absolu,
il sera considéré comme relatif au chemin défini par la directive
ServerRoot
.
Si sct-directory est vide, aucun message d'erreur ne sera affiché.
Cette directive peut servir à identifier des répertoires de SCTs gérés par une autre infrastructure, sous réserve qu'ils soient enregistrés au format binaire avec l'extension de nom de fichier .sct.