Si vous souhaitez me remonter des informations, ne pas hésiter
Il y a plusieurs façon de restreindre un accès à certaines parties d'un site web, dont l'authentification par mot de passe ou la restriction par IP.
L'authentification par mot de passe est la moins fiable, le mot de passe peut être trouvé par brute force ou dictionnaire (fail2ban peut corriger en partie ce problème).
La restriction par IP manque de flexibilité (difficulté de lister toutes les IP, ou plage d'IP avec un risque d'erreurs, dans le cas de périphériques mobiles) (cela peut être corrigé avec un vpn).
L'autre possibilité, peut connue, c'est l'authentification par certificat. Vous avez un certificat qui a été certifier par votre propre autorité de certification. Vous mettez dans la configuration d'Apache votre AC, et vous mettez votre certificat dans votre navigateur. Ainsi, si le certificat est bien signiez par l'Authorité de Certification présente sur le serveur, alors il vous laisse l'accès à la page ou au domaine suivant ce que vous bloquez
Il est recommandé de faire des Vhost par sous domaine pour les accès par certificat, afin d'éviter les effets de bord permettant à des attaquants de pouvoir accèder au chemin sécurisés par le certificat
Ex : blog.chezme.eu/yoyo -> yoyo.blog.chezme.eu
Attention à bien adapter la clé avec le temps, car peut être dans 6 mois il faudra créer des clés en 4096 sinon votre navigateur vous refusera la clé avec le message suivant :
"SSL_ERROR_BAD_CERT_ALERT" SSLCACertificateFile
Comme par défaut openssl chiffre en 2048, vous pouvez enlever 2048, ainsi le chiffrement sera celui par défaut, quand la norme changera, pas besoin d'adapter
openssl genrsa -des3 -out CA.key 2048
Explication :
Il vous sera demande d'entrer un mot de passe, indiquer un mot de passe fort :
Enter pass phrase for CA.key:
Verifying - Enter pass phrase for CA.key:
Il sera valide 3650 j soit environ 10 ans
Vous pouvez indiquer tout et n'importe quoi pour la CA comme pour le CSR client, ce qui importe, c'est que le certificat client soit signé par l'autorité de certification
Je vous conseille tout de même de remplir correctement les champs afin de reconnaître vos certificats si vous en faites plusieurs
Lors de la question Common Name (e.g. server FQDN or YOUR name) []: je vous conseille d'indiquer le sous domaine ou domaine utilisé pour l'authentification (pour la partie CA) et le nom ou prénom (pour la partie client)
openssl req -x509 -new -key CA.key -sha256 -days 3650 -out CA.pem
Explication :
Il vous sera demandé les choses suivantes :
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Yvelines
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Chezme
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:chezme.eu
openssl genrsa -out yoann.key 2048
Le fichier CSR contient les informations de l'entreprise qui seront vérifiées par l'autorité de certification à laquelle vous en faites la demande, dans notre cas nous même
openssl req -key yoann.key -new -out yoann.csr
On vous demandera de remplir les champs suivants :
Laissez le challenge password vide en appuyant sur entrée
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Yvelines
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:Yoann
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Il sera valide 365 j soit environ 1 an
Explication :
openssl x509 -req -days 365 -in yoann.csr -CA CA.pem -CAkey CA.key -set_serial 01 -out yoann.crt
Il vous sera demandé
Enter pass phrase for CA.key:
openssl pkcs12 -export -clcerts -inkey yoann.key -in yoann.crt -out yoann.p12 -name "yoann"
Explication :
Indiquer le mot de passe du p12, il vous sera demandé lors de l'enregistrement dans le navigateur. enregistrer le dans votre keepass
Enter Export Password:
Verifying - Enter Export Password:
Il suffit d'ajouter cela dans le site, n'oublier pas de copier le CA.pem au bon endroit et de modifier la ligne SSLCACertificateFile
SSLEngine On
SSLVerifyClient require
SSLCACertificateFile /etc/ssl/certs/Ca.pem
SSLVerifyDepth 1
Explication :
Dans cette exemple, on remarque que dans le directory est indiqué la partie vérification et le reste et dans le contenu du Vhost
SSLEngine On
SSLCACertificateFile /etc/ssl/certs/CaPub.pem
<Location "/adm">
SSLVerifyClient require
SSLVerifyDepth 1
</Location>
Allez dans edition/paramètre
Chercher Certificat dans la barre de recherche
Cliquez sur afficher les certificat / importer / choissisez votre fichier / Indiquez le mot de passe du p12
Voici le p12 enregistrer
Voici le type de popup qui s'affiche lors de l'authentification
Repris du site d'apache
elle s'applique au processus d'authentification du client utilisé au cours de la négociation SSL standard lors de l'établissement d'une connexion.
Dans un contexte de répertoire, elle force une renégociation SSL avec le client selon la nouvelle profondeur spécifiée, après la lecture d'une requête HTTP, mais avant l'envoi de la réponse HTTP.
La création de certificat pour l'authentification vu dans cette doc peut être intéressant dans des très petits entreprises, dans de plus grosses sociétés, il sera préférable de mettre en place un outil permettant d'automatiser un maximum la tache t-elle que EJBCA
Je n'ai montré que le plus simple, mais les possibilités sont enorme, pour cela je vous laisse consulter le site suivant :
Apache certificat
Apache
https://httpd.apache.org/docs/2.4/fr/ssl/ssl_howto.html
https://httpd.apache.org/docs/2.4/fr/mod/mod_ssl.html
https://ungeek.fr/http-ssl-client-certificate/
https://www.linuxtricks.fr/wiki/openssl-creation-de-certificats-et-ca-autosignes
Openssl
https://linux.die.net/man/1/openssl
https://www.openssl.org/docs/man1.0.2/man1/pkcs12.html
https://www.openssl.org/docs/manmaster/man1/openssl-req.html