\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{dim. mai 8 12:19:17 CEST 2016}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={OpenSSL - config},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Fichers de configuration de la librairie CONF},
CreationDate={D:20160508121917},
ModDate={D:20160508121917},
Keywords={PKI;sécurité;chiffrement;certificats}
}}
\begin{document}
 
\begin{center}
{\Huge OpenSSL - config }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Fichers de configuration de la librairie CONF}
 
\vspace{10mm}
 
\hspace{1mm}  La librairie CONF openssl peut être utilisée pour lire les fichiers de configuration. Elle est utilisée pour le fichier de configuration maître openssl.cnf et dans d'autres endroits comme dans les fichiers SPKAC et les fichiers d'extensions de certificat pour l'utilitaire x509. Les application openssl peuvent également utiliser la librairie CONF pour leur propre utilisation.
\vspace{5mm} \\
 
 
\hspace{1mm}  Un fichier de configuration est divisé en nombre de sections. Chaque section commence avec une ligne [ section\_name ] et se termine quand une nouvelle section commence.
\vspace{5mm} \\
 
 
\hspace{1mm}  La première section d'un fichier de configuration est spécial et est réferré à la section par défaut qui est généralement non nommée. Quand un nom est recherché il est d'abord recherché dans une section nommée, puis dans la section par défaut.
\vspace{5mm} \\
 
 
\hspace{1mm}  L'environnement est mappé en une section appelée ENV. Chaque section consiste d'un nombre de paire nom=valeur.
\vspace{5mm} \\
 
 
\hspace{1mm}  La valeur peut être étendue en utilisant la forme \$var ou \$\{var\}, qui substitue la valeur de la variable dans la section courante. Il est également possible de substituer une valeur d'une autre section en utilisant la syntaxe \$section::name ou \$\{section::name\}. En utilisant la forme \$ENV::name les variables d'environnement peuvent être substituées. Il est également possible d'assigner des valeurs aux variables d'environnement en utilisant le nom ENV::name, cela fonctionne si le programme recherche des variables d'environnement en utilisant la librairie CONF au lieu d'appeler getenv() directement.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Configuration de la librairie openssl }
 
\
 
\hspace{1mm}  Les application peuvent configurer automatiquement certains aspects d'openssl en utilisant le fichier de configuration maître, ou optionnellement un fichier de configuration alternatif. L'utilitaire openssl inclus cette fonctionnalité; toute sous-commande utilise le fichier de configuration maître sauf si une option est utilisée dans la sous commande pour utiliser un fichier de configuration alternatif.
\vspace{5mm} \\
 
 
\hspace{1mm}  Pour activer la configuration de librairie la section par défaut doit contenir la ligne appropriée qui pointe vers la section de configuration principale. Le nom par défaut est openssl\_conf qui est utilisé par l'utilitaire openssl. D'autres applications peuvent utiliser un nom alternatif
\vspace{5mm} \\
 
 
\hspace{1mm} La section de configuration devrait consister en un jeu de nom=valeur qui contient des informations spécifique au module. Le nom représente le nom du module de configuration et la valeur est spécifique au module. Par exemple:
 
