Voltar ao Diminua Blog

Artigo

Desvendando o `mkcert`: Certificados TLS Locais para Desenvolvimento Seguro

Simplifique a criação e o gerenciamento de certificados HTTPS locais para seus projetos de desenvolvimento web.

Desvendando o `mkcert`: Certificados TLS Locais para Desenvolvimento Seguro

No mundo do desenvolvimento web moderno, a segurança é primordial. A adoção do HTTPS se tornou um padrão, não apenas para aplicações em produção, mas também para ambientes de desenvolvimento local. No entanto, configurar certificados TLS/SSL locais pode ser um processo complexo e demorado. Felizmente, ferramentas como o `mkcert` simplificam drasticamente essa tarefa, permitindo que você crie e gerencie certificados TLS locais de forma rápida e eficiente.

Por que usar HTTPS no Desenvolvimento Local?

Você pode se perguntar: por que me preocupar com HTTPS no meu ambiente de desenvolvimento local? Existem várias razões convincentes:

  • Simulação Realista: Muitas APIs e serviços modernos exigem conexões HTTPS. Testar seu frontend ou backend contra APIs que esperam HTTPS pode levar a erros inesperados se você estiver usando HTTP localmente.
  • Segurança de Dados: Mesmo em um ambiente local, você pode estar lidando com dados sensíveis. O HTTPS garante que esses dados sejam criptografados em trânsito, protegendo-os contra interceptação.
  • Funcionalidades Modernas do Navegador: Alguns recursos avançados do navegador, como Service Workers e a API Geolocation, exigem uma conexão segura (HTTPS).
  • Evitar Avisos de Segurança: Navegadores exibem avisos proeminentes para sites HTTP, o que pode ser irritante e, em alguns casos, pode mascarar problemas reais de segurança em sua aplicação.

O Desafio dos Certificados Locais

Tradicionalmente, a criação de certificados TLS para uso local envolvia ferramentas como OpenSSL. Esse processo geralmente inclui:

  • Gerar uma chave privada.
  • Criar uma solicitação de assinatura de certificado (CSR).
  • Assinar a CSR com uma Autoridade Certificadora (CA) raiz autoassinada.
  • Instalar a CA raiz no sistema operacional e/ou navegador para que ela seja confiável.

Esse processo, embora funcional, é tedioso, propenso a erros e precisa ser repetido sempre que você precisar de um novo certificado para um domínio diferente (como meuprojeto.local, api.dev, etc.).

Apresentando o `mkcert`

O `mkcert` é uma ferramenta de linha de comando que simplifica drasticamente a criação de certificados TLS confiáveis para ambientes de desenvolvimento local. Ele automatiza o processo de configuração de uma CA raiz local e a emissão de certificados assinados por essa CA.

Principais características do `mkcert`:

  • Instalação e Configuração Simples: O `mkcert` cuida da instalação de uma CA raiz confiável no seu sistema operacional.
  • Criação Rápida de Certificados: Emita certificados para múltiplos domínios (incluindo localhost, 127.0.0.1 e domínios personalizados) em segundos.
  • Suporte a Múltiplos Sistemas Operacionais: Funciona nativamente em macOS, Windows e Linux.
  • Gratuito e Open Source: Uma ferramenta comunitária e acessível para todos os desenvolvedores.

Instalando o `mkcert`

A instalação do `mkcert` varia um pouco dependendo do seu sistema operacional.

Linux

No Linux, você pode instalar o `mkcert` usando um gerenciador de pacotes ou baixando o binário diretamente.

Usando o Homebrew (recomendado se você já o utiliza):

brew install mkcert

Se não tiver o Homebrew, você pode baixar o binário diretamente do repositório do GitHub e adicioná-lo ao seu PATH.

macOS

Usando o Homebrew:

brew install mkcert

Windows

Usando o Chocolatey:

choco install mkcert

Ou usando o Scoop:

scoop install mkcert

Instalando a CA Raiz

Após instalar o binário do `mkcert`, você precisa instalar a CA raiz confiável no seu sistema. Execute o seguinte comando no seu terminal:

