logo banniere

S'il n'y a pas de solution c'est qu'il n'y a pas de problème!


Installation Apache mod_ssl php mod_perl



Introduction

L'installation d'Apache avec mod_ssl comme outil de cryptographie ne pas semblé tout à fait triviale la première fois que j'ai eu l'idée saugrenue de vouloir l'installer. Comme je souhaitais en même temps avoir PHP et mod_perl, les doses de café et d'aspirine ont dûes être augmentées à cette occasion ;-)
Voici donc une page qui, j'espère, vous évitera une consommation surabondante de caféine et d'acide acetylsalicylique. J'indiquerai tout au long de la page les parties à "sauter" si vous ne souhaitez installer qu'un sous ensemble de "Apache Mod_Ssl PHP Mod_Perl".
Dans tous les cas, suivez l'ordre proposé, c'est un ordre d'installation que j'ai utilisé avec succès.

Fichiers à télécharger

Faites très attention: chaque version de mod_ssl est associée à une version précise d'apache, ne vous trompez pas!!

Pour installer openssl, vous avez besoin de ... perl 5!

Installation du bazar

Je suppose que vous avez décompressé tous les fichiers téléchargés dans /usr/local/src. Vous avez donc des répertoires openssl-x.x.x, mod_ssl-y.y.y-z.z.z, php-u.u.u, mod_perl-v.v.v et apache_z.z.z. Notez bien que le nom de mod_ssl contient à la fin la même version que apache.

openssl (sautez ce § si vous n'installez pas mod_ssl)

Allez dans le répertoire des sources de openssl, lisez le fichier INSTALL ;-) et lancez

./config

Vous pouvez changer le répertoire d'installation par défaut avec l'option --prefix=, vous avez accès à l'ensemble des options de config en lançant:

./config --help

Puis lancez:

make
make test
make install

Passons aux choses sérieuses....

Correctifs mod_ssl (sautez ce § si vous n'installez pas mod_ssl)

mod_ssl modifie les sources d'apache... Il y a plusieurs moyens d'installer apache + mod_ssl, je vous donne celui qui m'a semblé le plus simple et le plus efficace.

Placez vous dans le répertoire des sources de mod_ssl.
Entrez:

./configure --with-apache=/usr/local/src/apache_z.z.z
--with-ssl=/usr/local/src/openssl-x.x.x --prefix=/usr/local/apache
--enable-module=ssl --enable-module=most --enable-shared=max
--enable-rule=EAPI

où naturellement apache_z.z.z correspond au nom du répertoire des sources apache. Toutes les options de ./configure doivent être placées sur une seule ligne. Les options --enable-module=ssl --enable-module=all --enable-shared=max --enable-rule=EAPI sont des options qui sont passées à apache. Vous pouvez en rajouter, ou modifier par exemple le répertoire d'installation d'apache ici fixé à /usr/local/apache. Pour connaitre toutes les options de configuration d'apache, lancez ./configure --help depuis le répertoire des sources d'apache.
L'option --enable-rule=EAPI est indispensable pour rajouter ensuite php ou mod_perl. L'option de compilation -DEAPI sera automatiquement transmise à PHP ou mod_perl par apxs (voir plus loin).

Installation d'Apache avec mod_ssl (voir plus loin pour installer apache sans mod_ssl)

La configuration d'apache a déjà été effectuée par mod_ssl précédemment. Placez vous dans le répertoire des sources d'apache.
Entrez:

make
make install

Installation d'apache sans mod_ssl

Placez vous dans le répertoire des sources d'apache.
Entrez:

./configure --prefix=/usr/local/apache
--enable-module=most --enable-shared=max

Vous pouvez rajouter, ou modifier des options par exemple le répertoire d'installation d'apache ici fixé à /usr/local/apache. Pour connaitre toutes les options de configuration d'apache, lancez ./configure --help depuis le répertoire des sources d'apache. (les options de ./configure sont toujours à rentrer sur une seule ligne). Puis, lancez make, puis make install.

Installation de php (sautez ce § si vous n'installez pas php).

Placez vous dans le répertoire des sources de php.
Entrez:

 ./configure --with-imap --with-mysql --with-gettext
 --with-apxs=/usr/local/apache/bin/apxs

L'option --with-imap permet à php d'accéder un serveur de mail imap, l'option --with-gettext permet d'utiliser des scripts php dont l'internationalisation est basée sur gettext (évidemment ne choisissez les options imap et gettext que si vous en avez l'usage), /usr/local/apache/bin/apxs est le chemin vers le fichier apxs de votre installation d'apache. Vous pouvez naturellement rajouter d'autres options.
Lancez ./configure --help pour avoir la liste des options disponibles et qui peuvent vous intéresser.
Par l'option --with-apxs=/usr/local/apache/bin/apxs, la compilation de php se fait "correctement" vis à vis de mod_ssl.

Puis, lancez:

make
make install

N'oubliez pas de recopier (et d'éventuellement éditer) le fichier php.ini-dist (configuration standard) ou php.ini-recommended (configuration "durcie") dans /usr/local/lib en le renommant php.ini (merci à James pour le rajout de cette précision)

