SSL authentication

L’authentification par certificats permet de remplacer le traditionnel couple login/password dans un environnement doté de PKI.

Le certificat doit être reconnu par le serveur web, que ce soit par le biais du fait que le CA authentifie côté serveur et qu’on peut également filtrer les utilisateurs par données présentes dans le certificat.

Entre autres, cela permet également d’utiliser des supports externes au clavier pour reconnaître les utilisateurs, comme des lecteurs de carte à puce.

Nous allons voir ici comment activer l’authentification par certificat sous Apache.

Configuration

Ouvrez le fichier de votre virtualhost favori et activez tout d’abord le support HTTPS en ajoutant une clef publique, privée et optionnellement une chaîne de certificats:

SSLEngine on
SSLCertificateFile "/etc/ssl/www.unix-experience.fr.crt"
SSLCertificateKeyFile "/etc/ssl/www.unix-experience.fr.key"
SSLCertificateChainFile "/etc/ssl/myCA.pem"

Maintenant que le chiffrement des communications est assuré, vous pouvez sécuriser l’accès au Virtualhost en rajoutant les lignes suivantes:

SSLVerifyDepth 3
SSLVerifyClient require
SSLCACertificateFile "/etc/ssl/myCA.pem"
SSLOptions +StdEnvVars

Détaillons les différentes options:

  • SSLVerifyDepth: permet de définir quelle est la profondeur de la vérification sur le certificat SSL. Il faut mettre au minimum 2 suivant comment est construit votre certificat client
  • SSLVerifyClient: permet de forcer l’authentification par certificat si vous optez pour require. Autrement spécifiez optionnal
  • SSLCaCertificateFile: Il s’agit du CA qui correspond aux certificats clients
  • SSLOptions + StdEnvVars: permet de passer les options du certificat client aux moteurs sous jacents (PHP par exemple).

Maintenant que votre serveur est capable d’authentifier les certificats provenant du CA myCA.pem, il vous faut générer des certificats utilisant un CN (Common Name) correspondant à l’adresse mail de vos utilisateurs et une application qui soit pleinement compatible en face (un SSO comme Shibboleth par exemple).

Conclusion

Vous savez désormais comment configurer Apache pour authentifier des clients par certificats. Il ne reste plus qu’à mettre en place une PKI.

See Also