Como gerar um certificado SSL autoassinado para um registo Docker

DockerBeginner
Pratique Agora

Introdução

A segurança do seu registo Docker é crucial para manter a integridade das suas imagens de contentores e garantir a segurança das suas aplicações baseadas em Docker. Neste tutorial, iremos guiá-lo através do processo de geração de um certificado SSL autoassinado para o seu registo Docker, permitindo-lhe estabelecer uma ligação segura entre os seus clientes Docker e o registo.

Compreendendo Certificados SSL Autoassinados

Os certificados SSL (Secure Sockets Layer) são utilizados para estabelecer uma ligação segura entre um cliente e um servidor. Asseguram que os dados transmitidos entre as duas partes são criptografados e protegidos contra acessos não autorizados. Um certificado SSL autoassinado é um tipo de certificado SSL que é criado e assinado pela mesma entidade, em vez de ser assinado por uma Autoridade de Certificação (CA) de confiança.

Os certificados SSL autoassinados são frequentemente utilizados em ambientes de desenvolvimento ou testes, onde o custo e a complexidade de obtenção de um certificado assinado por uma CA podem não ser necessários. Também podem ser utilizados em cenários onde uma CA de confiança não está disponível ou onde a organização pretende ter mais controlo sobre o processo de gestão de certificados.

No entanto, os certificados SSL autoassinados não são confiáveis por defeito pelos navegadores web e outros clientes. Quando um cliente encontra um certificado autoassinado, normalmente exibe uma mensagem de aviso, indicando que o certificado não é confiável. Isto pode causar problemas com aplicações web e outros serviços que dependem de ligações seguras.

Para utilizar um certificado SSL autoassinado num ambiente de produção, é necessário garantir que o certificado é confiável por todos os clientes que acederão à sua aplicação ou serviço. Isto pode ser feito distribuindo o certificado autoassinado para os clientes e configurando-os para confiar no certificado.

No contexto de um registo Docker, a utilização de um certificado SSL autoassinado pode ser uma solução prática, especialmente se estiver a executar um registo privado dentro da sua organização. Ao gerar um certificado autoassinado e configurar o Docker para o utilizar, pode garantir que a comunicação entre o cliente Docker e o registo é segura, sem a necessidade de um certificado assinado por uma CA de confiança.

Gerando um Certificado SSL Autoassinado para um Registo Docker

Pré-requisitos

Antes de gerar o certificado SSL autoassinado, certifique-se de que tem os seguintes pré-requisitos:

  • Um sistema baseado em Linux (este exemplo utiliza Ubuntu 22.04)
  • OpenSSL instalado (normalmente pré-instalado na maioria das distribuições Linux)

Passos para Gerar um Certificado SSL Autoassinado

  1. Abra um terminal no seu sistema Ubuntu 22.04.

  2. Gere uma chave privada para o certificado SSL:

openssl genrsa -out registry.key 2048
  1. Gere um certificado SSL autoassinado utilizando a chave privada:
openssl req -new -x509 -key registry.key -out registry.crt -days 365

Este comando irá pedir-lhe que introduza vários detalhes sobre o certificado, como o Nome Comum (CN), que deve corresponder ao nome de domínio ou endereço IP do seu registo Docker.

  1. Verifique o certificado gerado:
openssl x509 -in registry.crt -text -noout

Isto irá mostrar os detalhes do certificado SSL autoassinado gerado.

  1. (Opcional) Se pretender utilizar um nome de domínio personalizado para o seu registo Docker, pode atualizar o ficheiro /etc/hosts no sistema onde o cliente Docker irá executar para mapear o nome de domínio para o endereço IP do registo Docker.
graph LR A[Gerar Chave Privada] --> B[Gerar Certificado SSL Autoassinado] B --> C[Verificar Certificado] C --> D[Atualizar /etc/hosts (Opcional)]

Seguindo estes passos, terá gerado um certificado SSL autoassinado que pode ser utilizado para proteger o seu registo Docker. O próximo passo é configurar o Docker para utilizar este certificado autoassinado.

Configurando o Docker para Utilizar o Certificado Autoassinado

Copiando o Certificado Autoassinado para o Host Docker

  1. Copie o ficheiro registry.crt gerado no passo anterior para o host Docker. Pode utilizar uma ferramenta de transferência de ficheiros ou o comando scp para copiar o ficheiro.
scp registry.crt user@docker-host:/etc/docker/certs.d/myregistry.example.com/ca.crt

Substitua user@docker-host pelo utilizador e nome de host ou endereço IP apropriado do seu host Docker, e myregistry.example.com pelo nome de host ou endereço IP do seu registo Docker.

Configurando o Docker para Utilizar o Certificado Autoassinado

  1. No host Docker, crie o diretório para o certificado autoassinado:
sudo mkdir -p /etc/docker/certs.d/myregistry.example.com
  1. Copie o ficheiro registry.crt para o diretório recém-criado:
sudo cp registry.crt /etc/docker/certs.d/myregistry.example.com/ca.crt
  1. Reinicie o daemon Docker para aplicar as alterações:
sudo systemctl restart docker

Verificando a Configuração

  1. Tente puxar uma imagem do seu registo Docker utilizando o cliente Docker:
docker pull myregistry.example.com/my-image:latest

Se a configuração estiver correta, o cliente Docker deverá conseguir conectar-se ao registo sem quaisquer erros relacionados com SSL/TLS.

graph LR A[Copiar Certificado para o Host Docker] --> B[Criar Diretório de Certificado] B --> C[Copiar Certificado para o Diretório] C --> D[Reiniciar o Daemon Docker] D --> E[Verificar Configuração]

Seguindo estes passos, configurou o Docker para utilizar o certificado SSL autoassinado para o seu registo Docker. Isto garante que a comunicação entre o cliente Docker e o registo é segura, mesmo que o certificado não seja assinado por uma Autoridade de Certificação de confiança.

Resumo

Seguindo os passos descritos neste tutorial, poderá gerar um certificado SSL autoassinado para o seu registo Docker, configurar o Docker para utilizar o certificado e garantir uma comunicação segura entre os seus clientes Docker e o registo. Isto ajudará a melhorar a segurança da sua infraestrutura baseada em Docker e a otimizar o seu processo geral de implementação Docker.