Uma integração que funcionava pode parar no dia em que um certificado vence, e um serviço fiscal pode recusar a conexão mesmo com a Internet em ordem. O certificado digital participa da proteção das conexões, da identificação de quem chama e da assinatura de documentos, e cada um desses usos falha de um jeito diferente.
O que é um certificado digital
O certificado digital é um documento eletrônico que associa uma identidade, como o nome de um site ou o CNPJ de uma empresa, a uma chave pública. O titular do certificado guarda a chave privada correspondente, que não sai do controle dele. O que a chave privada assina só confere com a chave pública do mesmo par, e essa relação permite comprovar a identidade do titular.
Uma autoridade certificadora emite o certificado depois de conferir a identidade do titular e assina o certificado com a própria chave. O certificado traz, entre outros dados, o titular, o emissor, o período de validade, um número de série e os usos permitidos, como a autenticação de um servidor ou a assinatura de documentos.
A cadeia de confiança
Um programa confia em um certificado quando consegue montar uma cadeia até uma autoridade em que já confia:
- o certificado final, do serviço ou da empresa, assinado por uma autoridade intermediária;
- a autoridade intermediária, assinada pela autoridade raiz;
- a autoridade raiz, que assina o próprio certificado e fica no repositório de autoridades confiáveis do sistema operacional ou do programa.
Quando falta um elo, ou quando a raiz não está no repositório de confiança da máquina, a verificação falha mesmo com o certificado dentro da validade. A instalação da cadeia do emissor, pelo procedimento do fornecedor, resolve esse caso. No Brasil, a ICP-Brasil, a infraestrutura de chaves públicas brasileira, tem a própria autoridade raiz, e as autoridades certificadoras ligadas a ela emitem os certificados usados nos serviços fiscais e em muitos serviços do governo.
Certificado do servidor e certificado do cliente
Em uma conexão HTTPS, o serviço apresenta o certificado do servidor, e o programa que chama confere a cadeia, a validade e o nome. O nome do endereço chamado precisa constar no certificado. Um certificado emitido para api.example.com não vale para pagamentos.example.com.
Em algumas integrações, o serviço também exige o certificado do cliente, e os dois lados se identificam na mesma conexão, no mTLS. Os serviços fiscais e muitas APIs bancárias trabalham assim. Nesses casos, o programa precisa ter acesso ao certificado e à chave privada no momento da conexão.
O mesmo certificado do cliente pode ter outro uso, a assinatura digital de um documento, como o XML de uma nota fiscal. A assinatura comprova a autoria e a integridade do documento, e a conexão protegida comprova a identidade de quem transmite. Os dois usos são diferentes, e uma falha em um deles não indica falha no outro.
Os tipos A1 e A3
Na ICP-Brasil, os certificados mais comuns no comércio são de dois tipos:
- A1: o certificado e a chave privada ficam em um arquivo protegido por senha, instalado no computador que usa o certificado. A validade máxima é de um ano.
- A3: a chave privada fica em um dispositivo criptográfico, como um token USB, um cartão com chip ou um equipamento do provedor, no caso do certificado em nuvem. A validade máxima é de cinco anos.
O arquivo do A1 costuma ter a extensão .pfx ou .p12. Uma cópia desse arquivo, junto com a senha, permite usar o certificado em outra máquina, e por isso o arquivo e a senha recebem o mesmo cuidado de uma credencial. O A3 depende do dispositivo conectado e do programa do fabricante, e um token desconectado ou bloqueado impede a assinatura e a conexão.
Onde o certificado fica no Windows
No Windows, os certificados ficam em repositórios separados:
- o repositório do usuário atual, aberto pelo comando
certmgr.msc, com os certificados instalados para a conta conectada; - o repositório do computador local, aberto pelo comando
certlm.msc, com os certificados disponíveis para a máquina e para os serviços.
Um certificado A1 importado no repositório de um usuário não aparece para outro usuário nem para um serviço do Windows que roda com outra conta. Por isso, o mesmo programa pode funcionar quando aberto pela pessoa conectada e falhar quando roda como serviço. Além de enxergar o certificado, a conta que executa o programa precisa de permissão para usar a chave privada.
Validade, renovação e revogação
Um certificado vale entre a data de início e a data de fim gravadas nele. A conferência usa o relógio da máquina, e por isso uma data errada no computador faz um certificado válido parecer vencido ou ainda não válido.
A renovação gera um certificado novo, com outro número de série e, em geral, outro par de chaves. O certificado novo precisa ser instalado e selecionado na configuração de cada programa que usa o certificado. O certificado vencido continua no repositório, e um programa que escolhe o certificado pelo nome do titular pode continuar usando o antigo.
Um certificado também pode ser revogado antes do vencimento, por exemplo depois da perda do token ou da exposição do arquivo. A autoridade certificadora publica as revogações, e os serviços recusam um certificado revogado.
As falhas mais comuns
- Certificado vencido: a data de fim já passou, no certificado do serviço ou no do cliente.
- Cadeia não confiável: a raiz ou uma autoridade intermediária do emissor não está no repositório de confiança da máquina.
- Nome divergente: o endereço chamado não consta no certificado apresentado pelo serviço.
- Certificado errado: o programa usa um certificado de outra empresa, um certificado antigo ou um certificado sem o uso exigido.
- Chave privada inacessível: a conta que executa o programa não alcança o certificado ou não tem permissão para usar a chave, ou o token não está conectado.
- Relógio incorreto: a data da máquina faz a validade parecer errada.
- Versão do TLS: o sistema operacional ou o programa não oferecem a versão do TLS exigida pelo serviço.
A mensagem de erro costuma indicar qual dessas condições falhou. Desligar a verificação do certificado para fazer uma falha desaparecer deixa a comunicação exposta e não corrige a causa.
No suporte
Diante de uma falha de certificado, convém identificar qual certificado está envolvido, o do serviço ou o do cliente, e em qual uso, a conexão ou a assinatura. Em seguida, convém conferir a validade, a cadeia, o titular, o repositório em que o certificado está instalado, a conta que executa o programa e o relógio da máquina. A senha do certificado A1 fica mascarada, como a de qualquer credencial.
Para guardar
- O certificado associa uma identidade a uma chave pública, e o titular guarda a chave privada.
- A confiança depende de uma cadeia até uma autoridade raiz conhecida pela máquina.
- O certificado do servidor identifica o serviço, e o certificado do cliente identifica quem chama.
- O A1 é um arquivo instalado no computador, com validade de até um ano, e o A3 fica em um dispositivo, com validade de até cinco anos.
- A renovação gera um certificado novo, que precisa ser instalado e selecionado em cada programa.
A emissão de notas funciona quando o programa é aberto pela pessoa conectada e falha quando o mesmo programa roda como serviço do Windows. O que investigar?
O repositório em que o certificado foi instalado e a conta que executa o serviço. Um certificado importado no repositório de um usuário não aparece para um serviço que roda com outra conta, e essa conta também precisa de permissão para usar a chave privada.
O certificado da empresa foi renovado ontem, e hoje a integração recusa a conexão por certificado vencido. O que essa situação sugere?
Que o programa continua usando o certificado antigo. O certificado novo precisa estar instalado e selecionado na configuração, e o certificado vencido, que continua no repositório, pode estar sendo escolhido no lugar dele.