Todos os artigos
FT-CERT-DIGITAL· 1.0.0Integrações

Upload de certificado digital (.pfx/.p12) em integrações

Como anexar/trocar certificado digital A1 (.pfx/.p12) ao criar OU editar integração SOAP/REST. Inclui alerta automático 30/14/7/1d antes do vencimento e badge na UI.

Atualizado em 8/6/2026
Integrações que exigem mTLS — webservices SEFAZ (NF-e, NFC-e, CT-e), bancos europeus, parceiros B2B com client cert — aceitam upload de certificado digital A1 no formato PKCS#12 (.pfx/.p12).

Onde aparece



No formulário de criar ou editar integração manual, ao escolher protocolo SOAP ou REST/HTTP:
  • Campo Certificado .pfx/.p12 (mTLS) — upload do arquivo
  • Campo Senha do certificado — passphrase do .pfx


A1 (arquivo .pfx) é suportado. Quando você seleciona "SEFAZ" no campo Plataforma, o protocolo muda automaticamente pra SOAP (padrão dos webservices NF-e/NFC-e/CT-e) e um aviso lembra de anexar o certificado. A3 (token físico/cartão) não está suportado — token requer driver/middleware no servidor, fora de escopo no SaaS.

O que acontece no servidor



  1. Frontend lê o arquivo, converte pra base64 e envia junto com a senha
  2. Backend chama parsePkcs12(base64, senha) (lib src/lib/integrations/certificate.ts, usa node-forge)
  3. Se senha errada ou arquivo inválido, retorna HTTP 400 "Certificado inválido"
  4. Se válido, extrai metadata: subject, issuer, serial, validade, fingerprint SHA-256
  5. Criptografa o blob (.pfx em base64) e a senha separadamente com AES-256-GCM (src/lib/crypto.ts, chave em CREDENTIALS_ENCRYPTION_KEY)
  6. Armazena tudo em connections.certificates (jsonb)


A senha NUNCA fica em texto puro — só decifra no momento de abrir conexão TLS.

Editar / trocar / remover certificado



No card da integração, clique em Editar. A seção de protocolo mostra:
  • O subject e a data de validade do cert atual (badge amarelo se < 30d, vermelho se < 7d ou expirado)
  • Botão Remover certificado (apaga o cert sem deletar a integração)
  • Campo de upload pra subir um novo .pfx (sobrescreve o anterior na próxima save)


Alerta de vencimento (cron diário)



O cron /api/cron/cert-expiry-alerts roda diariamente às 07:00 UTC e cria 1 alerta por bucket atravessado:
  • 30 dias antes — primeiro warning amarelo
  • 14 dias — warning amarelo
  • 7 dias — alerta vermelho
  • 1 dia — alerta crítico vermelho
  • 0 dias — cert expirado, urgent


Dedup via UNIQUE (connection_id, days_bucket) em cert_expiry_alerts. Quando o cert é renovado (não_after muda), um trigger no DB apaga os alerts antigos automaticamente — buckets resetam.

Canais (na ordem):
  1. Slack se SLACK_ALERTS_WEBHOOK_URL setado — bloco com subject + bucket + link pra integração
  2. UI badge na integration-card mostrando "Cert vence em Xd" (sempre visível)


Limitações conhecidas



  • Apenas A1 (arquivo). A3 (token físico) requer Lefia Agent on-prem ou Cloud HSM — fora desta versão.
  • AS4 e EBICS continuam com PEM texto separado (não unificado nesta versão).
  • Validação de cadeia/CRL/OCSP não é feita. Se o emissor revogou o cert, só notará na primeira chamada TLS (erro 4xx do servidor da contraparte).
  • O cron de alerta roda 1x/dia. Se o cert vence em < 24h depois da última execução, o alerta sai no próximo ciclo.


Schema SQL



  • connections.certificates (jsonb): metadata + ciphertexts do client cert
  • cert_expiry_alerts (table): dedup de buckets, RLS super_admin select-only
  • Trigger connections_cert_expiry_alerts_reset: limpa dedup quando cert renovado


Veja também



  • pipeline-mensagens-fluxos — fluxos completos de mensagem incluindo o cenário SEFAZ + cert
  • pii-redaction-llm — privacidade de dados em payloads enviados pra IA
  • ai-toggle-hierarchy — toggle de IA por scope

Histórico de versões

  • 1.0.0

    Upload de certificado digital A1 (.pfx/.p12) em integrações SOAP/REST. Lib parsePkcs12 com node-forge extrai metadata (subject/issuer/serial/validade/fingerprint). API create-integration valida senha e encripta blob+senha com AES-256-GCM, gravando em connections.certificates jsonb. UI file input + password. Documentado em /security e help (slug=certificado-digital-mtls).

    5/6/2026 · new