CONFIG(5ssl) OpenSSL CONFIG(5ssl)

config — Fichiers de configuration de la bibliothèque OpenSSL CONF

Cette page documente la syntaxe des fichiers de configuration d'OpenSSL tels qu'ils sont analysés par NCONF_load(3) et les fonctions liées. Ce format est utilisé par de nombreuses commandes d'OpenSSL, ainsi que pour initialiser les bibliothèques lors de leur utilisation par une application.

La première partie décrit la syntaxe générale des fichiers de configuration et les sections suivantes décrivent les sémantiques des modules individuels. D'autres modules sont décrits dans fips_config(5) et x509v3_config(5). La syntaxe de la définition des valeurs d'ASN.1 est décrite dans ASN1_generate_nconf(3).

Un fichier de configuration est une série de lignes. Les lignes blanches et les espaces entre les éléments d'une ligne n'ont pas de signification. Un commentaire débute par le caractère # ; le reste de la ligne est ignoré. Si le # est le premier caractère (qui n'est pas un espace) dans une ligne, la ligne entière est ignorée.

Deux directives, .include et .pragma peuvent être utilisées pour contrôler l'analyse des fichiers de configuration.

Pour assurer une compatibilité avec les versions plus anciennes d'OpenSSL, un signe égal après la directive est ignoré. Les versions plus anciennes le traitent comme une affectation, aussi il faut prendre des précautions si la différence dans les sémantiques est importante.

Un fichier peut en inclure d'autres avec la syntaxe include :

.include [=] chemin

Si chemin est un fichier simple, ce fichier est inclus directement à cet emplacement. Les fichiers inclus peuvent avoir des affectations .include qui spécifient d'autres fichiers. Si chemin est un répertoire, tous les fichiers dans ce répertoire qui possèdent l'extension ".cnf" ou ".conf" seront inclus, (disponible seulement dans les systèmes qui gèrent les entrées-sorties POSIX). Les sous-directoires trouvés dans le chemin sont ignorés. De la même façon, si un fichier est ouvert pendant le balayage d'un répertoire et si ce fichier contient une directive .include qui spécifie un répertoire, elle est aussi ignorée.

Comme règle générale, le chemin devrait être un chemin absolu ; cela peut être imposé avec les directives abspath et includedir décrites plus loin. La variable d'environnement OPENSSL_CONF_INCLUDE, si elle existe, est ajoutée au début de tous les chemins relatifs. Si le chemin est encore relatif, il est interprété par rapport au répertoire de travail en cours.

Pour obliger toutes les inclusions de fichier à nommer des chemins absolus, utilisez la directive suivante :

.pragma [=] abspath:valeur

Le comportement par défaut, où la valeur est false ou off, est de permettre des chemins relatifs. Pour exiger que tous les chemins .include soient des chemins absolus, utilisez une valeur de true ou on.

Dans ces fichiers, le signe dollar, $, est utilisé pour référencer une variable, comme décrit ci-dessous. Sur certaines plateformes, néanmoins, il est courant de traiter $ comme un caractère normal dans les noms de symbole. La prise en charge de ce comportement peut être obtenu avec la directive suivante :

.pragma [=] dollarid:valeur

Le comportement par défaut, où la valeur est false ou off, est de traiter le signe dollar comme l'indication d'un nom de variable ; "toto$truc"' est interprété comme "toto" suivi par le développement de la variable "truc". Si la valeur est true ou on, "toto$truc" est un nom unique de sept caractères et les variables d'expansion doivent être spécifiées avec des accolades ou des parenthèses.

.pragma [=] includedir:valeur

Si un chemin relatif est spécifié dans la directive .include et si la variable d'environnement OPENSSL_CONF_INCLUDE n'existe pas, la valeur de la directive includedir, si elle existe, est ajoutée au début du chemin.

Un fichier de configuration est divisé en plusieurs sections. Une section commence par le nom de section entre crochets et se termine quand une autre section commence ou quand la fin du fichier est atteinte. Le nom de section peut contenir des caractères alphanumériques et des caractères de soulignement. Les espaces entre le nom et les crochets sont supprimés.

