# Apache/HTTPS

* Installation d'Apache
* Plusieurs sites par machine
* Serveurs virtuels (vhost)
* Répertoires utilisateurs
* Ré-écriture d'URL
* .htaccess
* Sécurité
* Connexion sécurisée (HTTPS)
* Common Gateway Interface (CGI)
* Cache web
* Problèmes connus
* Installation d'Apache
* Plusieurs sites par machine
* Serveurs virtuels (vhost)
* Répertoires utilisateurs
* Ré-écriture d'URL
* .htaccess
* Sécurité
* Connexion sécurisée (HTTPS)
* Common Gateway Interface (CGI)
* Cache web
* Problèmes connus
[ Modifier le sommaire ]

## Généralités

Contrairement au protocole HTTP, HTTPS garantit la confidentialité et l'intégrité des données échangées entre un serveur web et ses clients, et par conséquent il convient mieux aux transactions sensibles comme les flux bancaires. En effet il permet de se prémunir de l'attaque de l'homme du milieu en cryptant les communications.
Pour mettre en place ce protocole, il faut juste activer l'extension Apache et ajouter une directive pour le port 443 avec un certificat électronique.

## Types de clé

Un certificat électronique (.crt) est issu d'une demande d'identification (.csr pour Certificate Signing Request). Ce dernier est généralement payant, à renouveler chaque année, car délivré par une autorité de certification, mais :
* Il est possible de le créer soi-même, ce qui aura pour effet d'afficher un avertissement d'exception de sécurité aux visiteurs comme celui de l'image ci-contre. D'ailleurs sur Ubuntu, il existe déjà /etc/ssl/private/ssl-cert-snakeoil.key, mais l'avertissement sera le même. Pour en générer une nouvelle du même type, se reporter aux paragraphes ci-après.
* Certains sites comme GeoTrust en propose un valide, mais valable seulement 30 jours.
* La meilleure solution gratuite est Let's Encrypt, car elle permet de créer et configurer (ou renouveler) des sites HTTPS en une minute seulement, avec possibilité d'un renouvellement automatique par cron, grâce à https://certbot.eff.org/.

## Linux
### Mod SSL

Ajouter le module SSL à Apache 2 :
Ajouter Listen 443 à /etc/apache2/ports.conf
Générer un certificat autosigné :
Si la commande est introuvable :
On configure un site en SSL :
Éditez le fichier de configuration /etc/apache2/sites-enabled/ssl pour qu'il accepte les connexions sur le port 443 :
Éditez le fichier de configuration /etc/apache2/sites-available/default pour qu'il accepte les connexions sur le port 80 :
et dans le milieu du fichier /etc/apache2/sites-available/ssl ajoutez :
Puis redémarrez apache :
Pour rendre possible la connexion en SSL, la configuration Apache suivante :
doit comprendre dans chaque vhost concerné :
Puis on relance Apache :
Pour tester :
Si la clé nécessite un mot de passe :

#### Personnalisation

Pour personnaliser les directives (ex : ajouter SuexecUserGroup), il suffit de copier le contenu de :
dans
en remplaçant :80 par :443.

## Windows
### Prérequis

Ajouter le module SSL en décommentant la ligne suivante de httpd.conf :
La directive sur le port 443 s'effectue ensuite dans le fichier suivant (vide par défaut), selon le logiciel :
* C:\Program Files (x86)\EasyPHP\binaries\apache\conf\inc_virtual_hosts.conf
* C:\Program Files (x86)\WAMP\bin\apache\Apache2.2.21\conf\extra\httpd-vhosts.conf
Mais httpd.conf contient un commentaire avec : #<VirtualHost _default_:443>.
Il faut y renseigner l'emplacement du ssl.crt ci-dessous à créer avant de décommenter, sous peine d'erreur Apache.

### Création du certificat autosigné

Lancer une console DOS :
Cela a généré les fichiers à renseigner dans la directive :
* C:\Program Files (x86)\EasyPHP\binaries\apache\bin\Certificat_1.csr.
* C:\Program Files (x86)\EasyPHP\binaries\apache\bin\Certificat_1.key.
* C:\Program Files (x86)\EasyPHP\binaries\apache\bin\Certificat_1.cert.
Le CSR n'a pas besoin d'être renseigné dans les directives, le certificat fichier expire après 365 jours.

## Autres aspects de sécurité

Le module headers peut assurer la protection contre le XSS et le clickjacking. Exemple :
Cela bloque les iFrames.
Pour tester une configuration, mieux vaut commencer par un .html plutôt que de la déployer sur tout le serveur en le redémarrant puis de faire machine arrière. Si en définissant la règle la plus permissive Firefox bloque tout de même quelque chose (Content Security Policy: Les paramètres de la page ont empêché le chargement d'une ressource à self ), il s'agit d'un bug connu qui n'affecte pas les autres navigateurs :
Par ailleurs, des sites d'audit gratuits peuvent ensuite révéler s'il reste des failles.

## Rediriger le flux HTTP vers HTTPS

Entrer la configuration suivante dans le fichier https.conf :
Pour le webhosting, le réglage doit être effectué à l'aide d'un fichier .htaccess, avec la configuration suivante :

## Références

* ↑ https://www.startssl.com/?app=21
* ↑ https://www.isicca.info/certificat-ssl-generer-son-certificat/
* ↑ http://doc.ubuntu-fr.org/tutoriel/comment_creer_un_certificat_ssl
* ↑ https://www.ssl247.fr/certificat-ssl-gratuit
* ↑ https://letsencrypt.org/
* ↑ http://doc.ubuntu-fr.org/tutoriel/securiser_apache2_avec_ssl
* ↑ http://www.finalclap.com/faq/414-certificat-ssl-https
* ↑ https://httpd.apache.org/docs/trunk/fr/mod/mod_headers.html
* ↑ http://content-security-policy.com/
* https://commaster.net/content/how-setup-lets-encrypt-apache-windows