O serviço tem por objetivo manter atualizada as duas listas de autoridades certificadoras utilizadas pela biblioteca ICPBr-Util e que são utilizadas para validar os certificados digitais utilizados pelos usuários no PJe. Que são os arquivos: intermedirias.zip e confiaveis.zip.

1. Quick start

Criar um novo banco de dados:
$ createdb -T template0 --encoding='UTF-8'  -U${USER} -h${HOST} autoridades_certificadoras ;
Baixar a imagem docker
$ sudo docker pull registry.cnj.jus.br/pje2/pje2-auxiliares/pje-autoridades-certificadoras:latest
Criar as seguintes variáveis de ambiente - básicas
export RABBITMQ_HOST=localhost
export RABBIT_USERNAME=guest
export RABBIT_PASSWORD=guest
export DB_ADDR=localhost
export DB_DATABAS=autoridades_certificadoras
export DB_USER=postgres
export DB_PASSWORD=admin123
export EUREKA_REGISTER_ENABLE=true
export EUREKA_SERVER_DEFAULT_ZONE=http://localhost:8761/eureka
Subir um container com a imagem acima
$ sudo docker run registry.cnj.jus.br/pje2/pje2-auxiliares/pje-autoridades-certificadoras:latest

2. Tecnologias empregadas

O serviço foi construído com SpringBoot 2. Este serviço fornece API para manipulação e recuperação de seus recursos utilizando REST e banco de dados relacional.

Utiliza o broker de mensagens RabbitMQ para produzir mensagens da exchange do PJe (pje.exchange).

Internamente possui um script feito em python 2.2.7+ responsável por buscar a informação de atualização e conversão do pacote de autoridades certificadoras do site da ICP-Brasil.

2.1. Linguagem de programação

Java versão 8 e python versão 2.x.

2.2. Framework(s)

SpringBoot 2.

2.3. Armazenamento dos dados

Banco relacional PostgreSQL.

2.4. Outros temas

O serviço recupera a informação da lista de autoridades certificadoras diretamente do site do ITI aqui: https://www.iti.gov.br/repositorio/repositorio-ac-raiz.

3. Visão arquitetural

  • O serviço (autoridades-certificadoras) possui um scheduler para buscar no site do ICPBR por uma atualização da lista de ACs, se houver, guarda no seu banco um arquivo já convertido igual ao intermediaris.zip e calcula seu checksum, além desse arquivo, o script verifica quais são os certificados raíz ICP-Brasil que estão presentes no pacote intermediarias e faz o download das demais versões desse certificado diretamento do site do ICPBR, armazenando também o arquivo confiaveis.zip em seu banco;

  • Ao final do processo de atualização é enviada uma mensagem ao rabbitMQ da plataforma com os meta-dados dessa atualização, indicando o novo checksum;

  • Os demais serviços devem se inscrever no routingKey deste serviço "..autoridades-certificadoras.AutoridadesCertificadoras.POST" ou consultar o endpoint /api/v1/meta-dados/atualizacao/{data-atual} para identificar qual é a última versão da lista de autoridades certificadoras (checksum do intermediarias e checksum do confiaveis), se o checksum remoto for diferente do checksum local, o serviço interessado deverá fazer outra chamada para recuperar o arquivo binário correspondente (uns 250KB para o intermediarias e outros 11KB para o confiaveis) em /api/v1/binarios/intermediarias/{checksum-intermediarias} e /api/v1/binarios/confiaveis/{checksum-confiaveis};

  • O arquivo original recuperado do ICPBR pode ser baixado no endpoint /api/v1/binarios/accompactado/{checksum-accompactado};

  • Os arquivos binarios serão recuperados no formato base64, juntamente com a indicação de qual foi o codec utilizado para o cálculo do checksum (por padrão SHA-512), o checksum assinado pela chave privada do serviço, a chave pública que pode ser utilizada para validar a assinatura e qual o algoritmo utilizado para assinar (por padrão "RSA").

image

4. Dependências

Serviço Tipo Descrição

Site ITI

Lista de autoridades certificadoras