La première section d'un fichier de configuration est spéciale et est appelée la section par défaut (« default »), qui n’est généralement pas nommée et commence au début du fichier jusqu'à la première section nommée. Quand un nom est recherché, il est d'abord recherché dans la section en cours ou la section nommée, puis dans la section par défaut.

L'environnement est projeté dans une section appelée ENV.

Une section conporte une série d'assignations nom/valeur décrites plus en détail ci-dessous. Pour rappel, les crochets présents dans cet exemple sont obligatoires et non optionnels.

 [ section ]  nom_1 = valeur_1  nom_2 = autre_valeur  ...   [
nouvelle section ]  nom_1 = nouvelle valeur_1  nom_3 = valeur_3

La chaîne nom peut contenir des caractères alphanumériques ainsi que quelques symboles de ponctuation comme , . ; et _. L'espace après le nom et celui avant le signe égal sont ignorés.

Si le même nom existe dans la même section, toutes les valeurs sauf la dernière seront ignorées. Dans certaines circonstances telles qu'avec les noms uniques de certificat (« Certificate DN »), le même champ peut apparaître plusieurs fois. Afin de gérer cela, les commandes telles que openssl-req(1) ignorent tout texte initial précédé par un point .. Par exemple :

1.OU = Premier OU  2.OU = Second OU

La chaîne valeur est composée de la chaîne qui suit le caractère = jusqu'à la fin de la ligne avec tous les espaces de début et de fin supprimés.

La chaîne de la valeur est soumise à l'extension de variable. Le texte $var ou "${var}"' insère la valeur de la variable nommée à partir de la section en cours. Pour utiliser une valeur venant d'une autre section, utilisez $section::nom ou "${section::nom}". En utilisant $ENV::nom, la valeur de la variable d'environnement spécifiée sera substituée.

Les variables doivent être définies avant le référencement de leur valeur, autrement une erreur est signalée et le fichier n'est pas chargé. Cela peut être contourné en spécifiant une valeur par défaut dans la section par défaut (« default section ») avant l'utilisation de la variable.

Tout paramètre nom/valeur dans une section ENV est disponible pour le fichier de configuration, mais ne se propage pas dans l'environnement.

C'est une erreur si la valeur finit par avoir une longueur supérieure à 64 Ko.

Certains caractères peuvent être protégés à l'aide d'un guillemet simple ' ou double " autour de la valeur, ou du caractère barre oblique inversée \ avant le caractère. Si le dernier caractère d'une ligne est \, une chaîne valeur peut être répartie sur plusieurs lignes. De plus, les suites \n, \r, \b et \t sont reconnues.

Les règles d'expansion et de protection telles que décrites ci-dessus pour valeur s'appliquent aussi au chemin de la directive .include.

Les sections ci-dessous utilisent le terme informel de module pour faire référence à une partie des fonctions d'OpenSSL. Cette appellation n'est pas identique au terme formel module FIPS, par exemple.

La configuration d'OpenSSL recherche la valeur d'openssl_conf dans la section par défaut et la prend comme nom de la section qui spécifie comment configurer les modules dans la bibliothèque. Laisser un module dans sa configuration par défaut n'est pas une erreur. Une application peut spécifier un nom différent en appelant par exemple directement CONF_modules_load_file().

OpenSSL recherche aussi la valeur de config_diagnostics. Si elle existe et a une valeur numérique différente de zéro, toute erreur supprimant les signaux passés à CONF_modules_load() sera ignorée. C'est utile pour diagnostiquer les erreurs de configuration mais son usage en production exige une attention supplémentaire. Quand cette option est activée, une erreur de configuration empêche complètement l'accès à un service. Sans cette option, et en présence d'une erreur de configuration, l'accès sera permis, mais la configuration souhaitée ne sera pas utilisée.

 # Ceci doit être dans la section par défaut  config_diagnostics = 1 
openssl_conf = openssl_init   [openssl_init]  oid_section = oid 
providers = fournisseurs  alg_section = evp_properties  ssl_conf =
ssl_configuration  engines = moteurs  random = aléa   [oid] 
... nouveaux oid ...    [providers]  ... choses concernant le
fournisseur ...    [evp_properties]  ... propriétés d'EVP ...   
[ssl_configuration]  ... propriétés de la configuration SSL/TLS ...   
[engines]  ... propriétés du moteur ...    [random]  ... propriétés
de l'aléa ...

