Support des certificats utilisateurs en PHP

J’ai fait différents tests pour essayer de supporter les certificats utilisateurs sur mon serveur en PHP, mais ce n’est visiblement pas possible avec les fonctions TLS de la bibliothèque standard.

Il est possible d’obtenir le certificat utilisateur si on force l’utilisation d’un certificat utilisateur, en positionant verify_peer à true et capture_peer_cert à true. Mais dans ce cas plus aucune requête sans certificat utilisateur valide ne fonctionnera sur le server. J’ai du aller lire le code de la libtls de libressl pour voir comment ils faisaient pour pouvoir rendre optionnel le certificat utilisateur, et visiblement ils utilisent une fonction openssl permettant d’utiliser une fonction de vérification de certificat pour indiquer une fonction qui ne fait aucune vérification.

PHP ne permet pas d’indiquer une fonction de vérification, donc cette solution n’est pas possible. Si je trouve le temps j’essaierai de proposer un patch à PHP pour permettre soit d’indiquer une fonction PHP de vérification, soit d’indiquer que le certificat utilisateur est facultatif, ou ne doit pas être vérifier.

En espérant que ce soit plus simple dans les autres langages, parce qu’en PHP j’ai l’impression que le support des certificats clients ne sera pas pour tout de suite. Ça freine aussi les autres projets que j’avais pour exposer des jeux CLIs ou ce genre de choses sur mon serveur, nécessitant une session, ou encore une partie privée pour consulter les statistiques et journaux systèmes via Gemini.