Remarque: depuis quelques "versions", php ne rajoute plus dans le fichier de configuratio d'apache:


AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Dans le même ordre d'idée, dans le fichier de configuration d'apache, n'oubliez pas:


<IfModule mod_dir.c>
    DirectoryIndex index.html index.php
</IfModule>

Installation de mod_perl (Sautez ce § si vous n'installer pas mod_perl).

Placez vous dans le répertoire des sources de mod_perl.
Entrez:

perl Makefile.PL USE_APXS=1
WITH_APXS=/usr/local/apache/bin/apxs EVERYTHING=1

où /usr/local/apache/bin/apxs est le chemin vers le fichier apxs de votre installation d'apache (cette ligne est à rentrer sans retour à la ligne).
Par les options USE_APXS=1 et WITH_APXS=/usr/local/apache/bin/apxs, la compilation se fait correctement vis à vis de mod_ssl.

Lancez ensuite:

make
make install

Créer un certificat de sécurité (sautez ce § si vous n'utilisez ps mod_ssl)

Il y a un outil pour cela nommé openssl (oui...) et qui se situe par défaut dans /usr/local/bin.
On commence par installer une clé privée. J'ai choisi de ne pas la protéger par mot de passe pour éviter la complication de la lecture par apache d'un mot de passe à chaque démarrage ou redémarrage. Il est donc indispensable que le fichier contenant la clé ne soit lisible que par le propriétaire des process apache (qui est déclaré dans le fichier de configuration d"apache httpd.conf).
Placez vous dans un répertoire vide pour éviter tout désagréments et entrez:

/usr/local/bin/openssl genrsa 1024
> nom.votre.site.key

où évidemment nom.votre.site est le nom "homologué" de votre site web (l'ordre est à entrer sans retour à la ligne...)

Si vous souhaitez créer une clé cryptée, entrez:

/usr/local/bin/openssl genrsa -des3 1024
> nom.votre.site.key

Mais dans ce cas, chaque lancement d'apache vous demandera d'entrer manuellement le mot de passe de la clé.
Cela peut être gênant si vous prévoyer des redémarrages automatisés d'Apache....
Il y a un moyen d'automatiser la fourniture du mot de passe à Apache au démarrage avec l'option:

SSLPassPhraseDialog exec:votre_programme_de_fourniture_de_mot_de_passe

Mais c'est à vous d'écrire le programme qui fournit le mot de passe, faites attention à ce que vous faites...

entrez ensuite:

/usr/local/bin/openssl req -new
-key nom.votre.site.key
-out nom.votre.site.csr

qui va se servir du fichier de configuration par défaut de openssl (l'ordre est à entrer sans retour à la ligne).
Vous devez répondre à une série de questions, entrez un . pour laisser un champ vierge, voici ce que j'y ai entré:

  • Country Name (2 letter code): FR
  • State or Province Name :
  • Locality Name: PARIS
  • Organization name: Linux-sottises (pour moi)
  • Organization Unit Name:
  • Common name: www.linux-sottises.net (attention c'est l'adresse de votre site web qu'il faut mettre ici)
  • Email Adress: tnka@linux-sottises.net
  • A chalenge password:
  • An optional comany name:

Le CSR est maintenant créé, on peut valider soi même pour générer un certificat de sécurité en entrant:

/usr/local/bin/openssl req -x509 -days 10000
-key nom.votre.site.key -in nom.votre.site.csr
-out nom.votre.site.crt

Le -days donne la durée de validité du certificat, j'ai mis 10000 jours pour être "tranquille" :) (l'ordre est à entrer sans retour à la ligne)
Il faut à présent déplacer les fichiers crées dans le répertoire d'installation d'apache. Des répertoires spécifiques ont été créés à l'installation.

  • nom.votre.site.crt dans /usr/local/apache/conf/ssl.crt
  • nom.votre.site.csr dans /usr/local/apache/conf/ssl.csr
  • nom.votre.site.key dans /usr/local/apache/conf/ssl.key

Vérifiez bien que ces fichiers ne sont lisibles que par le propriétaire des process apache (surtout si vous utilisez une clé non cryptée)

La partie installation est à présent achevée.... Il ne reste plus qu'à configurer le fichier /usr/local/apache/conf/httpd.conf

Configuration

Je ne souhaite pas donner dans cette page la syntaxe complète de httpd.conf, mais plutôt les compléments nécessités par mod_ssl.
Tout d'abord, notez que le lancement de apache avec ssl se fait avec:

/usr/local/bin/apachectl startssl

les options restart, stop, status, fullstatus et configtest restent inchangées, mais start lance apache SANS ssl.

Normalement, la procédure d'installation ci-dessus, produit un fichier httpd.conf dans lequel les modules php et mod_perl ne sont activés qu'en même temps que mod_ssl. Si vous comptez vous servir de temps à autre d'apache sans ssl mais avec PHP et mod_perl, vous pouvez corriger cela en changeant:

<IfDefine SSL>
LoadModule ssl_module         libexec/libssl.so
LoadModule php4_module        libexec/libphp4.so
LoadModule perl_module        libexec/libperl.so
</IfDefine>
en
<IfDefine SSL>
LoadModule ssl_module         libexec/libssl.so
</IfDefine>
LoadModule php4_module        libexec/libphp4.so
LoadModule perl_module        libexec/libperl.so
et
<IfDefine SSL>
AddModule mod_ssl.c
AddModule mod_php4.c
AddModule mod_perl.c
</IfDefine>
en
<IfDefine SSL>
AddModule mod_ssl.c
</IfDefine>
AddModule mod_php4.c
AddModule mod_perl.c

Vous pouvez aussi, comme je l'ai fait, commenter tous les <IfDefine SSL> et les <IfModule mod_ssl.c> (avec les tags fermant correspondants) de manière à ce que apachectl start lance systématiquement ssl+php+perl.

Je n'indique ci dessous que le compléments à apporter à httpd.conf pour la partie ssl.

Tout d'abord, ceci a été genéré dans le fichier httpd.conf:

<IfDefine SSL>
Listen 80
Listen 443
 </IfDefine>

un serveur ssl écoute sur le port 443, pensez à l'ouvrir si vous utiliser un pare-feu

Le plus simple pour utiliser ssl est de configurer des serveurs virtuels utilisant ssl.
Voici par exemple la partie ssl d'un serveur ssl sur linux-sottises:

NamevirtualHost 62.4.22.49:443
<VirtualHost 62.4.22.49:443>
	SSLEngine On
	SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
	SSLCertificateKeyFile conf/ssl.key/webmail.linux-sottises.net.key
	SSLCertificateFile conf/ssl.crt/webmail.linux-sottises.net.crt
	DocumentRoot /webnew/webmail
	ServerName webmail.linux-sottises.net
        CustomLog /var/log/httpd/mail_log common
        ErrorLog /var/log/httpd/mail-error_log
	SetEnvIf User-Agent ".*MSIE.*" \
         	nokeepalive ssl-unclean-shutdown \
         	downgrade-1.0 force-response-1.0
	<Directory "/usr/local/apache/cgi-bin">
    	SSLOptions +StdEnvVars
	</Directory>
	<Files ~ "\.(cgi|shtml|phtml|php3?|php|inc)$">
    		SSLOptions +StdEnvVars
	</Files>
</VirtualHost>

Si vous n'avez pas d'ip fixe, vous pouvez (à partir d'apache 1.3.13) utiliser NameVirtualHost *:443 et <VirtualHost *:443>.
L'activation de ssl se fait par l'ordre SSLEngine on, viennent ensuite la localisation des fichiers de certificat, puis les ordres "classiques" des serveurs virtuels, et enfin des options de configuration automatiquement par la compilation d'apache dans l'hôte virtuel "par défaut" et que j'ai reportés ici pour plus de clarté. J'ai désactivé chez moi l'hôte virtuel ssl par défaut.

BON COURAGE!


Dernière modification le jeudi 17 avril 2003 à 00:38:34 Paris
Webmaster: TNK
Valid HTML 4.01! Valid CSS! quanta anybrowser suse powered by

linux apache mod_gzip php mysql openssl modssl