La sémantique de chacun des modules est décrite ci-dessous. La phrase « dans la section d'initialisation » fait référence à la section identifiée par openssl_conf ou un autre nom (comme openssl_init dans l'exemple ci-dessus). Les exemples ci-dessous partent du principe que la configuration ci-dessus est utilisée pour spécifier les sections individuelles.

Le nom oid_section dans la section d'initialisation désigne la section qui fournit les paires nom/valeur des identifiants d'objet (« OID »). Le nom est le nom court ; la valeur est un nom long facultatif suivi d'une virgule et de la valeur numérique. Même si certaines commandes OpenSSL possèdent leur propre section pour spécifier les OID, cette section les rend disponibles pour la totalité des commandes et des applications.

 [oid]  shortName = un très long nom d'oid = 1.2.3.4  nouvel_oid =
1.2.3.4  un_autre_oid = 1.2.3.5

Si une configuration complète comprenant le fragment ci-dessus est dans le fichier exemple.cnf, la ligne de commande suivante :

OPENSSL_CONF=exemple.cnf openssl asn1parse -genstr OID:1.2.3.4.1

produira :

0:d=0 hl=2 l= 4 prim: OBJECT :nouvel_oid1

montrant que l'OID « nouvel_oid1 » a été ajouté en tant que « 1.2.3.4.1 ».

Le nom providers dans la section d'initialisation désigne la section qui contient la configuration du fournisseur de chiffrement. Chacune des affectations nom/valeur dans cette section désigne un fournisseur et pointe vers la section de configuration correspondante. La section spécifique au fournisseur est utilisée pour indiquer comment charger le module, l'activer et définir d'autres paramètres.

Dans la section fournisseur, les noms suivants signifient :

Cela est utilisé pour spécifier un nom alternatif qui outrepasse le nom par défaut spécifié dans la liste des fournisseurs, par exemple :
 [providers]  toto = fournisseur_toto   [fournisseur_toto] 
identity = mon_module_fips
Spécifie le chemin du module à charger (habituellement une bibliothèque partagée).
S'il est présent et défini à une des valeurs yes, on, true ou 1, le fournisseur associé sera activé. À l'inverse, définir cette valeur à no, off, false ou 0 empêchera l'activation du fournisseur. Les réglages peuvent être donnés en minuscule ou en capitale. Définir activate à une autre valeur ou omettre une valeur de réglage aboutira à une erreur.

= item soft_load

Si activé, notifier à la bibliothèque de nettoyer la pile d'erreur en cas d'échec d'activation du fournisseur requis. Une valeur de 1, yes, true ou on (en minuscule ou en capitale) activera ce réglage, tandis qu'une valeur de 0, no, false, ou off (aussi en minuscule ou en capitale) désactivera ce réglage. Toute autre valeur produira une erreur. Notez que la valeur par défaut de ce réglage est off, s'il n'est pas fourni.

Tous les paramètres dans la section ainsi que dans les sous-sections sont disponibles pour le fournisseur.

Le fournisseur par défaut et son activation

Si aucun fournisseur n'est activé explicitement, celui par défaut le sera implicitement. Voir OSSL_PROVIDER-default(7) pour plus de détails.

Si vous ajoutez une section qui active explicitement un ou plusieurs autres fournisseurs, vous aurez probablement à activer explicitement le fournisseur par défaut, sinon il devient non disponible dans openSSL. Cela peut rendre le système indisponible à distance.

Le nom alg_section dans la section d'initialisation désigne la section qui contient les propriétés de l'algorithme lors de l'utilisation de l'API EVP.

Dans la section de propriétés de l'algorithme, les noms suivants signifient :

La valeur peut être n'importe quelle valeur autorisée comme chaîne de requête de propriété pour EVP_set_default_properties().
La valeur est booléenne et peut être yes ou no. Si la valeur est yes, c'est exactement l'équivalent de :
default_properties = fips=yes

Si la valeur est no, rien ne se passe. L'utilisation de ce nom est obsolète et, s'il est utilisé, ce doit être le seul nom de la section.

Le nom ssl_conf dans la section d'initialisation désigne la section qui contient la liste des configurations de SSL/TLS. Comme pour les fournisseurs, chaque nom dans cette section identifie une section avec la configuration correspondante. Par exemple :

 [ssl_configuration]  server = server_tls_config  client =
