Apache2 Authentification par certificat

De NCad Wiki
Aller à la navigation Aller à la recherche

Serveur Web

Installation d'Apache2 Paramétrage courant

Certificats SSL Web | .htaccess | Authentification par certificat | Authentification par carte à puce PKI | Certificats Let's Encrypt


Archives : Ancien article sur Apache2 | Module Whois | ProFTPd


Note de version


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.

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.

  1. Se rendre sur le site web de l’autorité de certification IGC-Santé accessible depuis le lien http://igc-sante.esante.gouv.fr.
  2. Télécharger le fichier de certificat au format PKCS#7 (P7B) regroupant tous les certificats racine de l’autorité.
  3. 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.

  1. Ouvrir une session SSH sur le serveur web.
  2. Se rendre dans le répertoire où a été téléversé le fichier de certificat p7b.
  3. 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
  4. Déplacer le fichier convertit dans le répertoire /etc/ssl/private :
    mv Chaine_de_certification-IGC-Sante.cer /etc/ssl/private
  5. Affecter les autorisations adéquates sur le certificat pour permettre d'être lu par l’utilisateur www-data :

chown root:www-data /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

  • 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.