# Redirige automatiquement tout le trafic http vers https
# (Ne pas autoriser le trafic en claire)
    # Remplacer "mon-medshake.fr" par le domaine utilisé
    ServerName        mon-medsahke.fr
    ServerAdmin	      admin@mon-medshake.fr
    RedirectMatch     permanent ^(.*)$ https://mon-medshake.fr$1
# Trafic https
    # Remplacer "mon-medshake.fr" par le domaine utilisé
    ServerName          mon-medshake.fr
    ServerAdmin		admin@mon-medshake.fr
    #
    # Configuration SSL
    #
        
    # Charge le Module SSL
    SSLEngine On
    # Certificat et clé créés par la pki pour le serveur.
    # Le certificat ayant été signé par la CA, les clients pourront aussi 
    # authentifier le serveur.
    SSLCertificateFile /var/local/easyrsa/medshake/pki/issued/medshake.crt
    SSLCertificateKeyFile /var/local/easyrsa/medshake/pki/private/medshake.key
    # Certificat de la CA. Nécessaire pour vérifier l'authenticité des certificats 
    # des clients.
    SSLCACertificateFile /var/local/easyrsa/medshake/pki/ca.crt
    # Liste des certificats révoqués, permet de refuser l'accès aux certificats 
    # déclarés comme compromis.
    SSLCARevocationFile /var/local/easyrsa/medshake/pki/crl.pem
    # Active la vérification des certificats clients optionnels (certains clients
    # du réseau local peuvent se connecter sans certificat pour utiliser des fonctionnalités 
    # comme phonecapture)
    SSLVerifyClient optional
    # Limite la vérification aux certificats du client.
    # (inutile ici de contrôler toute la chaîne on n'a qu'un niveau)
    SSLVerifyDepth 1
    # Sécurité renforcée, nous n'utiliserons que la version la plus récente de TLS
    # (rejette d'office les clients non suffisamment à jour)
    SSLProtocol -all +TLSv1.3
    # Ajoute l'entête http pour le HSTS
    Header always set Strict-Transport-Security "max-age=0; includeSubDomains"
    # Emplacement des fichiers html public de l'instance MedShake EHR/EDC 
    DocumentRoot /var/www/medshake/EHR/public_html/
    DirectoryIndex index.php
    # Fichier de log dédié avec un format compatible avec le lecteur de log intégré 
    # à Medshake
    CookieName apacheLogUserID
    # /!\ le domaine doit être préfixé d'un point
    CookieDomain .mon-medshake.fr
    Define MEDSHAKEEHRLOGFILE /var/log/apache2/access_medshake.log
    SetEnv MEDSHAKEEHRLOGFILE ${MEDSHAKEEHRLOGFILE}
    LogFormat "%{%Y-%m-%d %H:%M:%S}t %{c}a %r %{Cookie}n" usertrack
    SetEnvIf Request_URI "\.png$|\.gif$|\.jpg$|\.svg$|\.js$|\.css$|\.map$|\.ico$|\.woff2" do_not_log
    CustomLog ${MEDSHAKEEHRLOGFILE} usertrack env=!do_not_log
    
    # Des règles de réécriture d'urls sont nécessaires(voir le public_html/.htaccess)
    # On s'assure que le module est bien chargé
    RewriteEngine On
    # Grâce à "Require expr %{SSL_CLIENT_VERIFY} == 'SUCCESS" l'accès au fichier
    # de ce dossier n'est permis qu'aux clients disposant
    # d'un certificat signé par la CA et en cours de validité
    
        SetEnv MEDSHAKEEHRPATH /var/www/medshake/EHR/
        Require expr %{SSL_CLIENT_VERIFY} == 'SUCCESS'
        Options FollowSymLinks
        AllowOverride all
    
    
    # Accès aux url commençant par /phonecapture/ et /pubic/ autorisé pour les 
    # clients du réseau local sans présenter ce certificat valide
    
        # /!\ Replacer l'addresse ci-dessous par celle de votre réseau local
        Require ip 192.168.1.0/24
        # client de partout avec un certificat valide
	Require expr %{SSL_CLIENT_VERIFY} == 'SUCCESS'
    
    # Autorise l'accès aux assets (js, css et images) et pages de maintenance 
    # autorisés pour les clients du réseau local sans présenter ce certificat valide
    
        # Ces ressources peuvent êtres mise en cache
        Header setifempty Cache-Control "must-revalidate"
        # Fixe un bug présent dans le version de apache utilisé dans Debian 10(2.4.38)
        # qui gènère une entête http Etag mal formé et empêche un retour 304
        # quand la ressource est en cache.
        # voir https://bz.apache.org/bugzilla/show_bug.cgi?id=45023#c22
        RequestHeader edit "If-None-Match" '^"((.*)-gzip)"$' '"$1", "$2"'
        Require ip 192.168.1.0/24
        # client de partout avec un certificat valide
        Require expr %{SSL_CLIENT_VERIFY} == 'SUCCESS'
     
     # Bloque les accès aux fichiers composer (juste c'est plus propre)
     
         Require all denied