Ceci est la seconde partie du tutoriel permettant de configurer apache avec une authentification forte et un certificat client sur Raspberry. Voir ici les étapes 1 à 3.
Etape 4 – Configurer votre serveur apache pour utiliser SSL / https
J’utilise ici les paramètres et le site par défaut créé lors de l’installation d’Apache. Si vous avez des sites spécifiques vous n’avez qu’à corriger et remplacer /etc/apache2/sites-available/default par votre propre répertoire de site.
Editez le fichier : /etc/apache2/sites-available/default, et modifiez le contenue entre les balises <VirtualHost *:443> </VirtualHost> par les informations suivantes :
<VirtualHost *:443> ServerAdmin webmaster@localhost DocumentRoot /var/www ################################################ ### Default directories ################################################ <Directory /> Options FollowSymLinks AllowOverride All </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride All Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ################################################ ### SSL settings ################################################ ServerName domain SSLEngine On SSLCertificateFile /etc/apache2/cert/server.crt SSLCACertificateFile /etc/apache2/cert/ca.crt SSLCertificateKeyFile /etc/apache2/cert/server.nopassphrase.key ################################################ ### Mains directory seting ################################################ <Directory /var/www/> # From the Internet only HTTPS + Strong-Cipher + Password # or the alternative HTTPS + Strong-Cipher + Client-Certificate # If HTTPS is used, make sure a strong cipher is used. # Additionally allow client certs as alternative to basic auth. SSLVerifyClient optional SSLVerifyDepth 1 SSLOptions +FakeBasicAuth +StrictRequire SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128 # Allow Network Access and/or Basic Auth Satisfy all # HTTP Basic Authentication AuthType basic AuthName "Protected Intranet" AuthBasicProvider file AuthUserFile "/path/to/htpasswd/.htpasswd" Require valid-user </Directory> # Possible values include: debug, info, notice, warn, error, crit, LogLevel warn ErrorLog ${APACHE_LOG_DIR}/rproxy_error.log CustomLog ${APACHE_LOG_DIR}/rproxy_access.log combined </VirtualHost>
Vous devez bien entendu modifier le paramètre AuthUserFile avec l’emplacement réel de votre fichier de mot de passe. Si vous n’en avez pas déjà un vous pouvez l’ajouter par exemple dans : /etc/apache2/secure_dir.
Ensuite, le module ssl doit être activé pour apache :
sudo a2enmod ssl
Etape 5 : Adapter le fichier AuthUserFile et redémarrer apache
Cette étape est obligatoire si vous ne souhaitez pas avoir à renseigner un mot de passe si vous possédez un certificat client.
Vous devez simplement exécuter le script si dessous et copier/coller les informations affichées dans votre fichier de mot de passe :
cd /etc/apache2/cert curl -o https://raw.githubusercontent.com/Sirus10/SSL-Raspberry-Apache/master/export_cert_to_AuthUserFile.sh chmod +x ./export_cert_to_AuthUserFile.sh ./export_cert_to_AuthUserFile.sh
Les lignes affichées lors de l’exécution du scripts doivent être ajouter dans votre fichier de mots de passe (AuthUserFile) tel quel. (voir ici et ici pour les explications)
Maintenant vous pouvez redémarrer apache :
/etc/init.d/apache2 restart
Etape 6 : Installer les certificats dans votre navigateur
En utilisant filezila ou un autre utilitaire de transfer ftp télécharger les 2 fichiers suivant sur votre ordinateur :
- ca.cert qui est le certificat de votre autorité de certification (Root CA)
- client.p12 qui est votre certificat client pour l’authentification
Puis double-cliquez sur le fichier ca.cert et suivez ces instruction :
Cliquez sur suivant et validez. Vous allez voir la notification confirmant que votre nouvel autorité de certification est validée et ajoutée à votre navigateur comme autorité de confiance. A partir de ce moment tout les certificats signés par cette autorité seront reconnus et validés comme des certificat de confiance.
Il vous reste maintenance à installer le certificat client, pour cela cliquez sur client.p12 et suivez les instructions en laissant les informations par défaut. Si vous avez bien suivis l’étape 2 vous n’aurez pas besoin de renseigner de mot de passe.
Ces deux étapes seront à faire sur tout les ordinateurs depuis lequel vous souhaitez vous connecter à votre Raspberry en mode sécurisée.
Une fois que vous en êtes là vous pouvez relancer votre navigateur internet (complètement pas uniquement les onglets)
puis vous connecter sur la page web de votre Raspberry comme par exemple: https://votre_nom_de_domaine.net votre navigateur vous demandera de choisir un certificat client, cliquez sur ok et vous serez normalement connecté.
C’est fini, si vous avez suivis l’ensemble des point précédent vous pouvez désormais vous connecter à votre raspberry avec une connexion https sécurisé crypté et une authentification forte.
J’espère que vous avez appréciée ce tutoriel, si vous avez des questions ou des problèmes pour configure votre serveur dites moi le ici je tenterai de vous aider au mieux…
Ps 1 : pour l’étape 6, la méthode pour ajouter un certificat à votre navigateur est valide pour chrome et internet explorer uniquement. Pour firefox c’est un peu diferent je tenterais de vous faire un tutoriel prochainement…
Ps 2 : A ce jour, à moins de passer root sur votre téléphone android il n’y a pas de solution pour ajouter un root certificat sur android; (pour iphone je n’en ai aucune idée)
Ps 3 : prochainement je vous expliquerez comment j’ai configurer mon serveur apache en revers-proxy et ainsi permis une connexion sécurise depuis le web à plusieurs de mes services web tel que domoticz ou RPI-monitor ou pourquoi par une camera IP…
Bonjour,
Pourriez vous expliquer comment mettre en place une authentification uniquement avec les certificats ? J’ai l’impression que mon certificat n’est pas reconnu par le serveur car quand je SSLVERIFY à require je n’ai plus accès au site
Merci
Ping : Script monitoring certificats SSL / HTTPS | Domotic and stupid geek stuff