Login com certificado digital
É possível realizar autenticação de usuários (login) baseada em certificado digital. Esse processo, em linhas gerais, ocorre da seguinte maneira:
- Gera-se um nonce criptográfico
- Solicita-se ao usuário que realize um algoritmo de assinatura sobre o nonce utilizando sua chave privada
- Verifica-se o resultado do algoritmo de assinatura utilizando a chave pública do certificado do usuário
- Valida-se o certificado do usuário
- Se todas as validações forem bem sucedidas, a aplicação pode assumir que o usuário é realmente o titular do certificado apresentado. Em seguida, utiliza-se um campo chave do certificado (ex: CPF ou email) para localizar o usuário na base de dados e completa-se o processo de autenticação.
Note
Isso é apenas uma visão geral. Existem passos adicionais, como validar que o nonce nunca foi utilizado anteriormente, para evitar ataques de replay.
Para implementar esse processo, é preciso realizar operações no frontend e no backend.
O algoritmo de assinatura sobre o nonce necessariamente precisa ser feito no frontend pois a chave privada do certificado do usuário pode estar em um dispositivo criptográfico (certificado A3) que nunca permite a sua exportação. Além disso, mesmo que a chave seja baseada em software (certificado A1), solicitá-la ao usuário é uma má prática.
Já a geração do nonce e todas as validações precisam ser realizadas no backend por motivos óbvios de segurança.
A forma recomendada de implementar login com certificado digital é utilizando o Rest PKI em conjunto com o Web PKI.
Passo-a-passo
- Acesse a documentação do Rest PKI
- Escolha uma linguagem de programação
- Escolha um dos projetos de exemplos disponíveis
- Siga os passos para executar o projeto
- Uma vez executando o projeto, clique em Authentication with digital certificate
Tip
Embora a solução envolva o Rest PKI em conjunto com o Web PKI (para as operações no backend e frontend respectivamente), concentre-se na documentação do Rest PKI que já mostra o uso dos dois produtos integrados.
Implementações alternativas
Se a sua aplicação web for em .NET (C#, VB.NET, C++.NET), você pode também utilizar o PKI SDK no backend em conjunto com o Web PKI no frontend. Para mais informações, veja o artigo Autenticação com certificado na documentação do SDK.
Se você já possui uma biblioteca de terceiros para certificação digital ou deseja implementar o código do backend você mesmo, você pode também utilizar o Web PKI apenas para realizar as operações necessárias no frontend.