FAQ: o Certificado de Site da ICP-Brasil Não é Confiável

De vez em quando nós recebemos aqui na Microsoft pedidos de ajuda de organizações que estão usando certificados digitais da ICP-Brasil nos seus sites Web, reportando que alguns (ou quase todos) os usuários estão recebendo a informação que o certificado digital não é confiável. "Mas a Microsoft não distribui o certificado da ICP-Brasil para o Windows?" Sim, distribui. O problema não é esse - o problema está na verdade no seu servidor Web.

Quando um cliente acessa um site Web usando SSL, o servidor Web envia para o cliente o certificado digital do servidor. O cliente então valida o certificado do servidor, verificando se no topo da cadeia de certificação está uma autoridade certificadora raiz em que o usuário confia. Até aí tudo bem. Só que para fazer isso o cliente precisa ter os certificados de todas as autoridades certificadoras intermediárias, isto é, aquelas autoridades certificadoras que estão entre a AC raiz e o certificado do servidor. Como a Microsoft somente distribui a AC raiz para o Windows, é necessário que de alguma forma o cliente obtenha também os certificados dessas autoridades certificadoras intermediárias para fazer a validação.

Uma forma de fazer isso automaticamente seria utilizando uma extensão dos certificados chamada Authority Information Access (AIA), que foi definida na RFC 2459 especificamente para essa função de montagem automática da cadeia de certificação. Infelizmente a ICP-Brasil não usa ainda esta extensão (veja minha sugestão sobre isso aqui), mas isso acaba não sendo um problema para acesso aos sites  porque os servidores Web por default fazem o favor de enviar toda a cadeia de certificação para o cliente, não só o certificado do site. Com isso o cliente monta toda a cadeia e valida o certificado sem que precise previamente ter o certificado de todas as autoridades intermediárias.

Mas o que acontece quando o servidor Web por algum motivo não envia os certificados intermediários? Aí temos exatamente o problema descrito inicialmente: o cliente não consegue montar a cadeia e diz que o certificado não é confiável, mesmo tendo o certificado da AC raiz da ICP-Brasil definido como confiável. Para resolver este problema, faça a seguinte configuração, dependendo o servidor Web que você estiver utilizando:

Microsoft IIS - Verifique se toda a cadeia foi importada no seu servidor Windows, incluindo os certificados das ACs intermediárias. O IIS já manda por default toda a cadeia para o cliente, mas a partir do IIS 6 precisa ter instalado localmente todos certificados intermediários para fazer isso.

Apache - Verifique que o parâmetro SSLCertificateChainFile do arquivo de configuração do Apache está apontando para um arquivo que contenha todos os certificados da cadeia de certificação, concatenados em formato PEM (o chamado arquivo “PKCS#7 Bundle” ou .p7b). Este arquivo é em geral fornecido pela autoridade certificadora que emitiu o seu certificado.