Date de publication: le lundi 17 décembre 2007 à 05h32
Dernière modification: par Pascal BOYER le lundi 17 décembre 2007 à 05h43
« Article précédent: eZ Publish : utiliser les brouillons
» Article suivant: eZ Publish : critères d'accessibilité
eZ Publish : créer des zones sécurisées SSL
Cet article, complémentaire de celui-ci , a pour but de détailler la mise en oeuvre des zones sécurisées dans un environnement eZ Publish (3.9.4 à l'heure où j'écris cet article).
Il explique comment configurer le fichier de configuration du serveur Apache2 (2.2.x) et comment configurer les fichiers de configuration de eZ Publish.
eZ Publish : configurer Apache2 pour les zones SSL
Pour la mise en oeuvre d'accès sécurisés, il est d'abord nécessaire de créer les éléments suivants:
- une Autorité de Certification,
- un certificat pour cette AC,
- une clef publique,
- une clef privée.
Toutes les commandes permettant de réaliser chacun de ces éléments sont détaillées dans cet article: SSL/TLS : autorité de certification et certificats
Après avoir créé l' Autorité de Certification (voir l'article donné en lien ci-dessus), voici un récapitulatif des commandes nécessaires et suffisantes:
Création de la clef privée de l'AC:
openssl genrsa -des3 -out AC_perso/private/AC_perso.key 2048
Création du certificat de l'AC:
openssl req -new -x509 -days 3650 -key AC_perso/private/AC_perso.key -out AC_perso/private/AC_perso.crt
La clef privée:
openssl genrsa -out AC_perso/private/server_tls.pem 2048
Création de la CSR (Certificate Signing Request ou Demande de Signature de Certificat)
openssl genrsa -out AC_perso/private/server_tls.pem 2048
Signer la CSR:
openssl ca -in AC_perso/newcerts/server_CSR.pem -out AC_perso/certs/server_signed.pem -keyfile AC_perso/private/AC_perso.key -cert AC_perso/private/AC_perso.crt -days 3650
apache2.conf : configurer le serveur web Apache 2
Pour que le serveur apache 2 prenne en compte les connexions sécurisées assurées par le protocole https , voici les lignes à ajouter à son fichier de configuration /etc/apache2/ apache2.conf :
# ================================== SSL/TLS ================================== # La directive SSLProtocol (p256) définit quels variantes du protocole SSL seront utilisables par "mod_ssl" et qui # seront donc imposés aux clients. # Variantes possibles: SSLv2, SSLv3, TLSv1, All SSLProtocol +TLSv1 +SSLv3 # La directive SSLCACertificatePath (p257) définit l'emplacement du certificat de mon AC. SSLCACertificateFile "/usr/lib/ssl/AC_perso/private/AC_perso.crt" # La directive SSLCertificateKeyFile (p256,248) définit l'emplacement de la clef pubique (ou certificat signé) du serveur HTTP. SSLCertificateFile "/usr/lib/ssl/AC_perso/certs/server_signed.pem" # La directive SSLCertificateFile (p256,248) définit l'emplacement de la clef privée du serveur HTTP. SSLCertificateKeyFile "/usr/lib/ssl/AC_perso/private/server_tls.pem" # Ci-dessous, je mets en place SSL pour l'ensemble du site. # PENSER À "/etc/apache2/ports.conf" POUR QUE Apache2 ÉCOUTE AUSSI SUR LE PORT 443 <VirtualHost 88.191.30.14:443> ServerName "www.monsite.fr" DocumentRoot /usr/local/www SSLEngine On # ========= CONFIGURATION EZ PUBLISH ========= # Il s'agit des règles de réécriture de ez publish DirectoryIndex index.php index.html <Directory /usr/local/www> Options -Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> <IfModule mod_php4.c> php_admin_flag safe_mode Off php_admin_value register_globals 0 php_value magic_quotes_gpc 0 php_value magic_quotes_runtime 0 php_value allow_call_time_pass_reference 0 </IfModule> <IfModule mod_rewrite.c> # La directive RewriteEngine (appelé aussi "mot clef") indique si le moteur de réécriture doit être lancé (on) RewriteEngine On Rewriterule ^/var/storage/.* - [L] Rewriterule ^/var/[^/]+/storage/.* - [L] RewriteRule ^/var/cache/texttoimage/.* - [L] RewriteRule ^/var/[^/]+/cache/texttoimage/.* - [L] Rewriterule ^/design/[^/]+/(stylesheets|images|javascript)/.* - [L] Rewriterule ^/share/icons/.* - [L] Rewriterule ^/extension/[^/]+/design/[^/]+/(stylesheets|images|javascripts?)/.* - [L] Rewriterule ^/packages/styles/.+/(stylesheets|images|javascript)/[^/]+/.* - [L] RewriteRule ^/packages/styles/.+/thumbnail/.* - [L] RewriteRule ^/favicon.ico - [L] RewriteRule ^/robots.txt - [L] RewriteRule ^/phpMyAdmin_2112 - [L] RewriteRule ^/repTemporaire - [L] RewriteRule ^/* /index.php </IfModule> </VirtualHost> NameVirtualHost 88.191.30.14:80 <VirtualHost 88.191.30.14:80> ServerAdmin webmaster@localhost DocumentRoot /usr/local/www DirectoryIndex index.php index.html <Directory /usr/local/www> Options -Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> # ========= CONFIGURATION EZ PUBLISH ========= # Il s'agit des règles de réécriture de ez publish <IfModule mod_php4.c> php_admin_flag safe_mode Off php_admin_value register_globals 0 php_value magic_quotes_gpc 0 php_value magic_quotes_runtime 0 php_value allow_call_time_pass_reference 0 </IfModule> <IfModule mod_rewrite.c> # La directive RewriteEngine (appelé aussi "mot clef") indique si le moteur de réécriture doit être lancé (on) RewriteEngine On Rewriterule ^/var/storage/.* - [L] Rewriterule ^/var/[^/]+/storage/.* - [L] RewriteRule ^/var/cache/texttoimage/.* - [L] RewriteRule ^/var/[^/]+/cache/texttoimage/.* - [L] Rewriterule ^/design/[^/]+/(stylesheets|images|javascript)/.* - [L] Rewriterule ^/share/icons/.* - [L] Rewriterule ^/extension/[^/]+/design/[^/]+/(stylesheets|images|javascripts?)/.* - [L] Rewriterule ^/packages/styles/.+/(stylesheets|images|javascript)/[^/]+/.* - [L] RewriteRule ^/packages/styles/.+/thumbnail/.* - [L] RewriteRule ^/favicon.ico - [L] RewriteRule ^/robots.txt - [L] RewriteRule ^/phpMyAdmin_2112 - [L] RewriteRule ^/repTemporaire - [L] RewriteRule ^/* /index.php </IfModule> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature Off Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
Pour que le serveur Apache 2 écoute sur le port 443, port standard du protocole HTTPS, il faut renseigner cet autre fichier de configuration: /etc/apache2/ ports.conf :
Listen 80 Listen 443
Enfin, il faut installer les modules suivants:
ls -la /etc/apache2/mods-enabled/ |grep ssl
lrwxrwxrwx 1 root root 26 2007-12-14 04:41 ssl.conf -> ../mods-available/ssl.conf lrwxrwxrwx 1 root root 26 2007-12-14 04:41 ssl.load -> ../mods-available/ssl.load
Pour cela:
cd /etc/apache2/mods-enabled/
ln -s ../mods-available/ssl.conf ssl.conf
ln -s ../mods-available/ssl.load ssl.load
Il ne reste plus qu'à relancer le serveur web:
/etc/init.d/apache2 restart
ou lui demander de simplement relire son fichier de configuration:
/etc/init.d/apache2 reload
A partir de maintenant, toutes les pages du site web sont accessibles en utilisant indifféremment les deux protocoles http et https.
eZ Publish : créer une zone SSL
Supposons que l'on souhaite sécuriser toutes les pages de connexion pour que soient chiffrés le login et mot de passe tapés par l'utilisateur.
Pour réaliser ceci, voici les lignes à ajouter au fichier de configuration settings/override/ site.ini.append.php (je n'indique que les lignes à ajouter):
[SiteSettings] SSLPort=443 [SSLZoneSettings] SSLZones=enabled #SSLSubtrees[] # SI ON MET keep CELA VEUT DIRE QUE L'ON SOUHAITE CONSERVER LE MODE http ET NON https ModuleViewAccessMode[user/login]=ssl ModuleViewAccessMode[content/*]=keep
Après avoir vidé les caches, le serveur Apache basculera automatiquement en mode sécurisé à chaque appel d'une page de connexion.
Commentaires














