logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
doc:reseau:apache2:tp01 [23/09/2014 19:25]
Hypathie [Sécuriser son site web]
doc:reseau:apache2:tp01 [25/09/2014 15:40]
Hypathie [Sécuriser son site web]
Ligne 12: Ligne 12:
 **Nota : Ce wiki est écrit par une débutante ** **Nota : Ce wiki est écrit par une débutante **
  
-Contributeurs,​ merci de compléter/​vérifier [[atelier:​chantier:​apache2?&#​verifier-l-appartenance-et-les-droits-des-fichiers-utilises-par-apache|la partie sur les droits posix sur les fichiers utiles à apache]] ! FIXME  
 ===== Introduction ===== ===== Introduction =====
 Ce qui est mis en œuvre ici concerne une utilisation d'un serveur apache sur un réseau local qui ne pointe pas un nom de domaine acquis mais fictif.\\ ​ Ce qui est mis en œuvre ici concerne une utilisation d'un serveur apache sur un réseau local qui ne pointe pas un nom de domaine acquis mais fictif.\\ ​
Ligne 141: Ligne 140:
  
   * **D'​abord,​ un fichier contenant le code source de la page web**:   * **D'​abord,​ un fichier contenant le code source de la page web**:
-Il doit être créé dans /var/www/, mais on placera ce fichier de code, dans un dossier qu'il faudra créer dans /​var/​www/​dossier-du-site/​fichier.html.+Il doit être créé dans /​var/​www/ ​:  ​/​var/​www/​dossier-du-site/​fichier.html.
  
   * **Ensuite pour que apache gère ce site** :   * **Ensuite pour que apache gère ce site** :
Ligne 605: Ligne 604:
  
 On utilise les droits suivants : On utilise les droits suivants :
-  * droits en lecture <​nowiki>​(r)</​nowiki>​ écriture (w) sur les fichiers réguliers+  * __Sur les fichiers réguliers__ : pour l'​utilisateur root, droits en lecture <​nowiki>​(r)</​nowiki>​ écriture (w) ; pour le groupedroit de lecture seulement. 
-  * droits en lecture <​nowiki>​(r)</​nowiki>​ écriture (w) exécution (x) sur les répertoires.+  * __Sur les répertoires__ : pour l'​utilisateur root, droits en lecture <​nowiki>​(r)</​nowiki>​ écriture (w) exécution (x) ; pour le groupe et les autres droit en lecture et exécution.
 </​note>​ </​note>​
  
Ligne 613: Ligne 612:
  
   * **Pour /​var/​www/​index.php**,​ il faut donc :\\ ''​-rw-r----- 1 root www-data 4096 sept. 22 11:47 index.php''​   * **Pour /​var/​www/​index.php**,​ il faut donc :\\ ''​-rw-r----- 1 root www-data 4096 sept. 22 11:47 index.php''​
-<code root>​chmod ​640 /​var/​www/​index.php</​code>​+<code root>​chmod ​644 /​var/​www/​index.php</​code>​
  
   * **Pour /​home/​web/​monsite.com**,​ il faut donc :\\ ''​drwxr-xr-x 3 root www-data 4096 sept. 22 11:44 monsite.com'':​   * **Pour /​home/​web/​monsite.com**,​ il faut donc :\\ ''​drwxr-xr-x 3 root www-data 4096 sept. 22 11:44 monsite.com'':​
Ligne 623: Ligne 622:
   * **Pour /​home/​web/​monsite.com/​public_html/​index.php**,​ il faut donc :\\ ''​-rw-r----- 1 root www-data 4096 sept. 22 11:44 index.php''​   * **Pour /​home/​web/​monsite.com/​public_html/​index.php**,​ il faut donc :\\ ''​-rw-r----- 1 root www-data 4096 sept. 22 11:44 index.php''​
 <code root>​chown root:​www-data /​home/​web/​monsite.com/​public_html/​index.php\ <code root>​chown root:​www-data /​home/​web/​monsite.com/​public_html/​index.php\
- &&​ chmod 640 /​home/​web/​monsite.com/​public_html/​index.php</​code>​+ &&​ chmod 644 /​home/​web/​monsite.com/​public_html/​index.php</​code>​
  
   * **Pour le lien symbolique /​var/​www/​monsite.com** : on ne peut pas modifier ces droits mais ce n'est pas grave. Ce qui compte c'est le fichier vers lequel pointe un lien symbolique.   * **Pour le lien symbolique /​var/​www/​monsite.com** : on ne peut pas modifier ces droits mais ce n'est pas grave. Ce qui compte c'est le fichier vers lequel pointe un lien symbolique.
Ligne 733: Ligne 732:
 Pour aller plus loin, par exemple pour la rotation des journaux voir [[http://​httpd.apache.org/​docs/​trunk/​fr/​logs.html]] Pour aller plus loin, par exemple pour la rotation des journaux voir [[http://​httpd.apache.org/​docs/​trunk/​fr/​logs.html]]
  
-====OpenSSL : créer un certificat avec apache2 ====+=====OpenSSL : créer un certificat avec apache2 ​=====
 ===Le protocole ssl === ===Le protocole ssl ===
 Le protocole ssl (Secure Socket Layer) permet la sécurisation des communications entre un serveur et un client, au moyen : Le protocole ssl (Secure Socket Layer) permet la sécurisation des communications entre un serveur et un client, au moyen :
Ligne 741: Ligne 740:
  
   * Le port par défaut est 443 :​\\  ​   * Le port par défaut est 443 :​\\  ​
-Dans apache il faut ajouter une directive ''​Listen 443''​ dans le fichier de configuration d'​apache /​etc/​sites-availables/​default-ssl. 
  
   * Son utilisation se fait pour apache2 via OpenSSL, avec le module mod_ssl:   * Son utilisation se fait pour apache2 via OpenSSL, avec le module mod_ssl:
Ligne 775: Ligne 773:
 </​note>​ </​note>​
  
 +====Créer un certificat auto-signé pour le site "​default-ssl"​====
 +Cela ne garantira pas d'une éventuelle usurpation d'​identité.\\ ​
 +Le certificat auto-signé c'est bien pour l'​apprentissage en local ! 
  
 ===ssl dans la configuration d'​Apache2 === ===ssl dans la configuration d'​Apache2 ===
Ligne 783: Ligne 784:
 <code root>ls /​etc/​apache2/​mods-available | grep ssl.*</​code>​ <code root>ls /​etc/​apache2/​mods-available | grep ssl.*</​code>​
  
-Il doit y avoir ''​ssl.conf''​ et ''​ssl.load''​. Sinon il faut installer ​le module ssl ''​a2enmod ssl''​\\ ​+Il doit y avoir ''​ssl.conf''​ et ''​ssl.load''​. Sinon il faut **installer** (ne pas l'activer tout de suite).\\ 
  
-  * Il faut activer le module ssl : +====Création des clé et certificat====
-<code root>​a2enmod ssl</​code>​ +
-puis +
-<code root>​service apache2 restart</​code>​+
  
-La commande ​''​a2enmod ssl''​ a crée dans /​etc/​apache2/​mods-enabled,​ les liens symboliques,​ ''​ssl.conf''​ et ''​ssl.load''​ qui activent le module.\\ +Pour cela on va se servir de l'utilitaire openssl.
  
-<code root> ​ls /​etc/​apache2/​mods-enabled | grep ssl.*</​code>​ +  * Création du répertoire où l'on rangera sa clé privée : 
-<code+<code root>cd /​etc/​apache2/ ​&& mkdir ssl</​code>​ 
-lrwxrwxrwx 1 root root 26 sept. 23 17:34 ssl.conf -> ../​mods-available/​ssl.conf +  * Création de la clé privée et du certificat : 
-lrwxrwxrwx 1 root root 26 sept. 23 17:34 ssl.load -> ../​mods-available/​ssl.load</​code>​+<note
 +__**La commande qui suit cette note, peut s'​effectuer en quatre étapes:**__\\ ​
  
 +1) **Création de la clé privée** : par exemple ''​openssl genrsa 1024 > /​etc/​apache2/​ssl/​apache.key''​
  
-  ​Le fichier du virtualhost ​qui utilse le module: +2) **À partir de cette clé privée, on crée un certificat CSR qui contient une clé publique** à faire signer ​: ''​openssl req -new -key /​etc/​apache2/​ssl/apache.key > /​etc/​apache2/​ssl/​apache.csr''​
-Sur debian c'est le fichier **/​etc/​apache2/​sites-available/default-ssl** qui il contient contient le Virtualhost qu'on peut utiliser par défaut pour créer celui qu'on voudrait ajouter. +
-<code root>less /​etc/​apache2/​sites-available/​default-ssl</code>+
  
-Il est long mais intéressant !+=> C'est ce certificat qu'il faut faire signer par une autorité de certification (CA) 
 +Ou qu'il faudra auto-signer.
  
-====Créer un certificat ​auto-signé ==== +3) **On décide d'auto-signer ce certificat donc on crée une clé privée qui serait celle du CA officielle** : ''​openssl genrsa -des3 1024 > ca.key''​\\ ​ 
-Cela n'est pas suffisant contre le vol d'identité, mais une fois cela fait, il ne restera plus qu'à faire signer son certificat, et d'ajouter ​cette signature ​à la configuration d'​apache avant d'​exposer son site aux yeux de tous.+-on peut ajouter -des3 qui introduit l'usage d'​une ​"​passphrase"​\\  
 +-c'est cette clé privée qui signera tous les certificats que l'on émettra ; cette "​passphrase"​ sera donc demandée ​à chaque utilisation ​de la clé.
  
-===L'utilitaire OpenSSL=== +4) **Puis à partir de la clé privée, on crée un certificat x509 pour une durée de validité d'un an auto-signé**\\ ​''​openssl req -new -x509 -days 365 -key ca.key > ca.crt''​\\  
-C'est l'utilitaire qui permet de mettre en place les certificats. +-On répondrait à nouveau aux questions, mais on changerait la réponse relative à "​Common Name".
-Comme le module ssl, il est installé aussi par défaut l'​utilitaire OpenSSL.\\ +
  
-<​note>​ +5) **Enfin il faudrait faire signer notre certificat ​de demande ​de signature par le certificat du CA (qui a été fait par nous-même) :**\\  
-  ​__Le dossier ​de configuration ​de OpenSSL est /etc/ssl/__ : +''​openssl x509 -req -in /etc/apache2/ssl/apache.csr ​-out /etc/apache2/ssl/apache.crt -CA ca.crt -CAkey ca.key\ 
-Il contient deux dossiers et un fichier : +-CAcreateserial -CAserial ca.srl''​\\ 
--> **/etc/ssl/openssl.cnf** + 
-Fichier de configuration de openslOn y met les directivesOn peut mettre son /homel'autorité ​de certification ... +Dans ce qui suit on a sauté ​les quatre premières étapes.\\  
--> le dossier **/etc/​ssl/​cert/​** : il contient nos certificats + 
-  * le dossier **/etc/​ssl/​private/​** : il contient nos clés privées ​+Mais pour créer une connexion privée et sécurisée entre le serveur et les clients qui s'connecteraientil faudrait utiliser le fichier ca.crt (qu'on a fait nous-même) le procurer ​de façon sécurisé aux clients (ssh par exemple), et l'​installer dans son navigateur :\\ -> Edition -> préférence -> Confidentialité et Sécurité/(bouton) Certificats -> gestion des certificats ​-> (Onglet)autorité/(Bouton)importer
 </​note>​ </​note>​
  