client_tls_config  system_default = tls_system_default  
[server_tls_config]  ... configuration pour les serveurs SSL/TLS ...  
 [client_tls_config]  ... configuration pour les clients SSL/TLS ...

Le nom de configuration system_default possède une signification particulière. S'il existe, il est appliqué chaque fois qu'un objet SSL_CTX est créé. Par exemple, pour imposer au niveau du système des versions minimales des protocoles TLS et DTLS.

[tls_system_default]  MinProtocol = TLSv1.2  MinProtocol = DTLSv1.2

Le protocole minimal de TLS est appliqué aux objets 1SSL_CTX basés sur TLS et le protocole minimal de DTLS est appliqué à ceux qui sont basés sur DTLS. Il en est de même pour les versions maximales définies par MaxProtocol.

Chaque section de configuration est constituée de paires nom/valeur qui sont analysées par SSL_CONF_cmd(3) appelé par SSL_CTX_config() ou SSL_config() de façon appropriée. Notez que tout caractère précédent un point initial dans la section de configuration est ignoré, de manière que la même commande peut être utilisée plusieurs fois. C'est probablement particulièrement utile pour charger différents types de clé, comme ceci :

 [server_tls_config]  RSA.Certificate = server-rsa.pem 
ECDSA.Certificate = server-ecdsa.pem

Le nom engines dans la section d'initialisation désigne la section qui contient la liste des configurations de MOTEUR. Comme pour les fournisseurs, chaque nom dans cette section identifie un moteur avec la configuration correspondante. La section spécifique au moteur est utilisée pour indiquer comment charger le moteur, l'activer et définir d'autres paramètres.

Dans une section moteur, les noms suivants signifient :

Ce nom est utilisé pour spécifier un nom alternatif qui outrepasse le nom par défaut spécifié dans la liste des moteurs. S'il est présent, il doit être en premier, par exemple :
 [engines]  toto = moteur_toto   [moteur_toto]  engine_id =
montoto
Ce nom charge et ajoute un MOTEUR à partir du chemin donné. C'est équivalent à l'envoi des contrôles SO_PATH avec l'argument de chemin suivi par LIST_ADD avec la valeur 2 et LOAD au MOTEUR dynamique. Si ce n'est pas le comportement voulu, des contrôles alternatifs peuvent être envoyés directement au MOTEUR dynamique en utilisant les commandes de contrôle.
Ce nom détermine s'il faut initialiser le MOTEUR. Si la valeur est 0, le MOTEUR ne sera pas initialisé ; si la valeur est 1, une tentative immédiate d’initialiser le MOTEUR est réalisée. Si la commande init n'est pas présente, alors une tentative d’initialiser le MOTEUR sera effectuée après le traitement de toutes les commandes de la section.
Ce nom définit les algorithmes par défaut qu’un MOTEUR fournira en utilisant la fonction ENGINE_set_default_string().

Tout autre nom est utilisé pour nommer la commande de contrôle envoyée au MOTEUR et la valeur est l'argument passé à la commande. La valeur particulière EMPTY signifie qu'aucune valeur n'est envoyée à la commande. Par exemple :

 [engines]  toto = moteur_toto   [moteur_toto]  dynamic_path =
/un/chemin/moteurtoto.so  un_ctrl = une_valeur  default_algorithms = ALL
 autre_ctrl = EMPTY

Le nom random dans la section d'initialisation désigne la section contenant la configuration du générateur de nombres aléatoires.

Dans la section aléa, les noms suivants ont la signification :

Ce nom est utilisé pour spécifier le générateur de bits aléatoires, par exemple :
[random]  random = CTR-DRBG

Les générateurs de bits aléatoires disponibles sont les suivants :

