| <?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 : 1752104 --> |
| <!-- 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> |