-Par exemple ​:+<code root>​openssl req -x509 -nodes -days 365\ 
 + ​-newkey rsa:1024 -keyout /​etc/​apache2/​ssl/​apache.key\ 
 + -out /​etc/​apache2/​ssl/​apache.crt 
 +</​code>​
  
-<code root>​openssl req -x509 -nodes\ 
- -days 365 -newkey rsa:1024\ 
- -out /​etc/​ssl/​certs/​monsite.com.crt\ 
- ​-keyout /​etc/​ssl/​private/​monsite.com.key</​code>​ 
  
 > -x509 -nodes : type de certificat > -x509 -nodes : type de certificat
 > -days 365 : durée de vie du certificat (en jours) > -days 365 : durée de vie du certificat (en jours)
 > - newkey rsa:1024 : clé rsa de 1024 bits > - newkey rsa:1024 : clé rsa de 1024 bits
-> -out /​chemin/​fichier/​du_certificat ​: crée le fichier du certificat +> -out /​chemin/​fichier/​certificat ​: crée le fichier du certificat 
-> -keyout /etc/apache2/server.key ​: chemin du fichier de sa clé privée+> -keyout /chemin/fichier/clé : chemin du fichier de sa clé privée
  
-On répond ​aux questions, par exemple :+<note tip> 
 +__**Il faut répondre à une suite de question**__ :  
 +La plus importante est "​Common Name": il faut répondre par le nom de domaine ou l'ip public du serveur concerné. Dans le cas de cette exemple, l'ip locale (fixe) du serveur fera l'​affaire.\\  
 + 
 +**Par exemple :**\\  
 +Country Name (2 letter code) [AU]:FR\\  
 +State or Province Name (full name) [Some-State]:​France\\  
 +Locality Name (eg, city) []:​SaVille\\  
 +Organization Name (eg, company) [Internet Widgits Pty Ltd]:\\  
 +Organizational Unit Name (eg, section) []:\\  
 +Common Name (e.g. server FQDN or YOUR name) []:​192.168.0.13 \\    
 +Email Address []:​example@gmx.fr\\  
 +</​note>​ 
 + 
 +  * Restreindre les droits sur le fichier de clé privée, ​aux droits de lecture seulementet pour root: 
 +<code root>​chmod 400 /​etc/​apache2/​ssl/​apache.key</​code>​ 
 + 
 +====Créer un site accessible en ssl ==== 
 + 
 +Cette fois on va mettre en place une méthode plus directe que précédemment. Par exemple un site s'​appelant pegaseous.com 
 + 
 +On va se servir des fichiers ​par défaut.\\  
 +On commence par désactiver les deux fichiers /​etc/​apache2/​sites-available/​default et /​etc/​apache2/​sites-available/​default-ssl avec la commande ''​a2dissite''​. 
 + 
 +On crée ensuite les répertoires et fichiers où développer son site.\\  
 + 
 +  * Par exemple ​dans le répertoire d'un autre utilisateur. 
 +<code root>​mkdir -p /​home/​hypathie/​www/​pegaseous.com/​public_html</​code>​ 
 + 
 + * On crée un index dans /​home/​hypathie/​www/​ 
 +<code root>mv /​var/​www/​index.html /​home/​hypathie/​www/</​code>​ 
 + 
 +On peut le modifier ​: 
 +<code root>vim /​home/​hypathie/​www/​index.html</​code>​ 
 +<​code><​html><​body><​h1>​Ça marche!</​h1>​ 
 +<​p>​Voici ma page d'​index.</​p>​ 
 +<​p>​YEP ! Déployée dans mon répertoire personnel !</​p>​ 
 +<p>Le serveur web apache2 fonctionne.</​p>​ 
 +</​body></​html></​code>​ 
 + 
 +  *On créer un contenu en php dans "​pegaseous"​ : 
 +<code root>vim /​home/​hypathie/​www/​pegaseous.com/​public_html/​index.php</​code>​ 
 +<​code><​html>​ 
 + <​body>​ 
 + <​h1>​Bienvenue sur pegaseous.com</​h1>​ 
 +  <​p>​Site en cours de réalisation !</​p>​ 
 +  <?php 
 +  echo "La date du jour est " . date("​d/​m/​Y"​) . "​!\n";​ 
 +  ?> 
 + </​body>​ 
 +</​html>​ 
 +</​code>​ 
 + 
 +===On pense aux droits unix sur ses répertoires et fichiers=== 
 +<code root>​chmod -R 755 /​home/​hypathie/​www/</​code>​ 
 + 
 +<code root>​chmod 644 /​home/​hypathie/​www/​index.html\ 
 + /​home/​hypathie/​www/​pegaseous.com/​public_html/​index.php</​code>​ 
 + 
 +<code root>​chown root:​www-data /​home/​hypathie/​www/</​code>​ 
 + 
 +===Le virtualhost "​defaut"​ === 
 +On doit d'​abord s'​occuper du fichier /​etc/​apache2/​sites-available/​default 
 + 
 +<code root>vim /​etc/​apache2/​sites-available/​default</​code>​
 <​code>​ <​code>​
