=head1 NOM =encoding utf8 stunnel - tunnel SSL universel =head1 SYNOPSIS =over 4 =item B B S<[fichier]> | S<-fd [n]> | S<-help> | S<-version> | S<-sockets> =item B B S<[fichier]> | S<-install> | S<-uninstall> | S<-help> | S<-version> | S<-sockets> =back =head1 DESCRIPTION Le programme B est conçu pour fonctionner comme une couche de chiffrement I entre des clients distants et des serveurs locaux (I-démarrables) ou distants. Le concept est qu'à partir de daemons non-SSL présents sur le système, on peut facilement les configurer pour communiquer avec des clients sur des liens sécurisés SSL. B peut être utilisé pour ajouter des fonctionnalités SSL à des daemons classiques I tels que les serveurs POP-2, POP-3 et IMAP, à d'autres autonomes tels que NNTP, SMTP et HTTP, ainsi que pour tunneliser PPP sur des sockets réseau sans modification du code source. Ce produit inclut du code de chiffrement écrit par Eric Young (eay@cryptsoft.com) =head1 OPTIONS =over 4 =item B<[fichier]> Utilisation du fichier de configuration spécifié. =item B<-fd [n]> (Unix seulement) Lecture du fichier de configuration depuis le descripteur de fichier indiqué. =item B<-help> Affiche le menu d'aide de B. =item B<-version> Affiche la version de B et les options de compilation. =item B<-sockets> Affiche les options socket par défaut. =item B<-install> (NT/2000/XP seulement) Installe un service NT. =item B<-uninstall> (NT/2000/XP only) Désinstalle un service NT. =back =head1 FICHIER DE CONFIGURATION Chaque ligne du fichier de configuration peut être soitE: =over 4 =item * une ligne vide (ignorée)E; =item * un commentaire commençant par «E#E» (ignoré)E; =item * une paire «Eoption = valeurE»E; =item * «E[service_name]E» indiquant le début de la définition d'un serviceE; =back =head2 OPTIONS GLOBALES =over 4 =item B = répertoire Répertoire des autorités de certification (CA) C'est le répertoire dans lequel B cherche les certificats si l'on utilise I. Les certificats doivent être dénommés selon la forme XXXXXXXX.0, où XXXXXXXX est la valeur de hachage du certificat. Le cas échéant, le répertoire I est relatif au répertoire I. =item B = fichier Fichier d'autorités de certification Ce fichier, utilisé avec I, contient plusieurs certificats de CA. =item B = fichier Fichier de chaîne de certificats PEM Une PEM est toujours nécessaire en mode serveur. En mode client, cette option utilise cette PEM comme une chaîne côté client. L'utilisation de certificats côté client est optionnelle. Les certificats doivent être au format PEM et triés par ordre de niveau décroissant (CA racine en premier). =item B = répertoire (Unix seulement) Répertoire de chroot du processus B B enferme B dans une cellule chroot. I, I, I et I sont situés à l'intérieur de la cellule et les répertoires doivent être relatifs au répertoire correspondant. Pour que le contrôle de libwrap (wrappeur TCP) soit effectif dans un environnement chroot, il faut aussi y recopier leurs fichiers de configuration (/etc/hosts.allow et /etc/hosts.deny). =item B = listes de chiffre Sélection des chiffres SSL autorisés Liste délimitée par deux-points («E:E») des chiffres autorisés pour la connexion SSL. ExempleE: DES-CBC3-SHA:IDEA-CBC-MD5 =item B = yes | no Mode client (Le service distant utilise SSL) Par défautE: no (mode server) =item B = répertoire Répertoire des listes de révocation de certificats (CRL) C'est le répertoire dans lequel B recherche les CRL avec l'option I. Les CRL doivent être dénommés selon la forme XXXXXXXX.0 où XXXXXXXX est la valeur de hachage de la CRL. Le cas échéant, le répertoire I est relatif au répertoire I. =item B = fichier Fichier de listes de révocation de certificats (CRL) Ce fichier, utilisé avec I, contient plusieurs CRL. =item B = [facilité.]niveau niveau de déverminage Le niveau est un nom ou un numéro conforme à ceux de syslogE: emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6) ou debug (7). Toutes les traces du niveau indiqué et des niveaux numériquement inférieurs seront affichées. B ou B donneront le maximum d'informations. La valeur par défaut est notice (5). La facilité syslog «EdaemonE» est utilisée, sauf si un autre nom est spécifié (Win32 ne permet pas l'usage des facilités.) La casse est ignorée, aussi bien pour la facilité que pour le niveau. =item B = chemin (Unix seulement) Emplacement du socket du daemon de recueil d'entropie (EGD - Entropy Gathering Daemon) Socket EGD à utiliser pour alimenter le générateur d'aléatoires de OpenSSL (disponible seulement si la compilation a été effectuée avec OpenSSL 0.9.5a ou supérieur). =item B = yes | no (Unix seulement) Mode avant-plan Reste en avant-plan (sans fork) et dirige la trace sur stderr au lieu de syslog (sauf si B est spécifié). Par défaultE: arrière-plan en mode daemon. =item B = fichier Fichier de clef privée pour le certificat spécifié par I La clef privée est nécessaire pour authentifier le titulaire du certificat. Puisque ce fichier doit rester secret, il ne doit être lisible que par son propriétaire. Sur les systèmes Unix, on peut utiliser la commande suivanteE: chmod 600 fichier Par défaultE: Valeur de I =item B = Options_SSL Options de la bibliothèque OpenSSL Le paramètre est l'option OpenSSL décrite dans la page de man I, débarassée du préfixe I. Plusieurs I peuvent être spécifiées. Par exemple, pour la compatibilité avec l'implantation SSL défaillante d'Eudora, on peut utiliserE: options = DONT_INSERT_EMPTY_FRAGMENTS =item B = fichier Ajoute la trace à la fin d'un fichier au lieu d'utiliser syslog. /dev/stdout peut être utilisé pour afficher les traces sur la sortie standard (par exemple pour les traiter avec les outils splogger). =item B = fichier (Unix seulement) Emplacement du fichier pid Si l'argument est vide, aucun fichier ne sera créé. Le cas échéant, le chemin I est relatif au répertoire I. =item B = nombre Nombre d'octets à lire depuis les fichiers de «EselE» aléatoire Avec les SSL de version inférieure à 0.9.5a, détermine aussi le nombre d'octets considérés comme suffisants pour «EsalerE» le PRNG. Les versions plus récentes d'OpenSSL ont une fonction intégrée qui détermine lorsque l'aléatoire est suffisant. =item B = fichier chemin du fichier de données de «EselE» aléatoire La bibliothèque SSL utilise prioritairement les données de ce fichier pour «EsalerE» le générateur d'aléatoire. =item B = yes | no Recouvre les fichiers de «EselE» avec de nouvelles données aléatoires. Par défautE: yes =item B = nom Définit le nom de service à utiliser B:> nom de service du mode I pour la bibliothèque TCP Wrapper. Par défautE: stunnel =item B = timeout Timeout du cache de session =item B = nom (Unix seulement) Nom de groupe utilisé en mode daemon (les éventuels autres noms de groupe attribués sont supprimés) =item B = nom (Unix seulement) Nom d'utilisateur utilisé en mode daemon =item B = a|l|r:option=valeur[:valeur] Configure une option de socket accept (a), locale (l) ou distante (r) Les valeurs de l'option linger sontE: l_onof:l_linger. Les valeurs de l'option time sontE: tv_sec:tv_usec. ExemplesE: socket = l:SO_LINGER=1:60 définit un délai d'une minute pour la clôture des sockets locaux socket = r:SO_OOBINLINE=yes Place directement les données hors-bande dans le flux de réception des sockets distants socket = a:SO_REUSEADDR=no désactive la réutilisation d'adresses (activée par défaut) socket = a:SO_BINDTODEVICE=lo limite l'acceptation des connexions sur la seule interface de bouclage =item B = yes | no (WIN32 seulement) active l'icône de la barre de tâches Par défautE: yes =item B = niveau Vérifie le certificat du correspondant niveau 1 - vérifie le certificat s'il est présent niveau 2 - vérifie le certificat niveau 3 - contrôle le correspondant avec le certificat local Par défaut - pas de vérification =back =head2 OPTIONS DE SERVICE Chaque section de configuration commence par le nom du service entre crochets. Celui-ci est utilisé par le contrôle d'accès de libwrap (TCP Wrappers) et sert à distinguer les services B dans les fichiers de traces. Si l'on souhaite utiliser B en mode I (lorsqu'un socket lui est fourni par un serveur comme I, I ou I), il faut se reporter à la section I plus bas. =over 4 =item B = [hôte:]port Accepte des connexions sur le port spécifié Si l'hôte n'est pas indiqué, le port est ouvert pour toutes les adresses IP de la machine locale. =item B = [hôte:]port Se connecte au port distant indiqué Par défaut, l'hôte est localhost. =item B = yes | no Retarde la recherche DNS pour l'option «EconnectE» =item B = chemin_exécutable (Unix seulement) Exécute un programme local de type inetd Le cas échéant, le chemin I est relatif au répertoire I. =item B = $0 $1 $2 ... (Unix seulement) Arguments pour I, y compris le nom du programme ($0) Les quotes ne peuvent actuellement pas être utilisées. Les arguments sont séparés par un nombre quelconque d'espaces. =item B = nom Applique le contrôle d'identité d'utilisateur IDENT (RFC 1413) =item B = hôte Adresse IP de l'interface de sortie utilisée pour les connexions distantes. Cette option permet de relier une adresse statique locale. =item B = protocole Négocie avec SSL selon le protocole indiqué Actuellement gérésE: cifs, nntp, pop3, smtp =item B = yes | no (Unix seulement) Alloue un pseudo-terminal pour l'option «EexecE» =item B = secondes Durée d'attente de données =item B = secondes Durée d'attente du close_notify (mis à 0 pour MSIE qui est bogué) =item B = secondes Durée d'attente sur une connexion inactive =item B = yes | no (Unix seulement) Mode mandataire transparent Ré-écrit les adresses pour qu'elles apparaissent provenir de la machine client SSL plutôt que de celle qui exécute B. Cette option n'est disponible en mode local (option I) qu'avec la bibliothèque partagée LD_PRELOADing env.so shared library et en mode distant (option I) sur les noyaux Linux 2.2 compilés avec l'option I et seulement en mode serveur. Cette option ne se combine pas au mode mandataire (I) sauf si la route par défaut du client vers la cible passe par l'hôte qui fait tourner B, qui ne peut être localhost. =back =head1 VALEUR DE RETOUR B renvoie zéro en cas de succès, une autre valeur en cas d'erreur. =head1 EXEMPLES Pour encapsuler votre service I local avec SSLE: [imapd] accept = 993 exec = /usr/sbin/imapd execargs = imapd Pour tunneliser un daemon I sur le port 2020E: [vpn] accept = 2020 exec = /usr/sbin/pppd execargs = pppd local pty = yes Configuration de I pour utiliser B en mode I qui lance imapd à son tour (il ne doit pas y avoir de section I<[service_name]>)E: exec = /usr/sbin/imapd execargs = imapd =head1 FICHIERS =over 4 =item F Fichier de configuration de B =item F Certificat et clef privée de B =back =head1 BOGUES L'option I n'admet pas les quotes. =head1 RESTRICTIONS B ne peut être utilisé pour le daemon FTP en raison de la nature du protocole FTP qui utilise des ports multiples pour les transferts de données. Il existe cependant des versions SSL de FTP et de telnet. =head1 NOTES =head2 MODE INETD L'utilisation la plus commune de B consiste à écouter un port réseau et à établir une communication, soit avec un nouveau port avec l'option I, soit avec un programme avec l'option I. On peut parfois cependant souhaiter qu'un autre programme reçoive les connexions entrantes et lance B, par exemple avec I, I ou I. Si, par exemple, la ligne suivante se trouve dans IE: imaps stream tcp nowait root /usr/bin/stunnel stunnel /etc/stunnel/imaps.conf Dans ces cas, c'est le programme du genre I-style qui est responsable de l'établissement de la connexion (I ci-dessus) et de passer celle-ci à B. Ainsi, B ne doit alors avoir aucune option I. Toutes les I doivent être placées dans la section des options globales et aucune section I<[service_name]> ne doit être présente. Voir la section I pour des exemples de configurations. =head2 CERTIFICATS Chaque daemon à propriétés SSL doit présenter un certificat X.509 valide à son interlocuteur. Il a aussi besoin d'une clef privé pour déchiffrer les données entrantes. La méthode la plus simple pour obtenir un certificat et une clef est d'engendrer celles-ci avec le paquetage libre I. Plus d'informations sur la génération de certificats se trouvent dans les pages indiquées plus bas. Deux choses importantes lors de la génération de paires certificat-clef pour BE: =over 4 =item * la clef privée ne peut être chiffrée puisque le serveur n'a aucun moyen d'obtenir le mot de passe de l'utilisateurE; pour produire une clef non chiffrée, ajouter l'option I<-nodes> à la commande B de IE; =item * l'ordre du contenu du fichier I<.pem> est significatifE: il doit contenir d'abord une clef privée non chiffrée, puis un certificat signé (et non une demande de certificat). Il doit aussi y avoir des lignes vides après le certificat et après la clef privée. L'information textuelle ajoutée au début d'un certificat doit être supprimée afin que le fichier ait l'allure suivanteE: -----BEGIN RSA PRIVATE KEY----- [clef encodée] -----END RSA PRIVATE KEY----- [ligne vide] -----BEGIN CERTIFICATE----- [certificat encodé] -----END CERTIFICATE----- [ligne vide] =back =head2 ALEATOIRE B doit «EsalerE» le générateur de pseudo-aléatoires PRNG (pseudo random number generator) afin que SSL utilise un aléatoire de qualité. Les sources suivantes sont chargées dans l'ordre jusqu'à ce qu'une quantité suffisante de données soit lueE: =over 4 =item * le fichier spécifié par IE; =item * le fichier spécifié par la variable d'environnement RANDFILE, à défaut le fichier .rnd du répertoire $HOME de l'utilisateurE; =item * le fichier spécifié par «E--with-randomE» lors de la compilationE; =item * le contenu de l'écran (MS-Windows seulement)E; =item * le socket EGD spécifié par IE; =item * le socket EGD spécifié par «E--with-egd-sockE» lors de la compilationE; =item * le périphérique /dev/urandom. =back Avec un OpenSSL récent (>=OpenSSL 0.9.5a) le chargement de données s'arrête automatiquement lorsqu'un niveau d'entropie suffisant est atteint. Les versions précédentes continuent à lire toutes les sources puisqu'aucune fonction SSL ne leur permet de savoir que suffisamment de données sont disponibles. Sur les machines MS-Windows qui n'ont pas d'interaction utilisateur sur la console, (mouvements de souris, création de fenêtres, etc.), le contenu de l'écran n'est pas suffisamment changeant et il est nécessaire de fournir un fichier d'aléatoire par le biais de I. Le fichier spécifié par I doit contenir des informations aléatoires -- c'est-à-dire des informations différentes à chaque lancement de B. Cela est géré automatiquement sauf si l'option I est utilisée. Si l'on souhaite procéder manuellement à la mise à jour de ce fichier, la commande I des versions récentes d'OpenSSL sera sans doute utile. Note importanteE: si /dev/urandom est disponible, OpenSSL a l'habitude d'utiliser celui-ci pour «EsalerE» le PRNG même lorsqu'il contrôle l'état de l'aléatoireE; ainsi, même si /dev/urandom est dernier de la liste ci-dessus, il est vraisemblable qu'il soit utilisé s'il est présent. Ce n'est pas le comportement de B, c'est celui d'OpenSSL. =head1 VOIR AUSSI =over 4 =item L Service de contrôle d'accès pour les services internet =item L «Esuper-serveurE» internet =item F Page de référence de B =item F Site web du projet OpenSSL =back =head1 AUTEUR =over 4 =item Michał Trojnara > =back =head1 ADAPTATION FRANÇAISE =over 4 =item Bernard Choppy > =back