Le nom choisi spécifie le chiffrement un générateur de bits aléatoires CTR-DRBG utilisera. Les autres générateurs de bits aléatoires ignorent ce nom. La valeur par défaut est AES-256-CTR.
Ce nom spécifie quel condensé les générateurs de bits aléatoires HASH-DRBG ou HMAC-DRBG utiliseront. Les autres générateurs de bits aléatoires ignorent ce nom.
Ce nom définit la requête de propriété utilisée pour récupérer le générateur de bits aléatoires et les algorithmes sous-jacents.
Ce nom définit la source d'aléa à utiliser. Par défaut, SEED-SRC sera utilisé en dehors du fournisseur FIPS. Le fournisseur FIPS utilise des rappels pour accéder aux mêmes sources d'aléa en dehors des limites validées.
Ce nom définit la requête de propriété utilisée pour récupérer la source d'aléa.

Cet exemple montre comment utiliser les guillemets et les échappements.

 # Ceci est la section par défaut.  HOME = /temp  configdir =
$ENV::HOME/config   [ première_section ]  # Les guillemets permettent
des espaces au début et à la fin  any = « n'importe quel nom de variable »
 bidule = une chaîne qui peut \  s'étendre sur plusieurs lignes \ 
en incluant \\ des caractères  message = Bonjour tout le monde\n  
[ deuxième_section ]  salutation = $première_section::message

Cet exemple montre comment obtenir le développement des variables d'environnement de façon sûre. Dans l'exemple, la variable fichier_temporaire est censée se référer à un fichier temporaire, et la variable d'environnement TEMP ou TMP, si elle est présente, spécifie le répertoire où le fichier doit être placé. Dans la mesure où la section par défaut est vérifiée pour voir si la variable n'existe pas, il est possible de définir la valeur par défaut de TMP à /tmp et celle de TEMP à TMP.

Ces deux lignes doivent être dans la section par défaut.  TMP = /tmp 
TEMP = $ENV::TMP   # Cela peut être utilisé n'importe où  tmpfile =
${ENV::TEMP}/tmp.nom_fichier

Cet exemple montre comment faire appliquer le mode FIPS pour l'application exemple.

exemple = fips_config   [fips_config]  alg_section = evp_properties
 [evp_properties]  default_properties = "fips=yes"

Le chemin vers le fichier de configuration ou une chaîne vide pour aucun. Ignoré dans les programmes set-user-ID et set-group-ID.
Le chemin vers le répertoire des moteurs. Ignoré dans les programmes set-user-ID et set-group-ID.
Le chemin vers le répertoire des modules OpenSSL tels que les fournisseurs (provider). Ignoré dans les programmes set-user-ID et set-group-ID.
Le chemin optionnel à ajouter au début de tous les chemins .include.

Rien ne permet d'inclure des caractères à l'aide de la forme octale \nnn. Les chaînes sont toutes terminées par NULL, donc NULL ne peut pas faire partie de la valeur.

La protection par échappement n'est pas tout à fait correcte : si vous voulez utiliser des séquences d'échappement comme \n, vous ne pouvez pas utiliser de guillemets de protection sur la même ligne.

Le fait qu'un seul répertoire peut être ouvert et lu à la fois peut être considéré comme un bogue et il devrait être corrigé.

Une API non documentée, NCONF_WIN32(), utilisait un jeu de règles légèrement différentes destinées à être adaptées à la plateforme Windows de Microsoft. Plus précisément, le caractère barre oblique inversée n'était pas un caractère d'échappement et pouvait être utilisé dans les chemins, seuls les guillemets doubles étaient reconnus et les commentaires commençaient par un point-virgule. Cette fonction est obsolète depuis OpenSSL 3.0 ; les applications avec des fichiers de configuration qui utilisent cette syntaxe doivent être modifiées.

openssl-x509(1), openssl-req(1), openssl-ca(1), openssl-fipsinstall(1), ASN1_generate_nconf(3), EVP_set_default_properties(3), CONF_modules_load(3), CONF_modules_load_file(3), fips_config(5) et x509v3_config(5).

Copyright 2000-2023 Les auteurs du projet OpenSSL. Tous droits réservés.

Sous licence Apache 2.0 (la « Licence »). Vous ne pouvez utiliser ce fichier que conformément avec la Licence. Vous trouverez une copie dans le fichier LICENSE de la distribution du source ou à l'adresse https://www.openssl.org/source/license.html.

La traduction française de cette page de manuel a été créée par arne, tv, Montanes David <montanes.david@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, David Prévot <david@tilapin.org>, Celia Boudjemai <celisou2008@gmail.com> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.

28 avril 2024 3.3.0