-Country Name (2 letter code) [AU]:FR +<​VirtualHost 192.168.0.13:80> 
-State or Province Name (full name) [Some-State]:​France +        ​ServerAdmin webmaster@localhost 
-Locality Name (eg, city) []:Chambery +        ​ServerName pegaseous.com 
-Organization Name (egcompany) [Internet Widgits Pty Ltd]:​chez_moi +        DocumentRoot /​home/​hypathie/​www 
-Organizational Unit Name (egsection) []: +        <​Directory /> 
-Common Name (e.g. server FQDN or YOUR name) []:monsite.com +                Options FollowSymLinks 
-Email Address []:​example@gmx.fr+                AllowOverride None 
 +        </​Directory>​ 
 +        <​Directory /​home/​hypathie/​www/>​ 
 +                Options Indexes FollowSymLinks MultiViews 
 +                AllowOverride None 
 +                Order allow,deny 
 +                allow from all 
 +        </​Directory>​ 
 + 
 +        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 ${APACHE_LOG_DIR}/​error.log 
 +        # Possible values includedebug, info, notice, warn, error, crit, 
 +        # alert, emerg
 +        ​LogLevel warn 
 + 
 +        CustomLog ${APACHE_LOG_DIR}/​access.log combined 
 +</​VirtualHost>​
 </​code>​ </​code>​