mkcert -install

Este comando irá:

  • Criar uma nova CA raiz local (se ainda não existir).
  • Instalar a CA raiz no trust store do seu sistema operacional (Windows Certificate Manager, macOS Keychain, Linux NSPR/Java).
  • Instalar a CA raiz no trust store de navegadores populares como Chrome e Firefox (em algumas configurações).

Aviso de Segurança: A instalação da CA raiz concede ao `mkcert` a capacidade de emitir certificados que seu sistema operacional considerará confiáveis. Certifique-se de obter o `mkcert` de fontes confiáveis (como o repositório oficial no GitHub) e execute o comando apenas uma vez.

Criando Certificados com `mkcert`

Com o `mkcert` instalado e a CA raiz configurada, criar um certificado para um ou mais domínios é incrivelmente simples. O comando básico é:

mkcert meuprojeto.local api.meuprojeto.local www.meuprojeto.local

Este comando irá gerar dois arquivos no diretório atual:

  • meuprojeto.local+3.pem (o certificado)
  • meuprojeto.local+3-key.pem (a chave privada)

O número (+3 no exemplo) indica quantos domínios foram incluídos no certificado. Você pode usar esses arquivos diretamente na configuração do seu servidor web (Nginx, Apache, Caddy), servidor de desenvolvimento Node.js, ou qualquer outra aplicação que precise de certificados TLS.

Exemplos comuns:

  • Para localhost:
mkcert localhost 127.0.0.1 ::1
  • Para domínios personalizados:
mkcert meuapp.dev api.meuapp.dev

Configurando um Servidor Web com Certificados `mkcert`

Vamos ver um exemplo rápido de como configurar o Nginx para usar os certificados gerados pelo `mkcert`.

Suponha que você gerou os certificados para meuprojeto.local e eles estão salvos como meuprojeto.local.pem e meuprojeto.local-key.pem.

Crie ou edite um arquivo de configuração do Nginx (por exemplo, em /etc/nginx/sites-available/meuprojeto.local):

server {
    listen 443 ssl;
    server_name meuprojeto.local;

    ssl_certificate /caminho/para/seus/certificados/meuprojeto.local.pem;
    ssl_certificate_key /caminho/para/seus/certificados/meuprojeto.local-key.pem;

    # Outras configurações do seu site...
    root /var/www/meuprojeto.local;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

server {
    listen 80;
    server_name meuprojeto.local;
    return 301 https://$host$request_uri;
}

Lembre-se de substituir /caminho/para/seus/certificados/ pelo caminho real onde você salvou os arquivos gerados pelo `mkcert`.

Após configurar o Nginx, habilite o site e recarregue a configuração:

sudo ln -s /etc/nginx/sites-available/meuprojeto.local /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Agora, ao acessar https://meuprojeto.local no seu navegador, você verá um cadeado verde, indicando uma conexão segura e confiável.

Gerenciando Certificados

O `mkcert` facilita o gerenciamento dos seus certificados locais. Você pode listar os certificados que o `mkcert` conhece com:

mkcert -list

Para remover um certificado específico:

mkcert -uninstall meuprojeto.local

E para remover completamente a CA raiz instalada e todos os certificados associados:

mkcert -uninstall

Aviso de Segurança: Desinstalar a CA raiz fará com que todos os certificados gerados anteriormente pelo `mkcert` não sejam mais confiáveis pelo seu sistema. Use com cautela.

Conclusão

O `mkcert` é uma ferramenta indispensável para qualquer desenvolvedor web que busca um ambiente de desenvolvimento local mais seguro e realista. Ele remove a complexidade da configuração de certificados TLS, permitindo que você se concentre no que realmente importa: construir aplicações incríveis. Ao adotar o HTTPS em seu fluxo de trabalho de desenvolvimento, você não apenas melhora a segurança, mas também garante compatibilidade com as tecnologias web mais recentes e evita dores de cabeça com avisos de segurança do navegador. Experimente o `mkcert` e eleve o nível do seu ambiente de desenvolvimento.

Foto de Christina Morillo no Pexels.