Como usar um certificado de cliente na página de convites

Olá,

Temos uma instalação do Discourse com acesso exclusivo por convite. Ao enviar um convite, o convidado só deverá poder aceitá-lo se um determinado certificado de cliente estiver presente no navegador.

Alguma ideia de como fazer isso?

Abraços,
Harmstra

Você precisa de algo assim para que termine na sua configuração do nginx:

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

Se isso deve estar presente apenas para convites, você precisará fazer isso em um bloco location que contenha a rota de aceitação de convite.

Olá @michaeld,

É possível também usar um campo de certificado e salvá-lo na instância do usuário como um campo de usuário? Por exemplo, se quisermos salvar a data de expiração, isso é viável?

Isso parece bizarramente complicado. Qual é o seu caso de uso?

Concordo que é.

O caso de uso é que existe uma organização aqui que faz autenticação de empresas usando esses certificados de cliente. Estamos tentando criar uma instância do Discourse onde apenas essas empresas tenham acesso. Parece simples o suficiente com base no snippet do nginx fornecido por @michaeld.

Nesse certificado também há um número da empresa; gostaríamos de obter esse número e torná-lo disponível na instância do Discourse. Assim, elas poderão se encontrar facilmente e serão identificáveis apenas pelo número da empresa.

Espero que esteja claro agora; se não, fique à vontade para perguntar.

Uau. Isso soa menos absurdo do que eu imaginaria!

Você pode contar com as pessoas dessas empresas usando um e-mail corporativo? Isso seria muito mais fácil do que um plugin capaz de ler o certificado. Você até poderia mapeá-lo de volta para o número da empresa, caso esse número seja de alguma forma muito importante.

Você pode passar o certificado para o Discourse usando uma linha como

proxy_set_header X-Cert-DN: $ssl_client_s_dn;

e, em seguida, utilizar algum tipo de plugin para ler o valor do cabeçalho.