Comment utiliser un certificat client sur la page d'invitations

Bonjour,

Nous avons une installation Discourse « sur invitation uniquement ». Lorsque nous envoyons une invitation, le destinataire ne devrait pouvoir l’accepter que si un certificat client spécifique est présent dans le navigateur.

Avez-vous des pistes pour y parvenir ?

Cordialement,
Harmstra

Vous avez besoin de quelque chose comme ceci dans votre configuration nginx :

ssl_client_certificate /path/to/ca.pem;
ssl_verify_client on;

Si cela doit s’appliquer uniquement aux invitations, vous devrez le faire dans un bloc location contenant la route d’acceptation des invitations.

Bonjour @michaeld,

Est-il également possible d’utiliser un champ de certificat et de le sauvegarder dans l’instance utilisateur en tant que champ utilisateur ? Par exemple, si nous voulons enregistrer la date d’expiration, est-ce possible ?

Cela semble étrangement compliqué. Quel est votre cas d’usage ?

Je suis d’accord avec vous.

Le cas d’usage est le suivant : il existe une organisation ici qui authentifie les entreprises à l’aide de ces certificats clients. Nous essayons de créer une instance Discourse à laquelle seules ces entreprises auront accès. Cela semble assez simple, sur la base de l’extrait nginx fourni par @michaeld.

Ce certificat contient également un numéro d’entreprise. Nous souhaiterions récupérer ce numéro et le rendre disponible dans l’instance Discourse. De cette façon, les entreprises pourront facilement se retrouver et seront identifiables uniquement par leur numéro d’entreprise.

J’espère que c’est maintenant clair. Sinon, n’hésitez pas à poser des questions.

Wow. Cela semble moins ridicule que ce que j’aurais imaginé !

Pouvez-vous compter sur le fait que les personnes de ces entreprises utilisent une adresse e-mail professionnelle ? Ce serait beaucoup plus simple qu’un plugin capable de lire le certificat. Vous pourriez même faire le lien inverse vers le numéro d’entreprise si ce numéro est d’une importance capitale.

Vous pouvez transmettre le certificat à Discourse en utilisant une ligne comme

proxy_set_header X-Cert-DN: $ssl_client_s_dn;

et ensuite utiliser un plugin pour lire la valeur depuis l’en-tête.