sudo apt-get install apache2
apachectl -v
sudo dnf install httpd
sudo systemctl start httpd sudo systemctl enable httpd
| /etc/apache2/apache2.conf | Fichier de configuration générale |
| /etc/apache2/ports.conf | Fichier contenant les ports à écouter, par défaut 80 (http) et 443 (https) |
| /etc/apache2/sites-available | Répertoire contenant les fichiers de conf pour les sites disponibles |
| /etc/apache2/sites-enabled | Répertoire contenant les liens vers fichiers de conf pour les sites activés (par a2ensite) |
| /etc/apache2/mods-available | Répertoire contenant les fichiers de conf des modules Apache disponibles |
| /etc/apache2/mods-enabled | Répertoire contenant les liens vers les modules Apache activés (par a2enmod) |
| /etc/httpd/conf/httpd.conf | Fichier de configuration générale |
| /etc/httpd/conf.d | Répertoire contenant les fichiers de conf pour les sites disponibles |
| /etc/httpd/conf.modules.d | Répertoire contenant les fichiers de conf avec les modules Apache à charger |
En cas de problème de droits (Erreur 403) vérifier si selinux est activé, vérifier les logs et changer les droits des fichiers :
sestatus tail -f /var/log/audit/audit.log sudo chcon -R -t httpd_sys_content_t /var/www/html/
<VirtualHost *:80> ServerName www.site.com ServerAlias site.com DocumentRoot "/var/www/html/site" ErrorLog ${APACHE_LOG_DIR}/site.error.log CustomLog ${APACHE_LOG_DIR}/site.access.log combined </VirtualHost>
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName www.site.com ServerAlias site.com DocumentRoot "/var/www/html/site" ErrorLog ${APACHE_LOG_DIR}/site.error.log CustomLog ${APACHE_LOG_DIR}/site.access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key </VirtualHost> </IfModule>
<VirtualHost *:80> ServerName www.site.com ErrorLog ${APACHE_LOG_DIR}/site.error.log CustomLog ${APACHE_LOG_DIR}/site.access.log combined Redirect permanent / https://site.com/ </VirtualHost>
<VirtualHost *:80> ServerName xxx.xxx.xxx.xxx <Directory /> Deny from all </Directory> </VirtualHost> <VirtualHost *:443> ServerName xxx.xxx.xxx.xxx <Directory /> Deny from all </Directory> </VirtualHost>
Dans l'exemple suivant on bloque l'accès pour les url non prévues.
<VirtualHost _default_:80> ErrorLog ${APACHE_LOG_DIR}/default-http.error.log CustomLog ${APACHE_LOG_DIR}/default-http.access.log combined <Directory /var/www/html> Require all denied </Directory> </VirtualHost> <IfModule mod_ssl.c> <VirtualHost _default_:443> ErrorLog ${APACHE_LOG_DIR}/default-https.error.log CustomLog ${APACHE_LOG_DIR}/default-https.access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key <Directory /var/www/html> Require all denied </Directory> </VirtualHost> </IfModule>
sudo apache2ctl -M ⇒ liste les modules Apache chargés sudo a2enmod <module> ⇒ activation module sudo a2ensite <fichier> ⇒ activation site sudo apachectl configtest ⇒ test de la configuration sudo systemctl reload apache2 ⇒ recharge la configuration Apache sudo systemctl restart apache2 ⇒ redemarre le service Apache
sudo a2enmod ssl
sudo dnf install mod_ssl
Ajouter une directive SSLProxyMachineCertificateFile pour pointer sur le fichier contenant le certificat du client.
sudo apt-get install openssl
cd /etc/ssl sudo openssl genrsa -out cle-privee.pem 2048
sudo openssl req -new -key cle-privee.pem -out demande-csr.pem
openssl req -text -noout -in demande-csr.pem
sudo openssl x509 -req -days 365 -in demande-csr.pem -signkey cle-privee.pem -out certificat.pem
openssl x509 -noout -text -in certificat.pem
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt
openssl genrsa -out serveur.key 2048
openssl req -new -key serveur.key -out serveur.csr
openssl x509 -req -in serveur.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out serveur.crt -days 365 -sha256
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] IP.1 = 13.36.137.5 IP.2 = 10.1.3.23 IP.3 = 127.0.0.1 DNS.1 = localhost DNS.2 = e2e-r23-ngrfid
cat serveur.key serveur.crt > serveur.pem
Pour que les clients reconnaissent le certificat auto-signé comme “fiable”, il faut installer le fichier ca.crt sur chaque client ou application qui se connectera au serveur.
sudo cp ca.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates
sudo apt-get install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install python-certbot-apache
sudo snap install core sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot sudo apt-get install python3-certbot-apache
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm sudo dnf install certbot python3-certbot-apache
sudo certbot --apache certonly
sudo certbot --apache certonly –d url1,url2,...
sudo certbot --standalone certonly -d url1,url2,...
sudo certbot certificates
sudo certbot delete --cert-name <nom>
Pour ne pas laisser le port 80 ouvert :
sudo certbot -q renew --dry-run --standalone
openssl s_client -connect @IP:port
Il est possible d'utiliser le script ssl-cert-check pour vérifier l'expiration des certificats.
ssl-cert-check -d /etc/letsencrypt/live/*/*.pem
https://geekflare.com/http-header-implementation/
https://developers.google.com/web/fundamentals/security/csp
https://developer.mozilla.org/fr/docs/Web/HTTP/Headers
Force la communication en utilisant HTTPS au lieu de HTTP.
Indique si le navigateur est autorisé à afficher une page dans un <frame>, <iframe> ou <object>.
Désactive le repérage MIME et force le navigateur à utiliser le type donné dans Content-Type.
Active le filtrage de script intersite.
Contrôle les ressources que l'agent utilisateur est autorisé à charger pour une page donnée.
Paramètres :
Valeurs :
Spécifie si un fichier de règlementation interdomaines (crossdomain.xml) est autorisé. Ce fichier peut définir une règle pour accorder aux clients (comme Adobe Flash Player, Adobe Acrobat, Microsoft Silverlight ou Apache Flex) la permission de gérer des données entre domaines qui seraient autrement restreintes à cause de Same-Origin Policy.
Indique quelles informations de provenance envoyées dans l'en-tête Referer doivent être incluses dans les requêtes effectuées.
Permet de contrôler de manière stricte ou non l'adhérence aux règles de transparence des certificats, permettant ainsi de limiter les utilisations frauduleuses du certificat associé au site grâce à une vérification publique.
sudo a2enmod headers sudo systemctl reload apache2
Header always set Strict-Transport-Security "max-age=15552001; includeSubDomains;" Header always append X-Frame-Options SAMEORIGIN Header set X-Content-Type-Options nosniff Header set X-XSS-Protection "1; mode=block" Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' *.lab.acs.altran.fr; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.lab.acs.altran.fr" Header set X-Permitted-Cross-Domain-Policies "none" Header set Referrer-Policy "no-referrer" Header set Expect-CT 'enforce, max-age=43200'
Pour trouver ce qui cloche lorsque la page ne s'affiche plus correctement, utiliser les outils de developpement Web du navigateur (Appuyer sur les touches Ctrl⇧ ShiftI).
<Directory /var/www/html> AuthName 'Private' AuthType Digest AuthDigestDomain / AuthDigestProvider file AuthUserFile /var/www/data/.htdigest Require valid-user </Directory>
sudo a2enmod auth_digest
sudo a2enmod proxy proxy_http
<IfModule mod_ssl.c> # site avec 2 chemins d'accès vers 2 machines différentes <VirtualHost *:443> ServerName site.fr ErrorLog ${APACHE_LOG_DIR}/site.error.log CustomLog ${APACHE_LOG_DIR}/site.access.log combined ProxyPreserveHost On ProxyRequests Off ProxyVia Off ProxyPass /chemin1 https://@IP1:port1/ ProxyPassReverse /chemin1 https://@IP1:port1 ProxyPass /chemin2 https://@IP2:port2/ ProxyPassReverse /chemin2 https://@IP2:port2 SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key SSLProxyEngine On SSLProxyCheckPeerCN Off SSLProxyCheckPeerName Off SSLProxyCheckPeerExpire off SSLProxyVerify none </VirtualHost> # websocket avec rewrite <VirtualHost *:443> ServerName domaine2.fr ErrorLog ${APACHE_LOG_DIR}/domaine2.error.log CustomLog ${APACHE_LOG_DIR}/domaine2.access.log combined ProxyPreserveHost On ProxyRequests Off ProxyVia Off ProxyPass / https://xxx.xxx.xxx.xxx:port2/ ProxyPassReverse / https://xxx.xxx.xxx.xxx:port2/ RewriteEngine On RewriteCond %{HTTP:Upgrade} =websocket [NC] RewriteRule ^/(.*) wss://xxx.xxx.xxx.xxx:port2/$1 [P,L] SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key SSLProxyEngine On SSLProxyCheckPeerCN Off SSLProxyCheckPeerName Off SSLProxyCheckPeerExpire off SSLProxyVerify none </VirtualHost> </IfModule>
Sur Redhat SELinux bloque la connexion, il faut passer la commande suivante :
sudo setsebool -P httpd_can_network_connect 1