Como configuro o apache para usar client certificates
O usuário do navegador pode se autenticar usando um certificado digital como
por exemplo o e-cpf, para isso devemos configurar o apache e a nossa aplicação
para ler as informações passadas e autenticar o usuário. Vamos ver como
fazer isso no apache.
CONFIGURANDO O APACHE
Devemos acessasr o arquivo de configuração (em sites-available) e configurar o conf desejado , por exemplo: default-ssl.conf.
SSL options
No arquivo conf devemos adicionar a seguinte configuração:
1 | SSLOptions +ExportCertData +StdEnvVars |
Devemos ter o arquivo com a cadeia certificadora desejada, como por exemplo o da serasa (serasa_rfb_v5.crt).
O arquivo serava_rfb_v5.crt foi gerado com o seguinte comando:
1 | $ cat ICP-Brasilv5.crt AC_Secretaria_da_Receita_Federal_do_Brasil_v4.crt AC_Serasa_RFB_v5.crt > serasa_rfb_v5.ca_bundle |
Esta é a configuração mais fácil , o problema desta configuração é que vai funcionar apenas para os certificados emitidos
pela serasa, para colocar para funcionar para todos você deve usar o malfadado SSLCACertificatePath .
SSLCACertificatePath
Este parâmetro é um dos parâmetros mais complicados de configurar que existe. Para funcionar você deve criar um diretório com os códigos hash dos arquivos crt que deseja trabalhar. O pulo do gato é como criar este diretório.
Os arquivos hash devem seguir o formato HHHHHHHH.D , mas qual o algoritmo de hash qual o valor de D,
a primeira dica é que o apache usa este formato por causa do openssl e é nele que se encontra a solução.
O openssl tem uma ferramenta chamada c_rehash que
monta os links para você, mas antes de executar a ferramenta você vai precisar dos arquivos com os certificados.
Caso você queira trabalhar com o ICP-BRASIL estes certificados podem ser pegos no link.
Coloque todos os certificados em uma pasta acessível pelo apache e então execute o comando:
1 | c_rehash -v ./ |
O comando vai criar os links para os ceritificados com o formato esperado pelo apache.
Então você pode usar o SSLCACertificatePath apontando para a pasta com os certificados:
1 | SSLCACertificatePath "/caminho/certificados/" |
Substitua o SSLCACertificateFile pelo SSLCACertificatePath, apesar de que você pode usar ambos.
Location
Agora falta apenas definir o caminho que desejamnos aplicar a verificação, para
isso crie um location com a configuração:
1 | <Location /meulocal/ca/> |
Agora você pode autenticar os seus usuário usando e-cpf.
Pronto !
Links
https://www.iti.gov.br/repositorio/84-repositorio/489-certificados-das-acs-da-icp-brasil-arquivo-unico-compactado
http://openssl.cs.utah.edu/docs/apps/c_rehash.html