Apache SSL, serveur Web

De Diablotins.org.

(Redirigé depuis Apache)


Image:brush.png

Apache, le serveur Oueb.




ATTENTION : cette documentation n'est pas une documentation sur Apache, mais une documentation sur son implémentation dans FreeBSD.
Elle n'est pas exhaustive sur la configuration du serveur, et ne peut pas vous aider dans des cas très spécifiques. Elle implique une bonne connaissances de base de Apache.

C'est le serveur HTTP principal du mouvement Open-source, mais c'est aussi le serveur le plus utilisé, y compris propriétaire.
Son nom vient de A patchy Server, car sa structure est un ensemble de module qui à présent forme un ensemble unifié et cohérent.
La version que nous allons installer est un version 1.3.X, la version 2 est déjà disponible, mais pour des raisons de dépendances, je ne vous conseille pas de l'utiliser.

Sommaire

Installation

Pour les ceux qui ne veulent pas utiliser la couche SSL du monde, ou pour les branches anciennes de FreeBSD:
Précisez le dans /etc/make.conf, par les entrées:

  [...]
  OPENSSL_OVERWRITE_BASE=YES
  NO_OPENSSL= true
  [...]

La première ligne sert à préciser que le ports doit réécrire la version système. La deuxième sert à ne pas recompiler OpenSSL du monde, lors d'un “make world”.

Maintenant, on installa apache à proprement dit.
Plusieurs [port]]s de Apache, existent, y compris Apache + SSL, mais construisons pour cette article “www/apache13-modssl”. Ensuite, renommez le script RC de Apache:

  # mv /usr/local/etc/rc.d/apache.sh.sample /usr/local/etc/rc.d/apache.sh

Apache se lance donc via :

  # /usr/local/etc/rc.d/apache.sh start

et se stoppe via :

  # /usr/local/etc/rc.d/apache.sh stop

Avec l'entrée idoine dans /etc/rc.conf.

Configuration de base

Tout d'abord, un pré-requis, validez votre /etc/hosts ou votre DNS pour vous assurer que votre machine puisse résoudre sa propre adresse.
De toute façon, entré les lignes suivantes dans votre /etc/hosts.

  [...]
  127.0.0.1 localhost localhost.my.domain
  ..

Puis, supprimez les liens symboliques des “DocumentROOTS”, Web et CGI :

  # rm /usr/local/www/data/
  # mv /usr/local/www/data.default /usr/local/www/data
  # rm /usr/local/www/cg-bin/
  # mv /usr/local/www/cgi-bin.default /usr/local/www/cgi-bin

Enfin, la configuration proprement dite, éditez le fichier de configuration “/usr/local/etc/apache/httpd.conf” et vérifieez les entrées suivantes :

  [...]
  ServerAdmin root@ma_machine.mon_domaine.tld
  ServerName ma_machine.mon_domaine.tld
  [...]

Le FQDN doit correspondre avec les résolution de /etc/hosts ou de votre domaine, sinon Apache ne démarrera pas.
Vous pouvez créer un alias «webmaster» dans “/etc/aliases”, (voir documentation sur le courrier électronique). Pour l'exécution des CGI on doit ajouter des entrées “ExecCGI” dans les blocs “Directory” suivants :

# vi /usr/local/etc/apache/httpd.conf
--
[...]
<Directory />
    Options FollowSymLinks ExecCGI
    AllowOverride None 
</Directory>

<Directory "/usr/local/www/data">
    Options Indexes FollowSymLinks MultiViews ExecCGI
    AllowOverride all
    Order allow,deny   
    Allow from all
</Directory>

<Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI
    <Limit GET POST OPTIONS PROPFIND>
        Order allow,deny
        Allow from all 
    </Limit>
    <LimitExcept GET POST OPTIONS PROPFIND>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>
[...]

Et ajouter les lignes suivantes pour les CGI 'c' et Perl :

  # vi /usr/local/etc/apache/httpd.conf
  --
  [...]
  AddHandler cgi-script .cgi
  AddHandler cgi-script .pl
  [...]

Installation du certificats SSL

Nous allons maintenant générer un certificat auto-signé personnel Pour votre domaine, il doit correspondre à la valeur de “ServerName” dans votre httpd.conf.

$ su -
# cd
# mkdir key
# cd key
# openssl req -new -out server.csr
Using configuration from /etc/ssl/openssl.cnf
Generating a 1024 bit RSA private key
............++++++
......++++++
writing new private key to 'privkey.pem'
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:France
Locality Name (eg, city) []:PARIS
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mon_Organisation
Organizational Unit Name (eg, section) []:mon_domaine.tld
Common Name (eg, YOUR name) []:g!mon_domaine.tld
Email Address []:mon@adresse.mail

Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:
# ls
server.csr privkey.pem
# openssl rsa -in privkey.pem -out server.key
read RSA key
Enter PEM pass phrase:
writing RSA key
#ls
server.csr server.key privkey.pem
# openssl x509 -in server.csr -out server.cert -req -signkey server.key -days 365
Signature ok
subject=/C=FR/ST=France/L=PARIS/O=Mon_Organisation/OU=mon_domaine.tld/CN=mon_doamine.tld/Email=mon@adresse.mail
Getting Private key
# ls
server.crt server.csr server.key privkey.pem

Maintenant, il faut le copier dans les répertoires des clefs et certificats :

  # cp server.key /usr/local/etc/apache/ssl.key/
  # cp server.crt /usr/local/etc/apache/ssl.crt/

PHP4

Pour installer le module PHP4, on utilise le port lang/php4 qui installe à la fois le CGI et le module.
Ensuite, éditez le fichier de configuration d'Apache pour ajouter les entéres suivantes près des primitives du même type :

  [...]
  LoadModule php4_module libexec/apache/libphp4.so
  [...]
  AddModule mod_php4.c
  [...]
  AddType application/x-httpd-php .php .php4 .phtml
  AddType application/x-httpd-php-source .phs
  [...]

Ruby

Pour installer “Mod_ruby”, c'est un peu différent mais guère plus. Installez le port www/mod_ruby , il a une dépendance avec Ruby, bien sûr, mais aussi Eruby, embedded Ruby.
Éditez ensuite le fichier de configuration de Apache pour y ajouter près des primitives du même genre pour le Loadmodule et après les blocs pour le reste :

# vi /usr/local/etc/apache/httpd.conf
--
[...]
LoadModule ruby_module libexec/apache/mod_ruby.so
[...]
IfModule mod_ruby.c>
  RubyRequire apache/ruby-run
  RubySafeLevel 0
   <Files *.rb>
     SetHandler ruby-object
     RubyHandler Apache::RubyRun.instance
   </Files>
   RubyRequire apache/eruby-run
   <Files *.rhtml>
     SetHandler ruby-object
     RubyHandler Apache::ERubyRun.instance
   </Files>

</IfModule>
[...]

Tests

Pour tester , on vas editer un fichier de chaques formats et faire le test via un browser, puis un test via HTTPS et installer le certificat dans le navigateur, toutes les étapes ne vont pas être décrites ici, seulement l'édition des fichiers :

  # rm -rf /usr/local/www/data/
  # echo "" > /usr/local/www/data/test.php
  # echo "<% put 'Test Eruby' %>" > /usr/local/www/data/test.rhtml
  # echo "put 'Test Ruby'" > /usr/local/www/data/test.rb
  # echo "print 'Test Perl';" > /usr/local/www/data/test.pl
  # echo "Test HTML" > /usr/local/www/data/test.html
  # ln -s /usr/local/www/data/test.html /usr/local/www/data/index.html

Voir aussi

Projets :