Marcio Cunha

Como criar e confiar em certificados SSL locais no Linux e macOS

Aprenda o passo a passo completo para gerar uma autoridade de certificação local, rootear certificados SSL no Linux e macOS e eliminar avisos de segurança no navegador durante o desenvolvimento web.

Marcio Cunha•6 min
Também disponível em:EnglishEspañol
Resumo
  • Certificados SSL locais eliminam avisos incômodos de segurança em ambientes de desenvolvimento offline.
  • Criar uma autoridade de certificação própria permite assinar certificados para domínios locais de forma segura.
  • O truststore do sistema operacional e de navegadores específicos exigem importação manual do certificado raiz.
  • Ferramentas modernas automatizam grande parte da criação, mas entender os comandos manuais garante controle total.
  • Configurações incorretas de DNS local podem invalidar o certificado mesmo após a instalação correta no sistema.

Por que o seu navegador reclama de sites locais em HTTPS?

Quando desenvolvemos aplicações web, é muito comum acessarmos endereços como localhost ou domínios falsos criados apenas para testes. Na prática, isso significa que o seu computador está tentando abrir um site seguro sem um selo de garantia legítimo. Na internet real, esse selo é fornecido por empresas chamadas Autoridades de Certificação, que verificam se o dono do site é realmente quem diz ser. No seu computador, como o site foi criado por você mesmo, o navegador olha para aquela conexão e dispara um alarme estridente com a mensagem de que a conexão não é segura.

Esse aviso existe para proteger usuários comuns contra golpes na internet, mas no dia a dia de quem programa, ele atrapalha bastante. Testar recursos modernos de segurança, como cookies que só funcionam com criptografia ou APIs de geolocalização, exige que o ambiente de desenvolvimento seja idêntico ao ambiente de produção. A solução para calar esse aviso não é desativar a segurança do navegador, mas sim criar a sua própria autoridade de certificação e ensinar o seu sistema operacional a confiar nela. Essa abordagem garante que os testes ocorram em um cenário fiel ao mundo real.

Para entender como isso funciona nos bastidores, vale a pena lembrar de como inspecionar tráfego HTTPS no Wireshark com chaves de sessão ajuda a decodificar pacotes criptografados para fins de depuração. Da mesma forma, quando criamos um certificado local, estamos forçando a máquina a reconhecer uma chave privada e um certificado raiz que assinam digitalmente os nossos domínios de testes, como 'app.test' ou 'api.local'.

Criando a sua própria autoridade de certificação com OpenSSL

O primeiro passo prático para resolver esse problema é gerar um certificado raiz próprio usando o OpenSSL, que é uma ferramenta padrão para lidar com criptografia em sistemas baseados em Unix. Na prática, essa ferramenta funciona como uma fábrica de carimbos digitais. O certificado raiz que você vai criar será o selo principal, e qualquer outro certificado gerado a partir dele será aceito pelo seu computador como se tivesse saído de uma grande empresa de segurança.

Para gerar a autoridade raiz, execute o comando abaixo no terminal do seu Linux ou macOS. Esse comando cria uma chave privada com forte criptografia e um certificado que durará vários anos. Lembre-se de substituir os dados de identificação conforme a sua preferência pessoal:

openssl req -x509 -nodes -new -sha256 -days 1024 -newkey rsa:2048 -keyout rootCA.key -out rootCA.pem -subj '/C=BR/ST=Sao Paulo/L=Sao Paulo/O=DevLocal/CN=DevLocal Root CA'

Depois de executar esse comando, você terá dois arquivos principais na sua pasta atual: o 'rootCA.key', que deve ser mantido em absoluto segredo, pois é a chave que assina os certificados, e o 'rootCA.pem', que é o certificado público que o seu sistema operacional precisará conhecer e abraçar como confiável.

Instalando o certificado raiz em sistemas Linux