Depende do site estar disponível e com uma taxa de resposta adequada para poder recuperar a lista de autoridades certificadoras corretamente.\nNotou-se que é comum que o site tenha problemas na resposta às requisições.

RabbitMQ

Mensagens

Depende do broker de mensagens para enviar atualizações.

5. Configuração da aplicação

Table 1. Variáveis de ambiente
Nome da variável Valor padrão Descrição

APP_NAME

autoridades-certificadoras

Nome do serviço quando for se registrar no serviço de descoberta.

SERVER_PORT

8815

Porta padrão de funcionamento do serviço.

RABBITMQ_HOST

localhost

URL do serviço de mensageria rabbitMQ.

RABBIT_USERNAME

guest

Nome de usuário no serviço de mensageria

RABBIT_PASSWORD

guest

Senha do usuário no serviço de mensageria

DB_ADDR

localhost

Endereço do banco de dados postgresql

DB_PORT

5432

Porta do banco de dados postgresql

DB_DATABASE

autoridades_certificadoras

Nome do banco postgresql a ser utilizado.

DB_USER

postgres

Nome de usuário no banco postgresql.

DB_PASSWORD

admin123

Senha de usuário no banco postgresql.

EUREKA_REGISTER_ENABLE

true

Indicativo de que o serviço deve ou não se registrar no serviço de discoberta.

EUREKA_SERVER_DEFAULT_ZONE

http://localhost:8761/eureka

Url do serviço de discoberta.

CRYPTO_TTL

6

Faz referência ao tempo em que o token simétrico para POST de binários é válido (em minutos)

SYMMETRIC_KEY

CHAVESIMETRICA

Chave simétrica utilizada para assinar o token para POST de binários

ASYMMETRIC_PRIVATE_KEY_FILE

KeyPair/autoridadesCertificadoras.key

Chave privada utilizada para assinar o checksum.

ASYMMETRIC_PUBLIC_KEY_FILE

KeyPair/autoridadesCertificadoras.pub

Chave púlica para desassinar o checksum (deve ser replicada nos demais serviços que utilizam, principalmente icpbr-util)

SCRIPT_BUSCADOR_COMMAND_TYPE

python

Tipo de script para buscar informações sobre as atualizações do ICPBR

SCRIPT_BUSCADOR_COMMAND

buscadorACs.py

Script para buscar informações sobre as atualizações do ICPBR

6. Configuração do armazenamento de dados

Este serviço utiliza banco de dados PostgreSQL versão 9.6 ou superior. A base de dados deve ter encoding UTF-8. Para a execução do serviço é necessário apenas que já haja o banco criado e que o usuário de banco da aplicação tenha permissão de DDL e DMLs, o próprio serviço criará o banco automaticamente.

7. Papeis e/ou recursos

Não contém papeis. Para acessar as funcionalidades de POST de meta-dados e de POST de binários é necessário encaminhar um token pré-gerado pelo sistema com validade equivalente ao informado na variável CRYPTO_TTL (em minutos).

8. Interações com o barramento de mensagens

O serviço é um produtor no barramento de mensagens. As mensagens são todas direcionadas à exchange geral da plataforma: pje.exchange. Com o routingKey: 000.0.autoridades-certificadoras.AutoridadesCertificadoras.POST cujo objeto é o dado pela classe: MetaDadosConjuntoACsCloudEvent.

8.1. Filas que escuta

Não há.

8.2. Mensagens que produz

As mensagens são enviadas sempre em que há uma nova versão do arquivo de autoridades certifidadoras disponível. O serviço então encaminhará uma mensagem utilizando o payload dado pela classe MetaDadosConjuntoACsCloudEvent, com o routingKey 000.0.autoridades-certificadoras.AutoridadesCertificadoras.POST à exchange principal da plataforma: pje.exchange.

9. Interações com outros serviços

O serviço possui apenas um script feito em python para interagir diretamente com o site ICPBrasil para buscar, validar, transformar e armazenar a informação relativa às autoridades certificadoras.

10. Documentação das interfaces do serviço

11. Eventos de webhook

Pode-se utilizar para eventos de webhook o próprio evento encaminhado à exchange principal do rabbitMQ.