O ZeroCert é um sistema que simula a Infraestrutura de Chaves Públicas Brasileira (ICP-Brasil) para emissão de certificados digitais em ambiente de teste. Este projeto permite a criação e gerenciamento de certificados digitais no padrão ICP-Brasil, como e-CPF e e-CNPJ, para fins de desenvolvimento e testes.
- Criação e gerenciamento de Autoridades Certificadoras (AC)
- Emissão de certificados e-CPF e e-CNPJ seguindo as normas da ICP-Brasil
- Interface web estilizada para parecer sistemas legados
- Validação de certificados por número de série
- Revogação de certificados
- Download de certificados nos formatos PEM e PKCS#12 (P12)
- Banco de dados SQLite para armazenamento
- Suporte a HTTPS com certificados SSL autoassinados
- Node.js 14.x ou superior
- NPM 6.x ou superior
- OpenSSL (para geração de certificados SSL)
-
Clone o repositório:
git clone https://github.com/RibasSu/cert-panel.git cd cert-panel
-
Instale as dependências:
npm install
-
Configure as variáveis de ambiente: Crie um arquivo
.env
na raiz do projeto com as seguintes configurações:# Configurações do Certificado SSL SSL_COMMON_NAME=localhost SSL_ORGANIZATION=ZeroCert Certificados e Identidade Digital SSL_ORGANIZATIONAL_UNIT=Desenvolvimento SSL_COUNTRY=BR SSL_STATE=DF SSL_LOCALITY=Brasilia SSL_DAYS_VALID=365 SSL_DIRECTORY=src/ssl SSL_DOMAINS=localhost SSL_IPS=127.0.0.1 HTTP_PORT=3000 HTTPS_PORT=3443 # Configurações da Aplicação (opcionais) # SESSION_SECRET=sua_chave_secreta_para_sessoes # DB_PATH=src/data/database.sqlite
Importante: Certifique-se de que o diretório especificado em
SSL_DIRECTORY
existe e tem permissões de escrita. O sistema irá gerar automaticamente os certificados SSL necessários para HTTPS neste diretório. -
Inicie o servidor:
npm start
-
Acesse a aplicação em seu navegador:
http://localhost:3000 # Acesso HTTP https://localhost:3443 # Acesso HTTPS (certificado autoassinado)
Nota: Ao acessar via HTTPS, seu navegador poderá exibir um aviso de segurança devido ao certificado autoassinado. Isso é esperado em ambiente de desenvolvimento.
├── src/
│ ├── data/ # Local de armazenamento do banco de dados
│ ├── database/ # Configuração do banco de dados
│ ├── models/ # Modelos de dados
│ ├── public/ # Arquivos estáticos (CSS, JS, imagens)
│ ├── routes/ # Rotas da aplicação
│ ├── services/ # Serviços de negócio
│ ├── ssl/ # Certificados SSL gerados
│ ├── views/ # Templates Pug
│ └── index.js # Ponto de entrada da aplicação
├── .env # Variáveis de ambiente
├── package.json
└── README.md
Ao iniciar a aplicação pela primeira vez, um usuário administrador padrão será criado:
- Usuário: admin
- Senha: admin123
Recomenda-se alterar a senha após o primeiro login.
- Faça login no sistema
- Acesse o menu "Certificados" e selecione "Emitir e-CPF" ou "Emitir e-CNPJ"
- Preencha os dados solicitados
- Defina uma senha para o certificado
- Clique em "Emitir Certificado"
- Acesse o menu "Certificados" e selecione "Validar Certificado"
- Insira o número de série do certificado
- Clique em "Validar"
IMPORTANTE: Este sistema é destinado APENAS para fins de teste e desenvolvimento. Os certificados emitidos NÃO são reconhecidos oficialmente e NÃO devem ser utilizados em ambientes de produção.
- Backend: Node.js, Express
- Frontend: Bootstrap, Pug
- Banco de Dados: SQLite
- Criptografia: node-forge, OpenSSL
- Ambiente: dotenv para configuração de variáveis de ambiente
Se você encontrar o erro TypeError: Cannot read properties of undefined (reading 'padStart')
ao emitir um certificado e-CNPJ, verifique se o campo "CPF" do responsável legal está preenchido corretamente. Este erro geralmente ocorre devido a uma incompatibilidade entre o nome do campo no formulário (responsibleCpf
) e o nome esperado pelo backend (responsibleCPF
).
Se encontrar problemas com os certificados SSL:
- Verifique se o OpenSSL está instalado e acessível no seu sistema
- Certifique-se de que a pasta
src/ssl
existe e tem permissões de escrita - Verifique as configurações no arquivo
.env
- Se os certificados não estiverem sendo gerados, verifique os logs do servidor para identificar possíveis erros
- Certifique-se de que as portas especificadas para HTTP e HTTPS não estão sendo utilizadas por outros serviços
Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para detalhes.
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou enviar pull requests.
Para dúvidas ou sugestões, entre em contato através de [contato@zerocert.com.br].