%---DOCUMENT-------------------------------------------------------------------

\documentclass[a4paper,10pt]{article} 
\usepackage[french]{babel} 
\usepackage[T1]{fontenc} 

%---PACKAGES-------------------------------------------------------------------

\usepackage{makeidx} \makeindex
\usepackage[Lenny]{fncychap}				% Lenny, Conny ,Bjarne, Rejne, Glenn, Sonny
\usepackage{fancyhdr}
\usepackage{eurosym}
\usepackage{lastpage}
\usepackage{a4wide}
\usepackage[french]{minitoc}
\usepackage[hmargin=1cm,vmargin=2cm]{geometry}
\usepackage{listings} % a inclure pour la fonction listing

%---SORTIES--------------------------------------------------------------------

\newif\ifpdf

\ifx\pdfoutput\undefined
   \pdffalse
\else 
   \ifnum\pdfoutput=0
      \pdffalse
   \else
      \pdfoutput=1 \pdftrue
   \fi
\fi


%---PDF------------------------------------------------------------------------

\ifpdf
\usepackage[pdftex]{graphicx, color}
\usepackage{color} % on en a besoin pour utiliser les couleurs
\definecolor{grey}{rgb}{0.95,0.95,0.95} % on définit la couleur grise pour les listing (c'est un gris très clair)
\graphicspath{{images/}}
\DeclareGraphicsExtensions{.jpg,.png}
\pdfcompresslevel=9
\usepackage{pslatex}

\usepackage[pdftex, 					% Paramétrage de la navigation
bookmarks = true, 						% Signets
bookmarksnumbered = true, 		% Signets numérotés
pdfpagemode = None, 					% None, UseThumbs, UseOutlines, Fullscreen
pdfstartview = FitH, 					% FitH, FitV, FitR, FitB, FitBH, FitBV, Fit
pdfpagelayout = OneColumn, 		% SinglePage, OneColumn, TwoColumnLeft, TwoColumnRight
colorlinks = false, 					% Liens en couleur
urlcolor = black, 						% Couleur des liens externes
pdfborder = {0 0 0} 					% Style de bordure : ici, rien
]{hyperref}

\hypersetup{ 									
pdfauthor = {Olivier DOSSMANN}, 							% Auteurs
pdftitle = {TP2 : SSL, la couche transport sécurisée},	 					% Titre du document
pdfsubject = {Mettre en place un service web sécurisé}, % Sujet
pdfkeywords = {latex,pdf,ssl,certificat,apache,bsd,free,unix,iut,illkirch,s51}, 						% Mots-clefs
pdfcreator = {vim, pdflatex}, 						% Logiciel qui a crée le document
pdfproducer = {*} 							% Société ayant produit le logiciel
plainpages = false}
\usepackage{pdfpages}

%---DVI------------------------------------------------------------------------

\else
\usepackage{graphicx}
\graphicspath{{eps/}}
\newcommand{\url}[1]{\emph{#1}}
\newcommand{\href}[2]{\emph{#2}[1]}
\fi

%---EN-TETE-ET-PIED-DE-PAGE----------------------------------------------------

\renewcommand{\headrulewidth}{0.5pt}
\renewcommand{\footrulewidth}{0.5pt}
\pagestyle{fancy}

%\lhead{}
%\chead{}
%\rhead{}
\lfoot{Crée avec \LaTeX}
%\cfoot{}
\rfoot{TP2}

%---PAGE-DE-GARDE--------------------------------------------------------------

\title{TP2 : SSL, la couche transport sécurisée}
\author{Olivier DOSSMANN}
\date{2008-01-13}

%---COLOR---------------------------------------------------------------------

%\pagecolor{}
%\color{}

%---DEBUT-DU-DOCUMENT----------------------------------------------------------

\begin{document}
\maketitle
\thispagestyle{fancy}

%Pour les codes de développement
\lstset{numbers=left, tabsize=2, frame=single, breaklines=true, basicstyle=\ttfamily,numberstyle=\tiny\ttfamily, framexleftmargin=13mm, backgroundcolor=\color{grey}, xleftmargin=12mm}

%Table des matières
\tableofcontents

%---EXEMPLE-DE-SECTION/SOUS-SECTION--------------------------------------------
%\section{Introduction}
%\section{Titre 1}
%\subsection{Sous-section 1}

%---EXEMPLE-DE-LISTE-NUMEROTEE-------------------------------------------------
%\begin{enumerate}
%\item Choix 1
%\item Choix 2
%\end{enumerate}

%---EXEMPLE-DE-LISTE-NON-NUMEROTEE---------------------------------------------
%\begin{itemize}
%\item Objet 1
%\item Objet 2
%\end{itemize}

%---IMAGE----------------------------------------------------------------------
%\begin{figure}[!htbp] %h = here, t = top, b = bottom et p = page (special)
%	\centering
%	\includegraphics[width=8cm]{gconfs.jpg}
%	\caption{Logo de l'Association GCONFS}
%\end{figure}

Dans un monde actuellement pieds et poings liés aux technologies Web, il est monnaire courante de rencontrer de plus en plus d'entreprises mettant en place des serveurs Web.\par
Pour cela ils utilisent toutes sortes de systèmes d'exploitations et de serveurs Web. Nous nous occuperons, dans ce TP2, de l'utilisation d'un système BSD, muni d'un serveur Apache, mais également d'un système de contrôle à distance : SSH. Par suite nous nous attacherons à l'utilisation de modssl, permettant d'affubler d'un certificat SSL en surcouche à notre serveur Apache.

\section {Configuration de SSH sur la machine FreeBSD}
Nous travaillons avec un système FreeBSD 6.2. Il est utile de pouvoir le contrôler à distance, ainsi il faut mettre en place un démon SSH, puis se connecter au travers un tunnel SSH pour vérifier le bon fonctionnement du service. Mais avant tout, pensons à configurer le réseau.

\subsection{Configuration du réseau}
La commande \textit{ifconfig} renseigne les caractéristiques des cartes réseaux. Nous vérifions ainsi le nom de la carte réseau principale : \textbf{lnc0}.\\
\begin{lstlisting}

localhost# ifconfig
lnc0: flags=108843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
        inet 192.168.113.170 netmask 0xffffff00 broadcast 192.168.113.255
        ether 00:0c:29:5e:49:94
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
localhost#
\end{lstlisting}

Pour tester, nous utilisons \textit{dhclient lnc0}. Il faut alors revérifier avec la commande \textit{ifconfig} pour nous apercevoir de la réelle efficacité de l'attribution par DHCP.\par
Maintenant le réseau fonctionnel, il ne reste plus qu'à automatiser l'attribution d'une IP par DHCP. Allons dans le fichier \textbf{rc.conf} : \textit{vi /etc/rc.conf} et ajoutons y la ligne \textit{ifconfig\_lnc0="DHCP"}. Nous avons également besoin d'avoir un nom d'hôte pour la suite du TP, ajoutons donc \textit{hostname="localhost"}.\par
A partir de là nous avons déjà un bon début. Nous ne nous occupons pas de renseigner le fichier \textit{/etc/resolv.conf} pour les DNS, étant donné qu'à l'IUT nous passons par un proxy pour atteindre l'internet. Cependant il est judicieux d'ajouter la variable locale \textbf{HTTP\_PROXY}. Pour cela nous éditons le fichier \textit{/root/.bashrc}, auquel nous ajoutons la ligne suivante : \textit{setenv HTTP\_PROXY http://130.79.80.33:8080}. De la sorte nous aurons toujours le proxy pour l'utilisateur root. Nous pourrions aussi ajouter cette ligne dans le fichier \textit{/etc/profile} pour que chacun des utilisateurs ait cette variable initialisée. Mais nous n'en ferons rien, puisque cela ne nous sert pas actuellement.\par
Tentons désormais d'utiliser le serveur SSH, déjà installé sur FreeBSD 6.2 (dans mes souvenirs en tout cas).

\subsection{Configuration, lancement et utilisation de SSH}
Comme SSH semble avoir été déjà installé, il suffit de configurer, de lancer, puis d'utiliser le démon.\par
Tout d'abord nous éditons à l'aide de VIM (précédemment compilé par nos soins) le fichier de configuration de SSHD, à savoir \textit{/etc/ssh/sshd\_config}. Afin d'accepter les connexions ROOT, nous ajoutons / décommentons : \textit{PermitRootLogin yes}. SSH est configuré pour ce que nous en faisons du moins.\par
Pour mettre en service le démon SSH, c'est à dire SSHD, il suffit de lancer la commmande : \textit{/etc/rc.d/sshd start}. Pour vérifier nous tapons \textit{netstat -a}, ce qui renvoie une liste bien fournie.\\

\begin{lstlisting}

localhost# netstat -a
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
tcp4       0      0  192.168.113.170.ssh    192.168.113.1.2943     ESTABLISHED
tcp4       0      0  *.ssh                  *.*                    LISTEN
tcp6       0      0  *.ssh                  *.*                    LISTEN
tcp4       0      0  *.*                    *.*                    CLOSED
tcp46      0      0  *.8080                 *.*                    LISTEN
udp4       0      0  *.syslog               *.*
udp6       0      0  *.syslog               *.*
Active UNIX domain sockets
Address  Type   Recv-Q Send-Q    Inode     Conn     Refs  Nextref Addr
c1ae771c stream      0      0 c1b38440        0        0        0 /var/run/devd.pipe
c1ae7348 dgram       0      0        0 c1ae74ec        0        0
c1ae74ec dgram       0      0 c1b3e220        0 c1ae7348        0 /var/run/logpriv
c1ae7578 dgram       0      0 c1b3e330        0        0        0 /var/run/log
localhost#

\end{lstlisting}

Testons la connexion à l'aide de Putty, sachant que \textit{ifconfig} retourne l'adresse IP \textbf{192.168.113.170}.\\
\begin{center}
	\includegraphics[width=10cm]{00.jpg}
\end{center}
D'abord la connexion\ldots
\begin{center}
	\includegraphics[width=15cm]{01.jpg}
\end{center}
\ldots puis l'accueil de la console FreeBSD sous SSH.\par
Bien, maintenant automatisons le tout pour qu'au prochain lancement de la distribution nous n'ayons pas à recommencer toute la manipulation.\\
Pour cela il suffit, comme toujours, d'éditer le fichier de configuration \textit{/etc/rc.conf} et d'ajouter la ligne \textit{sshd\_enable="YES"}, ceci peut être fait par la commande suivante : \textit{echo 'sshd\_enable="YES"' >> /etc/rc.conf}.\par
SSHD est configuré, prêt à l'emploi, maintenant et pour les prochaines fois. Il est temps de s'attacher à l'installation d'un serveur Apache.

\newpage

\section{Installation, configuration et utilisation de Apache}
Apache permet de mettre à disposition, soit de la machine, soit du réseau local, ou encore à l'ensemble du monde, un service de pagination avec des interconnexions, c'est à dire un site internet. Il est de fait que ce service fourni par Apache est très usité, et très apprécié de la communauté. Nous expliquerons comment installer Apache, comment le configurer, mais également trouver le dossier où se situent les fichiers et dossiers mis à disposition des personnes visitant le site.

\subsection{Installation dans FreeBSD, avec exemple de Apache13}
FreeBSD propose un système de menu semi - graphique pour l'installation de programmes tierces. Cependant ce système utilisable avec la commande \textit{sysinstall} ne fonctionnait pas lors de nos TP. Il a donc fallu utiliser une autre méthode, celle de la compilation par la distribution, après téléchargement des bons paquets via FTP.\par
La première chose à faire est de se rendre dans le dossier contenant la liste des paquets susceptibles d'être installés dans la machine, à savoir le dossier \textit{/usr/ports/}.\par
Dans ce dossier figure une branche \textbf{www}, dans laquelle nous nous rendons. La commande \textit{ls | less} permet d'obtenir rapidement une liste de l'ensemble des programmes contenus dans cette branche. Nous en répérons deux : 
\begin{enumerate}
	\item apache13-modssl
	\item links
\end{enumerate}
Le premier nous permet, grâce aux dépendances, d'installer Apache13 affublé d'une verrue SSL. Le second est un navigateur internet en mode texte, largement suffisant pour ce que nous aurons à faire.\par
Installons le paquet Apache13, en procédant ainsi : 
\begin{enumerate}
	\item \textit{cd apache13-modssl}
	\item \textit{make install}
\end{enumerate}
Etant donné que nous avons configuré le proxy précédemment, et que les paramètres réseaux sont automatiques, le téléchargement et la compilation se déroulent sans accrocs. A la fin de l'installation, nous obtenons un message tel que celui ci : 

\begin{lstlisting}

===>   Compressing manual pages for apache+mod_ssl-1.3.39+2.8.30
===>   Registering installation for apache+mod_ssl-1.3.39+2.8.30
===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/libexec/apache/libproxy.so (USES POSSIBLY INSECURE FUNCTIONS: mktemp)
/usr/local/sbin/httpd

      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/apache.sh

      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.

      For more information, and contact details about the security
      status of this software, see the following webpage:
http://www.apache.org/

\end{lstlisting}

Passons à la configuration d'apache.

\subsection{Configuration d'Apache}

Apache possède une configuration de base, ce qui permet de le faire fonctionner en local (au moins pour vérifier que tout fonctionne).
Cependant nous allons procéder à quelques modifications dans le fichier de configuration. Mais avant tout, où se trouve le fichier de configuration ?\par
D'habitude nous trouvons les fichiers de configuration dans le dossier \textbf{/etc/}. Si nous configurons Apache, c'est alors dans le dossier \textbf{/etc/apache} qu'il faut se rendre. Cependant, et de manière méconnue de ma part, l'installation des programmes par \textbf{/usr/ports} implique la mise en place des binaires, et de tout ce qui concerne ledit programme installé, dans le répertoire \textbf{/usr/local/}. C'est encore pourpre, mais ce qui est sûr, c'est que sachant cela, nous retrouvons toute l'architecture de dossiers et de fichiers habituels : 
\begin{enumerate}
	\item \textit{/usr/local/etc/apache22} : contenant les fichiers de configuration d'Apache
	\item \textit{/usr/local/etc/rc.d/} : contient le script permettant le lancement du démon \textit{apache22}
	\item \textit{/usr/local/etc/www/apache22} : contient les fichiers pour les différentes fonctions d'Apache, comme les icônes, les scripts cgi-bin, etc ...
\end{enumerate}

Commençons par éditer le fichier \textbf{/usr/local/etc/apache22/httpd.conf}.\\
Il renseigne le port utilisé pour accéder au serveur Web, l'adresse absolue de nos fichiers et dossiers sur le serveur, les modules supplémentaires ou fichiers de configurations à charger, etc ...\\

\begin{lstlisting}

ServerRoot "/usr/local"

Listen 8080

<IfModule !mpm_netware_module>
	User www
	Group www
</IfModule>

DocumentRoot "/usr/local/www/apache22/data"

#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
#
<Directory />
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Directory "/usr/local/www/apache22/data">
	Options Indexes FollowSymLinks
	AllowOverride None
	Order allow,deny
	Allow from all
</Directory>
\end{lstlisting}

Nous comprenons rapidement que le port utilisé est \textbf{8080}, que les fichiers html sont dans le dossier \textbf{/usr/local/www/data/}.\par
Editons le fichier \textit{index.html} et mettons quelques lignes de code pour tester : 
\begin{lstlisting}
<html>
<head>
        <title>Blankoworld</title>
</head>
<body>
<h1>Es funktionnert!</h1>
<p>Blanko</p>
</body>
</html>
\end{lstlisting}

Il nous reste à vérifier la fonctionnalité de notre serveur.

\subsection{Vérification de la fonctionnalité du serveur Apache}

En local, la meilleure manière de tester son serveur Apache, c'est d'une part de vérifier que le service soit lancé, et d'autre part que le navigateur affiche bien la page que nous avons modifiée précédemment.\\
La commande, sous FreeBSD, pour vérifier, entre autre, que les services soient bien lancés, nous tapons \textit{netstat -at}. Pour installer \textbf{links}, voire \textbf{lynx}, nous procédons comme auparavant : \textit{cd /usr/ports/www/links}, puis \textit{make install}. Comme précédemment, la patiente est la chose la plus importante.\par
Par la suite, et une fois \textit{links} installé, il suffit de lancer l'application sur la page suivante : \textit{http://localhost:8080/}. 


Installation LINKS
Lancement HTTPD start




\end{document}

%---FIN-DE-DOCUMENT------------------------------------------------------------
