Atualmente as AC's do Open Finance Brasil estão documentadas em Padrão de Certificados do Open Finance Brasil e cabe as instituições verificar quais AC's estão homologadas, consultar seus certificados no site do ITI e adicioná-los as suas plataformas para que participantes utilizando os certificados emitidos pelas AC's sejam aceitos durante as chamadas. Este processo de verificação períodica é realizado de forma manual, porém existe uma API do Diretório de Participantes que já agrega todas as AC's permitidas.
Este projeto consulta a API do diretório e cria um arquivo .pem com todas as AC's permitidas no ecossistema Open Finance Brasil(cas.pem).
Também é responsabilidade das instituições validar se o certificado de cliente utilizado não foi revogado. Existem duas formas de se fazer isso:
- OCSP
- CRL
Como algumas AC's do ecossistema não estão aderentes ao padrão OCSP over HTTP pelo verbo GET (utilizado pelo Nginx), a única alternativa é fazer o controle via CRL. Este projeto visa auxiliar quem deseja fazer este controle via CRL.
node index.js sandbox
node index.js production
Para também gerar os arquivos CRT de cada CA separadamente, você pode usar a opção --explode, assim além dos arquivos cas.pem e crls.pem, cada CA terá seu certificado salvo separadamente no diretório certs
Para criar o arquivo .pem com as AC's e CRL's de produção e também os certificados de CA individualizados
Para também gerar os arquivos CRT de cada CA separadamente, você pode usar a opção --explode, assim além dos arquivos cas.pem e crls.pem, cada CA terá seu certificado salvo separadamente no diretório certs
node index.js production --explode
Os comandos acima irão criar dois arquivos no diretório certs (cas.pem e crls.pem). O arquivo crls.pem só é gerado quando o ambiente informado for production.
- cas.pem - Arquivo que compila todas as Autoridades Certificadoras do Open Finance.
- crls.pem - Arquivo que compila todas as Listas de Certificados Revogados emitidos pelas AC's do Open Finance.
Considerando que você esteja utilizando Nginx como proxy, você pode habilitar a verificação do certificado do cliente (mTLS) com as linhas abaixo em seu nginx.conf.
ssl_client_certificate /etc/nginx/cas.pem;
ssl_verify_client on;
Obs: Considerando que o arquivo gerado em certs/cas.pem deste projeto foi copiado para /etc/nginx/cas.pem.
Para habilitar o CRL, você pode configurar o seu nginx.conf com a linha abaixo.
ssl_crl /etc/nginx/crls.pem;
Obs: Considerando que o arquivo gerado em certs/crls.pem deste projeto foi copiado para /etc/nginx/crls.pem.
Como algumas AC's disponibilizam CRLs de curta validade (1 hora), o ideal é que a geração periódica seja inferior a este tempo, afim de garatir que o proxy sempre possua uma lista válida de certificados revogados.
Em um servidor linux, você pode fazer essa automação utilizando o script abaixo:
#!/bin/bash
UPDATE_ACS_DIR=/root/o2b2-update-acs
cd $UPDATE_ACS_DIR
node index.js production >> /var/log/o2b2-update-acs.log
cp -f $UPDATE_ACS_DIR/certs/cas.pem /etc/nginx
cp -f $UPDATE_ACS_DIR/certs/crls.pem /etc/nginx
nginx -s reload
Obs: Edite o valor da variável UPDATE_ACS_DIR, apontando o diretório onde foi realizado o download deste projeto.
Considerando que o script foi salvo em /root/nginx_automate.sh e você queira atualizar a lista de AC's e lista de certificados revogados a cada 10 minutos, a linha do crontab ficaria como abaixo:
*/10 * * * * /root/nginx_automate.sh