Cómo usar un certificado de cliente en la página de invitaciones

Hola,

Tenemos una instalación de Discourse “solo por invitación”. Cuando enviamos una invitación, el invitado solo debería poder aceptarla si hay un certificado de cliente específico presente en el navegador.

¿Alguna pista sobre cómo lograr esto?

Saludos,
Harmstra

Necesitas algo como esto para que termine en tu configuración de nginx:

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

Si solo debe estar presente para las invitaciones, deberás hacerlo en un bloque location que contenga la ruta de aceptación de invitaciones.

Hola @michaeld,

¿También es posible usar un campo de certificado y guardarlo en la instancia de usuario como un campo de usuario? Por ejemplo, si queremos guardar la fecha de expiración, ¿podemos hacerlo?

Esto parece extrañamente complicado. ¿Cuál es tu caso de uso?

Estoy de acuerdo en que lo es.

El caso de uso es que hay una organización aquí que autentica empresas utilizando esos certificados de cliente. Estamos intentando crear una instancia de Discourse donde solo esas empresas tengan acceso. Parece bastante sencillo según el fragmento de nginx proporcionado por @michaeld.

En ese certificado también hay un número de empresa; nos gustaría obtener ese número y ponerlo a disposición en la instancia de Discourse. De esa manera, podrán encontrarse fácilmente y serán identificables solo por su número de empresa.

Espero que ahora esté claro; si no, no dudes en preguntar.

¡Vaya! Eso suena menos absurdo de lo que habría imaginado.

¿Puedes contar con que las personas de esas empresas utilicen una dirección de correo corporativa? Eso sería mucho más sencillo que un plugin que pueda leer el certificado. Incluso podrías mapearlo en sentido inverso al número de empresa, si ese número es de alguna manera muy importante.

Podrías pasar el certificado a Discourse usando una línea como

proxy_set_header X-Cert-DN: $ssl_client_s_dn;

y luego tener algún tipo de plugin para leer el valor del encabezado.