« Apache2 Authentification par carte à puce » : différence entre les versions
Aller à la navigation
Aller à la recherche
Installation d'Apache2 Paramétrage courant
Ligne 121 : | Ligne 121 : | ||
</Location></span> | </Location></span> | ||
</VirtualHost> | </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>"; | |||
?> |
Version du 13 juillet 2024 à 20:32
— Serveur Web —
Certificats SSL Web | .htaccess | Authentification par carte à puce | Certificats Let's Encrypt
Archives : Ancien article sur Apache2 | Module Whois | ProFTPd
Certificats de l’autorité racine émettant les cartes à puce
- 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 initiale
- 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
Conversion du certificat au format .cer
En l’état, le fichier de certificat au format p7b 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 "
"; print_r($certificat); echo "
";
?>