-<​note>​ +  ​ 
-Pour un certificat auto-signé,​ il faut répondre à la question ​"Common Name" ​le nom du domaine à protéger</note>+  * On charge le site "default" ​
 +<code root>​a2ensite default</code>
  
-  * On vérifie la commande oppenssl a crée deux fichiers ​:+  * On édite /​etc/​apache2/​ports.conf 
 +Pour s'​éviter d'​avoir au redémarrage d'​apache2 le message suivant ​: 
 +<​code>​service apache2 reload 
 +[....] Reloading web server config: apache2[Thu Sep 25 09:33:25 2014] [warn] NameVirtualHost 192.168.0.13:​80 has no VirtualHosts</​code>​
  
-<code root>ls /etc/ssl/certs| grep monsite.com.crt</​code>​ +<code root>vim /etc/apache2/ports.conf<​/code> 
-<​code>​monsite.com.crt</​code>​+<​code>​NameVirtualHost 192.168.0.13:80 
 +Listen 80</​code>​ 
 + 
 +===Le fichier "​default-ssl"​=== 
 + 
 +  * On active le module ssl: 
 +<​code ​root>a2enmod ssl</​code>​ 
 + 
 +  * On édite vim /​etc/​apache2/​sites-available/​default-ssl pour ajouter clé et certificat ainsi que le site déclarer dans le fichier default"​ : 
 + 
 +<code root>vim /​etc/​apache2/​sites-available/​default-ssl</​code>​ 
 + 
 +<​code><​IfModule mod_ssl.c>​ 
 +<​VirtualHost *:443> 
 +        ServerAdmin webmaster@localhost 
 +         
 +        ServerName ​monsite.com 
 +        DocumentRoot /​home/​hypathie/​www 
 +        <​Directory /> 
 +                Options FollowSymLinks 
 +                AllowOverride None 
 +        </​Directory>​ 
 +        <​Directory /​home/​hypathie/​www/>​ 
 +                Options Indexes FollowSymLinks MultiViews 
 +                AllowOverride None 
 +                Order allow,​deny 
 +                allow from all 
 +        </​Directory>​ 
 +#plus bas 
 +        SSLCertificateFile ​   /​etc/​apache2/​ssl/​apache.crt 
 +        SSLCertificateKeyFile /​etc/​apache2/​ssl/​apache.key 
 +#<​...>​ 
 + 
 +</​VirtualHost>​ 
 +</​IfModule>​ 
 +</​code>​
  
-<code root>ls /​etc/​ssl/​private/​ | grep monsite.com.key</​code>​ +Il n'y a rien d'​autre à modifier.
-<​code>​monsite.com.key</​code>​+
  
-  * Restreindre aux droits de lecture seulement et seulement pour root: +  * On charge le fichier "​default-ssl"​ 
-<code root>chmod 400 /etc/ssl/​private/​monsite.com.key</​code>​+<code root>a2ensite default-ssl</​code>​
  
 +On peut maintenant accéder au site "​pegaseous.com"​ en tapant dans le navigateur : ''​https://​192.168.0.13/​pegaseous.com/''​.
  
 +Il est normal que le navigateur demande une acception pour accéder au site.
  
doc/reseau/apache2/tp01.txt · Dernière modification: 01/11/2019 08:43 par smolski

Pied de page des forums

Propulsé par FluxBB