{\ttfamily
openssl\_conf = openssl\_init\\ \texttt{[}openssl\_init\texttt{]}\\ oid\_section = new\_oids\\ engines = engine\_section\\ \hspace{2mm}\\ \texttt{[}new\_oids\texttt{]}\\ ... new oids here ...\\ \hspace{2mm}\\ \texttt{[}engine\_section\texttt{]}\\ ... engine stuff here ...\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Module de configuration d'objet ASN1 }
 
\
 
\hspace{1mm} Ce module a le nom oid\_section. La valeur est le nom de la section contenant les paires de valeur d'OID. Bien que certains utilitaires openssl ont leur propre section d'objet ASN1, toutes ne l'ont pas. En utilisant le module de configuration d'objet ASN1 tout l'utilitaire openssl peut voir les nouveaux objets. Par exemple:
 
{\ttfamily
\texttt{[}new\_oids\texttt{]}\\ some\_new\_oid = 1.2.3.4\\ some\_other\_oid = 1.2.3.5\\
}
\vspace{8mm}
 
\hspace{1mm} Il est également possible de définir la valeur avec un nom long, suivi par une virgule et l'OID:
 
{\ttfamily
shortName = some object long name, 1.2.3.4\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Module de configuration engine }
 
\
 
\hspace{1mm}  Le module de configuration ENGINE a le nom des engines. La valeur pointe vers une section contenant les informations de configuration du moteur.
\vspace{5mm} \\
 
 
\hspace{1mm} Chaque section spécifique est utilisée pour définir les algorithmes par défaut, le chargement dynamique, d'initialisation et les contrôles envoyés. par exemple:
 
{\ttfamily
\texttt{[}engine\_section\texttt{]}\\ \# Configure ENGINE named "foo"\\ foo = foo\_section\\ \# Configure ENGINE named "bar"\\ bar = bar\_section\\ \hspace{2mm}\\ \texttt{[}foo\_section\texttt{]}\\ ... foo ENGINE specific commands ...\\ \texttt{[}bar\_section\texttt{]}\\ ... "bar" ENGINE specific commands ...\\
}
\vspace{8mm}
 
\hspace{1mm} La commande engine\_id est utilisée pour donner le nom du moteur. par exemple:
 
{\ttfamily
\texttt{[}engine\_section\texttt{]}\\ \# This would normally handle an ENGINE named "foo"\\ foo = foo\_section\\ \hspace{2mm}\\ \texttt{[}foo\_section\texttt{]}\\ \# Override default name and use "myfoo" instead.\\ engine\_id = myfoo\\
}
\vspace{8mm}
 
\hspace{1mm}  La commande dynamic\_path charge et ajoute un engine. C'est équivalent au contrôle SO\_PATH avec la partie argument suivie par LIST\_ADD avec la valeur 2 et LOAD à l'engine dynamic.
\vspace{5mm} \\
 
 
\hspace{1mm}  La commande init détermine l'initialisation de l'engine. À 0 l'engine n'est pas initialisé. La commande default\_algorithms définis les algorithmes par défaut qu'un engin fournis en utilisant les fonctions ENGINE\_set\_default\_string().
\vspace{5mm} \\
 
 
\hspace{1mm} Si le nom match aucune des commande ci-dessus, il sont considérés comme des commandes ctrl qui sont envoyés à l'engine. La valeur de la commande est l'argument de la commande ctrl. Si la v+aleur est une chaîne vide aucune valeur n'est envoyée à la commande. par exemple:
 
{\ttfamily
\texttt{[}engine\_section\texttt{]}\\ \# Configure ENGINE named "foo"\\ foo = foo\_section\\ \hspace{2mm}\\ \texttt{[}foo\_section\texttt{]}\\ \# Load engine from DSO\\ dynamic\_path = /some/path/fooengine.so\\ \# A foo specific ctrl.\\ some\_ctrl = some\_value\\ \# Another ctrl that doesn't take a value.\\ other\_ctrl = EMPTY\\ \# Supply all default algorithms\\ default\_algorithms = ALL\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Module de configuration EVP }
 
\
 
\hspace{1mm} Ce module a le nom alg\_section qui pointe vers une section contenant les commandes algorithme. Actuellement la seule commande algorithme supportée est fips\_mode dont la valeur devrait être un booléen. par exemple:
 
{\ttfamily
alg\_section = evp\_settings\\ \hspace{2mm}\\ \texttt{[}evp\_settings\texttt{]}\\ fips\_mode = on\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Module de configuration ssl }
 
\
 
\hspace{1mm} Ce module a le nom ssl\_conf qui pointe vers une section contenant les configurations ssl. Chaque ligne dans la section contient le nom de la configuration et la section. Chaque section consiste de paires commande-valeur pour SSL\_CONF. Chaque paire sera passée à SSL\_CTX ou la structure SSL en cas d'appel SSL\_CTX\_config() ou SSL\_config() avec le nom de configuration approprié. Noter que tout caractère avant le point initial dans la section est ignoré donc la même commande peut être utilisée plusieurs fois:
 
{\ttfamily
ssl\_conf = ssl\_sect\\ \hspace{2mm}\\ \texttt{[}ssl\_sect\texttt{]}\\ server = server\_section\\ \hspace{2mm}\\ \texttt{[}server\_section\texttt{]}\\ RSA.Certificate = server-rsa.pem\\ ECDSA.Certificate = server-ecdsa.pem\\ Ciphers = ALL:!RC4\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Notes }
 
\
 
\hspace{1mm}  Si un fichier de configuration tente d'étendre une variable qui n'existe pas alors une erreur est flaggée et le fichier n'est pas chargé. Cela peut se produire si une variable d'environnement n'existe pas.
\vspace{5mm} \\
 
 
\hspace{1mm}  Cela peut fonctionner en incluant une section par défaut pour fournir une valeur par défaut: si la recherche d'environnement échoue, la valeur par défaut sera utilisée. Pour que cela fonctionne correctement la valeur par défaut doit être définie très tôt dans le fichier de configuration.
\vspace{5mm} \\
 
 
\hspace{1mm} Si la même variable existe dans la même section, seule la dernière est prise en compte. Sous certaines circonstances comme avec les DN le même champ peut être présent plusieurs fois:
 
{\ttfamily
1.OU = "My first OU"\\ 2.OU = "My Second OU"\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} Exemple de fichier de configuratio utilisant des fonctionnalités décrite plus haut:
 
{\ttfamily
HOME=/temp\\ RANDFILE= \$\{ENV::HOME\}/.rnd\\ configdir=\$ENV::HOME/config\\ \hspace{2mm}\\ \texttt{[} section\_one \texttt{]}\\ \# We are now in section one.\\ \# Quotes permit leading and trailing whitespace\\ any = " any variable name "\\ \hspace{2mm}\\ other = A string that can \textbackslash{}\\ cover several lines \textbackslash{}\\ by including \textbackslash{}\textbackslash{} characters\\ \hspace{2mm}\\ message = Hello World\textbackslash{}n\\ \hspace{2mm}\\ \texttt{[} section\_two \texttt{]}\\ greeting = \$section\_one::message\\
}
\vspace{8mm}
 
\hspace{1mm} L'exemple suivant montre come étendre les variables d'environnement. Supposont que l'on veut une variable tmpfile référrant à un fichier temporaire. Le répertoire où il est placé peut être déterminé par la variable d'environnement TEMP ou TMP, mais elle peut ne pas être définie. En incluant les noms des variables d'environnement sans que celle-ci n'existe créé une erreur en chargeant le fichier de configuration. En utilisant la section par défaut pour les 2 valeurs:
 
{\ttfamily
\# si TMP n'existe pas\\ TMP=/tmp\\ \# Si TMP existe\\ TEMP=\$ENV::TMP\\ tmpfile=\$\{ENV::TEMP\}/tmp.filename\\
}
\vspace{8mm}
 
\hspace{1mm} Exemple pour entrer en mode fips:
 
{\ttfamily
openssl\_conf = openssl\_conf\_section\\ \hspace{2mm}\\ \texttt{[}openssl\_conf\_section\texttt{]}\\ alg\_section = evp\_sect\\ \hspace{2mm}\\ \texttt{[}evp\_sect\texttt{]}\\ fips\_mode = yes\\
}
\vspace{8mm}
 
\hspace{1mm} Configuration plus complexe:
 
{\ttfamily
openssl\_conf = openssl\_conf\_section\\ \hspace{2mm}\\ \texttt{[}openssl\_conf\_section\texttt{]}\\ alg\_section = evp\_sect\\ oid\_section = new\_oids\\ \hspace{2mm}\\ \texttt{[}evp\_sect\texttt{]}\\ fips\_mode = no\\ \hspace{2mm}\\ \texttt{[}new\_oids\texttt{]}\\ \# New OID, just short name\\ newoid1 = 1.2.3.4.1\\ \# New OID shortname and long name\\ newoid2 = New OID 2 long name, 1.2.3.4.2\\
}
\vspace{8mm}
 
\hspace{1mm}  Les exemples ci-dessus peuvent être utilisées avec toute application utilisant la librairie si openssl\_conf est modifié pour correspondre au nom de l'application.
\vspace{5mm} \\
 
 
\hspace{1mm} Par exemple, si le second fichie d'exemple ci-dessus est sauvé dans example.cnf, la ligne de commande: \\
\hspace{1mm} \textbf{OPENSSL\_CONF=example.cnf openssl asn1parse -genstr OID:1.2.3.4.1} \\
\hspace{1mm} va afficher \\
\hspace{1mm} \textbf{0:d=0 hl=2 l= 4 prim: OBJECT :newoid1} \\
 
\vspace{1cm}{\huge BUGS }
 
\
 
\hspace{1mm}  Il n'y a actuellement aucun moyen d'utiliser des caractères en utilisant la notation octal \textbackslash{}nnn. Les chaînes sont toutes terminer par un caractère null, donc les nulls ne peuvent pas faire partie de la valeur. Les fichiers sont chargés en une seule passe. Cela signifie qu'une expansion de variable ne fonctionne que si les variables sont référencées très tôt dans le fichier.
\vspace{5mm} \\
 
\end{flushleft}
\end{document}
