Certificat SSL
Let's Encrypt est une autorité de certification SSL gérée par l'Internet Security Research Group (ISRG). Elle utilise l'environnement de gestion automatisée des certificats (ACME) pour déployer automatiquement des certificats SSL gratuits auxquels font confiance presque tous les principaux navigateurs.
Intaller Let's Encrypt
sudo apt update && sudo apt upgrade
sudo apt-get install git
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
cd /opt/letsencryptCréer un certificat SSL
sudo -H ./letsencrypt-auto certonly --standalone -d example.com -d www.example.com
certbot certonly --authenticator webroot -w /home/www/cheminsdetraverse/prod/public -d librairiecheminsdetraverse.comVérifier le certificat
sudo ls /etc/letsencrypt/live
./certbot-auto certificates
Renouveler un certificat
./letsencrypt-auto renew
Renouveler tous les certificats
certbot renew Supprimer un certificat
certbot delete --cert-name example.com
https://www.linode.com/docs/security/ssl/install-lets-encrypt-to-create-ssl-certificates/
Commandes
Demarer le serveur Apache
systemctl start apache2.service
Arrêter le serveur Apache
systemctl stop apache2.service
Redemarer les serveur Apache
systemctl restart apache2.service
Redemarer mysql
sudo service mysql restart
Hosts
Le fichier hosts est utilisé sous tous les systèmes d’exploitations lors de l’accès à Internet, ce fichier est consulté avant l’accès au serveur DNS. C’est un simple fichier qui contient sur la même ligne une adresse IP et parfois le nom de domaine.
Ce fichier permet de bloquer l’accès à un site Internet, de le rediriger, de bloquer les pubs et d’améliorer l’accès à des sites en fonction de la configuration de celui-ci. Il peut être utile pour protéger votre ordinateur, empêcher un enfant (par exemple) d’accéder à un site particulier.
Ce fichier peut aussi servir à définir les noms des machines sur un réseau local
/etc/hosts
127.0.0.1 localhost
127.0.1.1 nom_du_pc
127.0.0.1 domaine_local_1 domaine_local_2
0.0.0.0 site_à_bloquer
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Installer un certificat SSL sur Apache 2
Activation des modules d'Apache
Vous devez préalablement activer le module SSL Apache et éventuellement le module Headers (optionnel : Il permet d'activer le HSTS) :
# Activer le module SSL Apache
a2enmod ssl
# Activer le module Headers
a2enmod headers
# Redémarrer le service pour prendre en compte l'activation des modules
service apache2 restartSauvegarde du certificat SSL et de sa clé privée sur le serveur
Nous vous conseillons de créer un répertoire dans "/etc/ssl" et d'y placer l'ensemble des certificats ".cer" ainsi que votre clée privée ".key".
1. S'assurer qu'Apache écoute le port 443 (protocole https) :
Commençons par vérifier si Apache écoute le port 443 (port utilisé par le protocole https). Exécutez la commande ci-dessous, qui doit vous retourner un résultat :
netstat -tanpu | grep "LISTEN" | grep "443" En l'absence de résultat, le serveur Web n'écoute pas le port 443. La directive "Listen 443" ne doit pas être présente dans la configuration. Vérifions :
grep -R "Listen" /etc/apache2 Si aucun résultat n'est retourné par cette commande, vous devez éditer la configuration d'Apache (/etc/apache2/ports.conf) afin d'ajouter :
<IfModule mod_ssl.c>
Listen 443
</IfModule>
Il ne vous reste plus qu'à redémarrer Apache pour que cette configuration soit prise en compte. Vérifiez à nouveau si le port 443 est écouté :
# Redémarrez Apache :
service apache2 restart
# Vérifiez qu'Apache écoute bien le port 443 (https) :
netstat -tanpu | grep "LISTEN" | grep "443" 2. Trouver et copier le Virtual Host actuellement utilisé par Apache en HTTP :
Pour obtenir une configuration identique en HTTP ainsi qu'en HTTPS, nous vous conseillons de dupliquer la configuration déjà utilisée sur le protocole HTTP.
Si votre serveur héberge plusieurs sites web, il doit utiliser la directive ServerName. Vous allez donc pouvoir trouver le VirtualHost à dupliquer via la commande ci-dessous :
# Commencez par vous déplacer dans le répertoire "sites-available"
cd /etc/apache2/sites-available
# Recherchez la configuration d'Apache (généralement présente dans "sites-available")
grep -R "site-a-securiser.fr" /etc/apache2 Si vous n'obtenez aucun résultat, la directive ServerName ne doit pas être utilisée. Vérifiez si un fichier de configuration est présent dans le répertoire "sites-available".
Si vous n'arrivez pas à trouver le VirtualHost, la configuration chargée par Apache est surement présente dans "/etc/apache2/apache2.conf".
Une fois le VirtualHost trouvé, dupliquez le pour conserver une base de configuration identique sur les deux protocoles (HTTP et HTTPS) ou éditez le "/etc/apache2/apache2.conf"
cp nom-du-vhost.conf nom-du-vhost-ssl.conf 3. Configuration du VirtualHost Apache pour le protocole HTTPS (port 443) :
Remplacez le port 80 par le port 443 dans la configuration du Virtual Host : <VirtualHost *:443> puis ajoutez la configuration ci-dessous :
# Activation du SSL
SSLEngine On
# Activation de tous les protocoles sécurisés (TLS v1.3 et TLS v1.2) tout en désactivant les protocoles obsolètes (TLS v1.0 et 1.1) et ceux non sécurisés (SSL v2, SSL v3)
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
# On active les méthodes de chiffrement, et on désactive les méthodes de chiffrement non sécurisés (par la présence d'un !)
SSLCipherSuite HIGH:!aNULL:!MD5:!ADH:!RC4:!DH:!RSA
# Le navigateur devra choisir une méthode de chiffrement en respectant l'ordre indiquée dans SSLCipherSuite
SSLHonorCipherOrder on
# Chemin vers le certificat SSL de votre nom de domaine
SSLCertificateFile "/etc/ssl/www-nom-domaine-fr/www-nom-domaine-fr.cer"
# Chemin vers la clée privée du certificat SSL de votre nom de domaine
SSLCertificateKeyFile "/etc/ssl/www-nom-domaine-fr/www-nom-domaine-fr.key"
# Chemin vers le certificat SSL racine, puis vers le certificat SSL intermédiaire. Attention : L'ordre est important.
SSLCACertificateFile "/etc/ssl/www-nom-domaine-fr/certificat-racine.cer"
SSLCACertificateFile "/etc/ssl/www-nom-domaine-fr/certificat-intermediaire.cer" Si toutes les pages de votre site doivent être sécurisées, ajoutez la directive ci-dessous, qui va activer le HSTS (HTTP Strict Transport Security).
Header always set Strict-Transport-Security "max-age=15768000" 4. Activer la configuration Apache et tester le bon fonctionnement du SSL :
# Activer le VirtualHost présent dans "sites-available"
a2ensite nom-du-vhost-ssl
# Si toutefois vous devez désactiver ce VirtualHost, exécutez : a2dissite nom-du-vhost-ssl
# Redémarrer Apache pour la prise en compte de ce nouveau VirutalHost
service apache2 restart
Virtual host
/etc/apache2/sites-available/nom_de_domaine.conf
<VirtualHost *:80 >
ServerName template
DocumentRoot /home/patrick/Sites/template
<Directory "/home/patrick/Sites/template">
Require all granted
AllowOverride all
Options +Indexes
</Directory>
</VirtualHost>
Require all denied
<VirtualHost *:80> | On accepte les connexions sur n'importe quelle IP du serveur (*) sur le port 80. |
| ServerName example.com | Cet hôte virtuel sera seulement appelé pour le nom de domaine example.com… |
| ServerAlias www.example.com | …ainsi que pour le sous-domaine www.example.com. On peut spécifier ici d'autres noms de domaine en les séparant par un espace. On peut aussi utiliser *.example.com pour inclure tous les sous-domaines. |
| DocumentRoot "/var/www/example" | On placera les fichiers du site dans le répertoire /var/www/example. |
| <Directory "/var/www/example"> | On spécifie dans cette section des règles pour le répertoire /var/www/example sous cet hôte virtuel. |
| Options +FollowSymLinks | Apache suivra les liens symboliques qu'il trouvera dans ce répertoire (et ses descendants). |
| AllowOverride all | On pourra inclure une configuration personnalisée via un fichier .htaccess. |
| Require all granted | Tous les visiteurs pourront accéder au contenu de ce répertoire. Voir la documentation officielle pour modifier ce comportement. Pour des raisons de sécurité ou de privacité on peut par exemple limiter l'accès au serveur à seulement une ou certaines adresses IP avec une directive du type Require ip 192.168.1.10. |
| ErrorLog /var/log/apache2/error.example.com.log CustomLog /var/log/apache2/access.example.com.log combined | Il est pratique d'avoir des logs séparés pour chaque hôte virtuel, afin de ne pas mélanger toutes les informations. |
- Require all granted => Tout accepter
- Require host example.org => Accepter example.org
- Require ip 1.2.3.4 => Accepter 1.2.3.4
- Require not ip 1.2.3.4 => Refuser 1.2.3.4
Activation des sites
sudo a2ensite template.conf
Tester la configuration
apachectl -t
Rechargement du fichier config apache
sudo service apache2 reload