Agora que você tem o certificado raiz pronto, o sistema Linux precisa ser instruído a confiar nele. Como existem várias distribuições Linux diferentes, o local onde esses certificados ficam guardados pode mudar um pouco. No entanto, em distribuições baseadas em Debian e Ubuntu, o processo é bastante direto e envolve copiar o arquivo para a pasta de certificados do sistema e atualizar a lista de confiança.

Para realizar essa tarefa com segurança e sem erros, siga a sequência de comandos abaixo no seu terminal:

  1. Copie o certificado gerado para o diretório de autoridades confiáveis do sistema.
    sudo cp rootCA.pem /usr/local/share/ca-certificates/dev-root-ca.crt
  2. Atualize o banco de dados interno de certificados do sistema operacional.
    sudo update-ca-certificates

Se a mensagem de sucesso aparecer no terminal, significa que o Linux agora confia em qualquer certificado assinado pelo seu 'rootCA.pem'. Caso você utilize ferramentas de infraestrutura ou servidores locais complexos — como os que costumamos gerenciar ao configurar o agendador Cron no Linux sem errar para tarefas automatizadas —, essa confiança sistêmica evita que scripts de integração falhem por falta de certificados válidos.

Registrando a autoridade de certificação no macOS

No macOS, o gerenciamento de certificados é centralizado em um aplicativo gráfico chamado Acesso às Chaves, embora também possamos fazer isso rapidamente via linha de comando. O objetivo aqui é o mesmo do Linux: inserir o arquivo 'rootCA.pem' no repositório de chaves do sistema e alterar a política de confiança para que o macOS aceite o certificado sem restrições.

Para adicionar o certificado raiz no macOS usando o terminal, execute o comando abaixo:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain rootCA.pem

Após rodar esse comando, o sistema vai solicitar a sua senha de administrador. Assim que a autoridade for integrada, abra o navegador Safari ou o Google Chrome e você notará que os avisos incômodos de certificado inválido desaparecerão imediatamente dos seus domínios de desenvolvimento local.

Gerando certificados específicos para os seus projetos

Com a autoridade raiz instalada e confiável, o próximo passo é criar certificados individuais para cada projeto que você estiver desenvolvendo. Se você estiver construindo uma aplicação em um domínio como 'meuprojeto.test', precisará de um arquivo de configuração que defina os nomes alternativos de assunto, permitindo que o navegador reconheça o certificado para aquele endereço específico.

Crie um arquivo de configuração chamado 'server.ext' com o seguinte conteúdo para definir as regras do domínio:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = meuprojeto.test
DNS.2 = localhost

Em seguida, gere a chave privada do servidor e a solicitação de assinatura, e finalize assinando o certificado com a sua autoridade raiz recém-criada através dos comandos do OpenSSL.

Validando a configuração e resolvendo problemas comuns

Depois de passar por todas as etapas de configuração, é fundamental validar se o seu servidor web local está realmente servindo o certificado correto. Erros de digitação no arquivo de configuração ou permissões incorretas nas pastas podem fazer com que o navegador continue exibindo alertas, exigindo uma investigação detalhada do comportamento da rede.

Se persistirem falhas de conexão ou comportamento inesperado em rotas seguras, ferramentas de diagnóstico de rede ajudam a entender onde o pacote está falhando, tal como fazemos ao inspecionar pacotes de rede com tcpdump no Linux para rastrear conexões perdidas. Verifique também se o arquivo 'hosts' do seu sistema operacional aponta corretamente o domínio local para o endereço IP '127.0.0.1'.

Considerações Finais

Configurar certificados SSL locais em ambientes de desenvolvimento Linux e macOS é um investimento de tempo que traz retornos imediatos em produtividade e fidelidade de testes. Ao criar uma autoridade de certificação própria e registrá-la corretamente no sistema operacional, você elimina os falsos positivos de segurança dos navegadores e consegue testar funcionalidades avançadas de forma totalmente isolada e segura.

Dominar esse processo evita frustrações corriqueiras e garante que o seu código transite perfeitamente entre a sua máquina de desenvolvimento e os servidores de produção na nuvem, mantendo a integridade e a criptografia ponta a ponta em todas as etapas do ciclo de desenvolvimento de software.