| <?xml version="1.0" encoding="UTF-8"?> | |
| <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd"> | |
| <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?> | |
| <!-- $LastChangedRevision: 1752104 $ --> | |
| <!-- English Revision: 1933830 --> | |
| <!-- French translation : Lucien GENTIS --> | |
| <!-- $LastChangedRevision: 2017021901 $ --> | |
| <!-- | |
| Licensed to the Apache Software Foundation (ASF) under one or more | |
| contributor license agreements. See the NOTICE file distributed with | |
| this work for additional information regarding copyright ownership. | |
| The ASF licenses this file to You under the Apache License, Version 2.0 | |
| (the "License"); you may not use this file except in compliance with | |
| the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| --> | |
| <modulesynopsis metafile="mod_crypto.xml.meta"> | |
| <name>mod_crypto</name> | |
| <description>Support du chiffrement/déchiffrement symétrique</description> | |
| <status>Extension</status> | |
| <sourcefile>mod_crypto.c</sourcefile> | |
| <identifier>crypto_module</identifier> | |
| <compatibility>Disponible à partir de la version 2.5 du serveur HTTP Apache</compatibility> | |
| <summary> | |
| <p>Ce module permet de <strong>chiffrer et déchiffrer</strong> les données au | |
| niveau des piles de filtrage en entrée et en sortie.</p> | |
| <p>En particulier, il permet d'effectuer un <strong>chiffrement HLS à la | |
| volée</strong> comme décrit dans le document <a | |
| href="http://www.ietf.org/id/draft-pantos-http-live-streaming-19.txt">draft-pantos-http-live-streaming-19</a>.</p> | |
| <p>Mais il peut aussi assurer la livraison sécurisée de données via un CDN | |
| non sécurisé aux clients qui le supportent.</p> | |
| <p>Selon les besoins, on peut ajouter le filtre crypto à la pile de filtrage | |
| en entrée ou en sortie via les directives <directive | |
| module="core">SetInputFilter</directive>, <directive | |
| module="core">SetOutputFilter</directive>, <directive | |
| module="mod_mime">AddOutputFilter</directive> ou <directive | |
| module="mod_filter">AddOutputFilterByType</directive>.</p> | |
| </summary> | |
| <seealso><a href="../filter.html">Filtres</a></seealso> | |
| <section id="format"> | |
| <title>Format du flux de données</title> | |
| <p>Le flux de données chiffrées comporte un bloc IV optionnel suivi des | |
| données chiffrées avec l'algorithme de chiffrement choisi. Le bloc final est | |
| éventuellement complété par bourrage avant d'être écrit. La taille des blocs | |
| est déterminée par l'algorithme de chiffrement choisi.</p> | |
| <p>Lorsque le bloc IV est spécifié via la directive <directive | |
| module="mod_crypto">CryptoIV</directive>, il est utilisé, mais n'est pas | |
| injecté dans le flux d'entrée/sortie.</p> | |
| </section> | |
| <section id="config"> | |
| <title>Clés et blocs IV</title> | |
| <p>Les directives <directive module="mod_crypto">CryptoKey</directive> et | |
| <directive module="mod_crypto">CryptoIV</directive> acceptent comme | |
| arguments des valeurs binaires qui peuvent être spécifiées comme indiqué | |
| ci-après. Les bits les plus significatifs de ces valeurs sont utilisés, et | |
| si les valeurs sont trop petites, elles sont complétées par bourrage avec | |
| des bits à 0 par la gauche. | |
| </p> | |
| <dl> | |
| <dt>file:</dt><dd>La valeur est lue directement depuis le fichier spécifié.</dd> | |
| <dt>hex:</dt><dd>Interprète l'expression en tant que valeur hexadécimale qui | |
| peut contenir des caractères ':' comme séparateurs.</dd> | |
| <dt>decimal:</dt><dd>Interprète l'expression en tant que valeur décimale.</dd> | |
| <dt>base64:</dt><dd>Interprète l'expression en tant que valeur codée en | |
| base64.</dd> | |
| <dt>none</dt><dd>Aucune valeur n'est spécifiée.</dd> | |
| </dl> | |
| <p>Si le IV n'est pas spécifié, un IV aléatoire sera généré au cours du | |
| chiffrement et écrit comme premier bloc. Lors du déchiffrement, le premier | |
| bloc sera interprété en tant que IV. | |
| </p> | |
| <p>A l'exception du format file:, les directives <directive | |
| module="mod_crypto">CryptoKey</directive> et <directive | |
| module="mod_crypto">CryptoIV</directive> supportent la <a | |
| href="../expr.html">syntaxe des expressions</a> qui fournit plus de | |
| flexibilité pour définir les valeurs. Les clés et IVs peuvent ainsi être | |
| initialisées aléatoirement via des valeurs disponibles au niveau du serveur | |
| web comme REMOTE_USER ou l'URL. | |
| </p> | |
| </section> | |
| <section id="handler"> | |
| <title>Gestionnaire de clé de chiffrement</title> | |
| <p>Le gestionnaire <strong>crypto-key</strong> permet de fournir la clé aux | |
| clients autorisés qui le supportent sans avoir à stocker cette dernière dans | |
| l'arborescence du serveur web. La même <a href="../expr.html">syntaxe | |
| d'expression</a> peut ainsi être utilisée afin d'obtenir la clé pour les | |
| clients et pour le contenu chiffré.</p> | |
| <example><title>Gestionnaire de clé de chiffrement avec un fichier</title> | |
| <Location /key><br /> | |
| <indent> | |
| SetHandler crypto-key<br /> | |
| CryptoCipher aes128<br /> | |
| CryptoKey file:/path/to/file.key<br /> | |
| AuthType basic<br /> | |
| ...<br /> | |
| </indent> | |
| </Location><br /> | |
| </example> | |
| </section> | |
| <section id="hls"> | |
| <title>HTTP Live Streaming (HLS)</title> | |
| <p>Le protocole HLS supporte les flux chiffrés qui utilisent l'algorithme de | |
| chiffrement AES-128 et une clé correspondante. On autorise l'accès au flux | |
| en partageant la clé avec le client HLS en général via une connexion | |
| sécurisée.</p> | |
| <p>Le IV utilisé pour le chiffrement de chaque segment de media est spécifié | |
| dans HLS de deux manières :</p> | |
| <ul> | |
| <li> | |
| Spécifié explicitement via un attribut IV dans le tag EXT-X-KEY sous | |
| la forme d'une valeur <strong>hexadécimale</strong>. | |
| </li> | |
| <li> | |
| Spécifié implicitement en interprétant la valeur | |
| <strong>décimale</strong> du tag EXT-X-MEDIA-SEQUENCE. | |
| </li> | |
| </ul> | |
| <p>La valeur de la séquence de media est en générale incorporée dans les | |
| noms de segment de média et peut être recherchée en utilisant des | |
| expressions rationnelles nommées comme dans l'exemple ci-dessous. | |
| </p> | |
| <example><title>Exemple HLS - IV de la séquence de média</title> | |
| <LocationMatch (?<SEQUENCE>[\d]+)[^\d^/]+$><br /> | |
| <indent> | |
| SetOutputFilter ENCRYPT<br /> | |
| CryptoCipher aes128<br /> | |
| CryptoKey file:/path/to/file.key<br /> | |
| CryptoIV decimal:%{env:MATCH_SEQUENCE}<br /> | |
| </indent> | |
| </LocationMatch><br /> | |
| </example> | |
| </section> | |
| <directivesynopsis> | |
| <name>CryptoDriver</name> | |
| <description>Nom du pilote crypto à utiliser</description> | |
| <syntax>CryptoDriver name</syntax> | |
| <default>CryptoDriver openssl</default> | |
| <contextlist><context>server config</context> | |
| </contextlist> | |
| <usage> | |
| <p>La directive <directive module="mod_crypto">CryptoDriver</directive> | |
| permet de spécifier le nom du pilote crypto à utiliser. Un pilote recommandé | |
| par défaut est en général défini pour chaque plateforme. Les pilotes | |
| supportés sont <strong>openssl</strong>, <strong>commoncrypto</strong> et | |
| <strong>nss</strong>.</p> | |
| </usage> | |
| </directivesynopsis> | |
| <directivesynopsis> | |
| <name>CryptoCipher</name> | |
| <description>L'algorithme de chiffrement que le filtre crypto doit utiliser</description> | |
| <syntax>CryptoCipher name</syntax> | |
| <default>CryptoCipher aes256</default> | |
| <contextlist><context>server config</context> | |
| <context>virtual host</context> | |
| <context>directory</context> | |
| <context>.htaccess</context> | |
| </contextlist> | |
| <usage> | |
| <p>La directive <directive>CryptoCipher</directive> permet de spécifier | |
| l'algorithme de chiffrement à utiliser au cours des phases de chiffrement et | |
| de déchiffrement. L'algorithme de chiffrement par défaut est | |
| <code>aes256</code>.</p> | |
| <p>C'est le pilote crypto utilisé qui détermine l'étendue du choix des algorithmes de | |
| chiffrement parmi les valeurs possibles suivantes :</p> | |
| <ul><li>3des192</li><li>aes128</li><li>aes192</li><li>aes256</li></ul> | |
| </usage> | |
| </directivesynopsis> | |
| <directivesynopsis> | |
| <name>CryptoIV</name> | |
| <description>Le Vecteur d'Initialisation IV (Initialisation Vector) que le | |
| filtre crypto doit utiliser</description> | |
| <syntax>CryptoIV value</syntax> | |
| <default>CryptoIV none</default> | |
| <contextlist><context>server config</context> | |
| <context>virtual host</context> | |
| <context>directory</context> | |
| <context>.htaccess</context> | |
| </contextlist> | |
| <usage> | |
| <p>La directive <directive>CryptoIV</directive> permet de spécifier le IV | |
| (Initialisation Vector) pour l'espace d'URL considéré. Le IV peut être lu à | |
| partir d'un fichier ou défini via l'<a href="../expr.html">interpréteur | |
| d'expressions</a>, ce qui confère plus de souplesse aux scénarios de | |
| définition des clés.</p> | |
| <p>Les valeurs possibles peuvent être lues depuis un fichier ou exprimées | |
| sous une forme hexadécimale, décimale ou en base64 en fonction des préfixes | |
| suivants :</p> | |
| <ul><li>file:</li><li>hex:</li><li>decimal:</li><li>base64:</li></ul> | |
| <p>La valeur 'none' désactive la définition du IV. Dans ce cas, un IV | |
| aléatoire sera généré durant le chiffrement et inséré en tant que premier | |
| bloc ; au cours du déchiffrement, le premier bloc sera interprété comme bloc | |
| IV.</p> | |
| </usage> | |
| </directivesynopsis> | |
| <directivesynopsis> | |
| <name>CryptoKey</name> | |
| <description>Clé que le filtre crypto doit utiliser</description> | |
| <syntax>CryptoKey value</syntax> | |
| <default>CryptoKey none</default> | |
| <contextlist><context>server config</context> | |
| <context>virtual host</context> | |
| <context>directory</context> | |
| <context>.htaccess</context> | |
| </contextlist> | |
| <usage> | |
| <p>La directive <directive>CryptoKey</directive> permet de spécifier la clé | |
| de chiffrement/déchiffrement pour l'espace d'URL considéré. La clé peut être | |
| lue depuis un fichier ou défini via l'<a href="../expr.html">interpréteur | |
| d'expressions</a>, ce qui confère plus de souplesse aux scénarios de | |
| définition des clés.</p> | |
| <p>Les valeurs possibles peuvent être lues depuis un fichier ou exprimées | |
| sous une forme hexadécimale, décimale ou en base64 en fonction des préfixes | |
| suivants :</p> | |
| <ul><li>file:</li><li>hex:</li><li>decimal:</li><li>base64:</li></ul> | |
| <p>La valeur 'none' désactive la clé. Toute requête pour obtenir sans clé un fichier | |
| via les filtres ENCRYPT ou DECRYPT se soldera alors par un échec. </p> | |
| </usage> | |
| </directivesynopsis> | |
| <directivesynopsis> | |
| <name>CryptoSize</name> | |
| <description>Taille maximale en octets du tampon utilisé par le filtre crypto</description> | |
| <syntax>CryptoSize integer</syntax> | |
| <default>CryptoSize 131072</default> | |
| <contextlist><context>server config</context> | |
| <context>virtual host</context> | |
| <context>directory</context> | |
| <context>.htaccess</context> | |
| </contextlist> | |
| <usage> | |
| <p>La directive <directive module="mod_crypto">CryptoSize</directive> permet | |
| de spécifier la quantité de données en octets qui sera mise en tampon pour | |
| chaque requête avant d'être chiffrée ou déchiffrée. La valeur par défaut est | |
| 128 Ko.</p> | |
| </usage> | |
| </directivesynopsis> | |
| </modulesynopsis> |