Apache2 Authentification par certificat
— Serveur Web —
Certificats SSL Web | .htaccess | Authentification par certificat | Authentification par carte à puce PKI | Certificats Let's Encrypt
Archives : Ancien article sur Apache2 | Module Whois | ProFTPd
Récupération du certificat de l'autorité racine
Autorité de certification personnelle
Il est possible d'utiliser le certificat de sa propre Autorité de Certification Personnel.
- Pour l'installation d'une autorité de certification privée sous Debian, se référer à articles suivants :Installation de l’autorité de certification (AC).
- Pour l'installation d'une autorité de certification privée sous Windows Server, se référer à articles suivants : Installation du rôle ADCS.
Autorité de certification IGC-Santé
Cette autorité émet et signe les certificats installés sur les cartes à puce de professionnel de santé appelées carte CPx. En installant le certificat de cette autorité racine, les détenteurs d'une carte CPx pourront s'identifier sur le serveur web Apache2.
- Se rendre sur le site web de l’autorité de certification IGC-Santé accessible depuis le lien http://igc-sante.esante.gouv.fr.
- Télécharger le fichier de certificat au format PKCS#7 (P7B) regroupant tous les certificats racine de l’autorité.
- Téléverser ce fichier sur le serveur web via une connexion SFTP.
Configuration
Configuration de l'hôte virtuel
- Pour illustrer cette documentation – nous déploierons à titre d’exemple – l’authentification par carte à puce sur le site web fictif www.smartcard.lan.
- Sur notre serveur web Apache2, ce site dispose d’un vhost dédié. Voici la configuration initiale de ce vhost sauvegardée dans le fichier /etc/apache2/sites-available/www.smartcard.lan.conf :
<VirtualHost *:80> DocumentRoot /var/www/smartcard.lan/www/ ServerName www.smartcard.lan ErrorLog ${APACHE_LOG_DIR}/smartcard.lan_error.log CustomLog ${APACHE_LOG_DIR}/smartcard.lan_access.log combined RedirectPermanent "/" "https://www.smartcard.lan" <Directory /var/www/smartcard.lan/www/> allow from all AllowOverride all Options +Indexes </Directory> </VirtualHost> <VirtualHost *:443> DocumentRoot /var/www/smartcard.lan/www/ ServerName www.smartcard.lan ErrorLog ${APACHE_LOG_DIR}/smartcard.lan_error.log CustomLog ${APACHE_LOG_DIR}/smartcard.lan_access.log combined <Directory /var/www/smartcard.lan/www/> allow from all AllowOverride all Options +Indexes </Directory> SSLEngine on SSLCertificateFile /etc/ssl/private/smartcard.lan.crt SSLCertificateKeyFile /etc/ssl/private/smartcard.lan.key </VirtualHost>
Installation du certificat de l'Autorité Racine sur le serveur web
Conversion du certificat au format .cer
Si le fichier de certificat récupéré est au format p7b, ce dernier ne peut pas être exploité par le serveur web Apache2. Il est nécessaire de convertir le fichier au format cer.
- Ouvrir une session SSH sur le serveur web.
- Se rendre dans le répertoire où a été téléversé le fichier de certificat p7b.
- Exécuter la commande suivante pour la conversion :
Openssl pkcs7 -print_certs -in Chaine_de_certification-IGC-Sante.p7b –out Chaine_de_certification-IGC-Sante.cer
- Déplacer le fichier convertit dans le répertoire /etc/ssl/private :
mv Chaine_de_certification-IGC-Sante.cer /etc/ssl/private
- Affecter les autorisations adéquates sur le certificat pour permettre d'être lu par l’utilisateur www-data :
|
|
Paramétrage de l’hôte virtuel
- Editer le fichier de configuration de l’hôte virtuelle smartcard.lan à l'emplacement /etc/apache2/sites-available/www.smartcard.lan.conf, puis y ajouter les lignes suivantes (en vert) :
<VirtualHost *:80> DocumentRoot /var/www/smartcard.lan/www/ ServerName www.smartcard.lan ErrorLog ${APACHE_LOG_DIR}/smartcard.lan_error.log CustomLog ${APACHE_LOG_DIR}/smartcard.lan_access.log combined RedirectPermanent "/" "https://www.smartcard.lan" <Directory /var/www/smartcard.lan/www/> allow from all AllowOverride all Options +Indexes </Directory> </VirtualHost> <VirtualHost *:443> DocumentRoot /var/www/smartcard.lan/www/ ServerName www.smartcard.lan ErrorLog ${APACHE_LOG_DIR}/smartcard.lan_error.log CustomLog ${APACHE_LOG_DIR}/smartcard.lan_access.log combined <Directory /var/www/smartcard.lan/www/> allow from all AllowOverride all Options +Indexes </Directory> SSLEngine on SSLCertificateFile /etc/ssl/private/smartcard.lan.crt SSLCertificateKeyFile /etc/ssl/private/smartcard.lan.key SSLCACertificateFile /etc/ssl/private/Chaine_de_certification-IGC-Sante.cer SSLProtocol -all +TLSv1.1 +TLSv1.2 SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 SSLHonorCipherOrder on <Directory /var/www/smartcard.lan/www/> SSLOptions +StdEnvVars +ExportCertData SSLVerifyClient require SSLVerifyDepth 4 SSLRequireSSL Options –Indexes AllowOverride All Allow from all </Directory> <Location /var/www/smartcard.lan/www/> RewriteEngine On RewriteCond %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS RewriteRule .? - [F] ErrorDocument 403 https://diagcps.eservices.esante.gouv.fr/?URL=https://smartcard.lan </Location> </VirtualHost>
Test et validation
Récupération des données du certificat
- Lorsqu’un certificat est utilisé pour l’authentification, les données de ce dernier sont accessibles via la variable globale serveur $_SERVER[‘SSL_CLIENT_CERT’].
- La lecture des données du certificat contenues dans cette variable, s’effectue à l’aide la fonction PHP openssl_x509_read().
- Il est également nécessaire de parser le contenu à l’aide de la fonction openssl_x509_parse() pour en extraire les données utiles.
Lecture des informations du certificat
- À la racine du répertoire web de l'hôte virtuel smartcard.lan, créer le fichier index.php avec le code suivant :
<?php $certificat = openssl_x509_parse(openssl_x509_read(($_SERVER['SSL_CLIENT_CERT']))); echo "<pre>"; print_r($certificat); echo "</pre>"; ?>
- À l'aide d'un navigateur web, se rendre à l'url https://www.smartcard.lan.
- La navigateur affichera une boîte de dialogue invitant à sélectionner un certificat.
- Une fois le choix validée, les informations du certificat apparaissent sur le navigateur web.
|
À ce stade, l'authentification par certificat est fonctionnel. Cependant, en l'état elle doit être utilisée comme solution MFA. |