« Apache2 Authentification par certificat » : différence entre les versions
Ligne 64 : | Ligne 64 : | ||
</VirtualHost> | </VirtualHost> | ||
== Installation du certificat == | === Installation du certificat sur le serveur web === | ||
=== Conversion du certificat au format .cer === | ==== 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. | # Ouvrir une '''session SSH''' sur le serveur web. | ||
Ligne 78 : | Ligne 78 : | ||
chmod 640 /etc/ssl/private/Chaine_de_certification-IGC-Sante.cer}} | chmod 640 /etc/ssl/private/Chaine_de_certification-IGC-Sante.cer}} | ||
=== Paramétrage de l’hôte virtuel === | ==== 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)'' : | * 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)'' : |
Version du 12 avril 2025 à 01:30
— 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
Prérequis
- Vous devez posséder le certificat publique de l'autorité émettant les certificats d'authentification des utilisateurs.
Certificats de l’autorité racine émettant les cartes à puce
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 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>
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.
- Voici un exemple de code permettant d’afficher l’ensemble des informations stockées dans le certificat :
<?php $certificat = openssl_x509_parse(openssl_x509_read(($_SERVER['SSL_CLIENT_CERT']))); echo "<pre>"; print_r($certificat); echo "</pre>"; ?>