1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
4 <!-- $LastChangedRevision: 1752104 $ -->
5 <!-- English Revision : 1752104 -->
6 <!-- French translation : Lucien GENTIS -->
7 <!-- $LastChangedRevision: 2017021901 $ -->
10 Licensed to the Apache Software Foundation (ASF) under one or more
11 contributor license agreements. See the NOTICE file distributed with
12 this work for additional information regarding copyright ownership.
13 The ASF licenses this file to You under the Apache License, Version 2.0
14 (the "License"); you may not use this file except in compliance with
15 the License. You may obtain a copy of the License at
17 http://www.apache.org/licenses/LICENSE-2.0
19 Unless required by applicable law or agreed to in writing, software
20 distributed under the License is distributed on an "AS IS" BASIS,
21 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22 See the License for the specific language governing permissions and
23 limitations under the License.
26 <modulesynopsis metafile="mod_crypto.xml.meta">
28 <name>mod_crypto</name>
29 <description>Support du chiffrement/déchiffrement symétrique</description>
30 <status>Extension</status>
31 <sourcefile>mod_crypto.c</sourcefile>
32 <identifier>crypto_module</identifier>
33 <compatibility>Disponible à partir de la version 2.5 du serveur HTTP Apache</compatibility>
36 <p>Ce module permet de <strong>chiffrer et déchiffrer</strong> les données au
37 niveau des piles de filtrage en entrée et en sortie.</p>
39 <p>En particulier, il permet d'effectuer un <strong>chiffrement HLS à la
40 volée</strong> comme décrit dans le document <a
41 href="http://www.ietf.org/id/draft-pantos-http-live-streaming-19.txt">draft-pantos-http-live-streaming-19</a>.</p>
43 <p>Mais il peut aussi assurer la livraison sécurisée de données via un CDN
44 non sécurisé aux clients qui le supportent.</p>
46 <p>Selon les besoins, on peut ajouter le filtre crypto à la pile de filtrage
47 en entrée ou en sortie via les directives <directive
48 module="core">SetInputFilter</directive>, <directive
49 module="core">SetOutputFilter</directive>, <directive
50 module="mod_mime">AddOutputFilter</directive> ou <directive
51 module="mod_filter">AddOutputFilterByType</directive>.</p>
54 <seealso><a href="../filter.html">Filtres</a></seealso>
57 <title>Format du flux de données</title>
59 <p>Le flux de données chiffrées comporte un bloc IV optionnel suivi des
60 données chiffrées avec l'algorithme de chiffrement choisi. Le bloc final est
61 éventuellement complété par bourrage avant d'être écrit. La taille des blocs
62 est déterminée par l'algorithme de chiffrement choisi.</p>
64 <p>Lorsque le bloc IV est spécifié via la directive <directive
65 module="mod_crypto">CryptoIV</directive>, il est utilisé, mais n'est pas
66 injecté dans le flux d'entrée/sortie.</p>
71 <title>Clés et blocs IV</title>
73 <p>Les directives <directive module="mod_crypto">CryptoKey</directive> et
74 <directive module="mod_crypto">CryptoIV</directive> acceptent comme
75 arguments des valeurs binaires qui peuvent être spécifiées comme indiqué
76 ci-après. Les bits les plus significatifs de ces valeurs sont utilisés, et
77 si les valeurs sont trop petites, elles sont complétées par bourrage avec
78 des bits à 0 par la gauche.
82 <dt>file:</dt><dd>La valeur est lue directement depuis le fichier spécifié.</dd>
83 <dt>hex:</dt><dd>Interprète l'expression en tant que valeur hexadécimale qui
84 peut contenir des caractères ':' comme séparateurs.</dd>
85 <dt>decimal:</dt><dd>Interprète l'expression en tant que valeur décimale.</dd>
86 <dt>base64:</dt><dd>Interprète l'expression en tant que valeur codée en
88 <dt>none</dt><dd>Aucune valeur n'est spécifiée.</dd>
91 <p>Si le IV n'est pas spécifié, un IV aléatoire sera généré au cours du
92 chiffrement et écrit comme premier bloc. Lors du déchiffrement, le premier
93 bloc sera interprété en tant que IV.
96 <p>A l'exception du format file:, les directives <directive
97 module="mod_crypto">CryptoKey</directive> et <directive
98 module="mod_crypto">CryptoIV</directive> supportent la <a
99 href="../expr.html">syntaxe des expressions</a> qui fournit plus de
100 flexibilité pour définir les valeurs. Les clés et IVs peuvent ainsi être
101 initialisées aléatoirement via des valeurs disponibles au niveau du serveur
102 web comme REMOTE_USER ou l'URL.
107 <section id="handler">
108 <title>Gestionnaire de clé de chiffrement</title>
110 <p>Le gestionnaire <strong>crypto-key</strong> permet de fournir la clé aux
111 clients autorisés qui le supportent sans avoir à stocker cette dernière dans
112 l'arborescence du serveur web. La même <a href="../expr.html">syntaxe
113 d'expression</a> peut ainsi être utilisée afin d'obtenir la clé pour les
114 clients et pour le contenu chiffré.</p>
116 <example><title>Gestionnaire de clé de chiffrement avec un fichier</title>
117 <Location /key><br />
119 SetHandler crypto-key<br />
120 CryptoCipher aes128<br />
121 CryptoKey file:/path/to/file.key<br />
125 </Location><br />
131 <title>HTTP Live Streaming (HLS)</title>
133 <p>Le protocole HLS supporte les flux chiffrés qui utilisent l'algorithme de
134 chiffrement AES-128 et une clé correspondante. On autorise l'accès au flux
135 en partageant la clé avec le client HLS en général via une connexion
136 sécurisée.</p>
138 <p>Le IV utilisé pour le chiffrement de chaque segment de media est spécifié
139 dans HLS de deux manières :</p>
143 Spécifié explicitement via un attribut IV dans le tag EXT-X-KEY sous
144 la forme d'une valeur <strong>hexadécimale</strong>.
147 Spécifié implicitement en interprétant la valeur
148 <strong>décimale</strong> du tag EXT-X-MEDIA-SEQUENCE.
152 <p>La valeur de la séquence de media est en générale incorporée dans les
153 noms de segment de média et peut être recherchée en utilisant des
154 expressions rationnelles nommées comme dans l'exemple ci-dessous.
157 <example><title>Exemple HLS - IV de la séquence de média</title>
158 <LocationMatch (?<SEQUENCE>[\d]+)[^\d^/]+$><br />
160 SetOutputFilter ENCRYPT<br />
161 CryptoCipher aes128<br />
162 CryptoKey file:/path/to/file.key<br />
163 CryptoIV decimal:%{env:MATCH_SEQUENCE}<br />
165 </LocationMatch><br />
171 <name>CryptoDriver</name>
172 <description>Nom du pilote crypto à utiliser</description>
173 <syntax>CryptoDriver name</syntax>
174 <default>CryptoDriver openssl</default>
175 <contextlist><context>server config</context>
179 <p>La directive <directive module="mod_crypto">CryptoDriver</directive>
180 permet de spécifier le nom du pilote crypto à utiliser. Un pilote recommandé
181 par défaut est en général défini pour chaque plateforme. Les pilotes
182 supportés sont <strong>openssl</strong>, <strong>commoncrypto</strong> et
183 <strong>nss</strong>.</p>
188 <name>CryptoCipher</name>
189 <description>L'algorithme de chiffrement que le filtre crypto doit utiliser</description>
190 <syntax>CryptoCipher name</syntax>
191 <default>CryptoCipher aes256</default>
192 <contextlist><context>server config</context>
193 <context>virtual host</context>
194 <context>directory</context>
195 <context>.htaccess</context>
199 <p>La directive <directive>CryptoCipher</directive> permet de spécifier
200 l'algorithme de chiffrement à utiliser au cours des phases de chiffrement et
201 de déchiffrement. L'algorithme de chiffrement par défaut est
202 <code>aes256</code>.</p>
204 <p>C'est le pilote crypto utilisé qui détermine l'étendue du choix des algorithmes de
205 chiffrement parmi les valeurs possibles suivantes :</p>
207 <ul><li>3des192</li><li>aes128</li><li>aes192</li><li>aes256</li></ul>
213 <name>CryptoIV</name>
214 <description>Le Vecteur d'Initialisation IV (Initialisation Vector) que le
215 filtre crypto doit utiliser</description>
216 <syntax>CryptoIV value</syntax>
217 <default>CryptoIV none</default>
218 <contextlist><context>server config</context>
219 <context>virtual host</context>
220 <context>directory</context>
221 <context>.htaccess</context>
225 <p>La directive <directive>CryptoIV</directive> permet de spécifier le IV
226 (Initialisation Vector) pour l'espace d'URL considéré. Le IV peut être lu à
227 partir d'un fichier ou défini via l'<a href="../expr.html">interpréteur
228 d'expressions</a>, ce qui confère plus de souplesse aux scénarios de
229 définition des clés.</p>
231 <p>Les valeurs possibles peuvent être lues depuis un fichier ou exprimées
232 sous une forme hexadécimale, décimale ou en base64 en fonction des préfixes
235 <ul><li>file:</li><li>hex:</li><li>decimal:</li><li>base64:</li></ul>
237 <p>La valeur 'none' désactive la définition du IV. Dans ce cas, un IV
238 aléatoire sera généré durant le chiffrement et inséré en tant que premier
239 bloc ; au cours du déchiffrement, le premier bloc sera interprété comme bloc
245 <name>CryptoKey</name>
246 <description>Clé que le filtre crypto doit utiliser</description>
247 <syntax>CryptoKey value</syntax>
248 <default>CryptoKey none</default>
249 <contextlist><context>server config</context>
250 <context>virtual host</context>
251 <context>directory</context>
252 <context>.htaccess</context>
256 <p>La directive <directive>CryptoKey</directive> permet de spécifier la clé
257 de chiffrement/déchiffrement pour l'espace d'URL considéré. La clé peut être
258 lue depuis un fichier ou défini via l'<a href="../expr.html">interpréteur
259 d'expressions</a>, ce qui confère plus de souplesse aux scénarios de
260 définition des clés.</p>
262 <p>Les valeurs possibles peuvent être lues depuis un fichier ou exprimées
263 sous une forme hexadécimale, décimale ou en base64 en fonction des préfixes
266 <ul><li>file:</li><li>hex:</li><li>decimal:</li><li>base64:</li></ul>
268 <p>La valeur 'none' désactive la clé. Toute requête pour obtenir sans clé un fichier
269 via les filtres ENCRYPT ou DECRYPT se soldera alors par un échec. </p>
274 <name>CryptoSize</name>
275 <description>Taille maximale en octets du tampon utilisé par le filtre crypto</description>
276 <syntax>CryptoSize integer</syntax>
277 <default>CryptoSize 131072</default>
278 <contextlist><context>server config</context>
279 <context>virtual host</context>
280 <context>directory</context>
281 <context>.htaccess</context>
285 <p>La directive <directive module="mod_crypto">CryptoSize</directive> permet
286 de spécifier la quantité de données en octets qui sera mise en tampon pour
287 chaque requête avant d'être chiffrée ou déchiffrée. La valeur par défaut est