Autenticando seu Docker registry sem erro de certificado

Esta é uma dica rápida sem muitas explicações teóricas para resolver um problema chato que a autenticação de um repositório de imagens docker (registry) quando, ao fazer login você recebe uma mensagem de erro reclamando da assinatura do seu certificado como segue:

docker login -u $SEUUSUARIO -p $PASSREGISTRY meudockerregistry.meudominio.com:5050 
Error response from daemon: Get https://meudockerregistry.meudominio.com:5050/v2/: x509: certificate signed by unknown authority

Este problema ocorre porque a sua máquina não consegue reconhecer todos os certificados envolvidos na cadeia de certificação. Talvez porque o certificado raiz da sua CA não está no pacote oficial da sua distribuição, porque ele é autoassinado ou outras possibilidades.

Este procedimento deve ser realizado na SUA MÁQUINA de onde você está tentando se conectar ao repositório, já que é ela quem está com dificuldades de validar a cadeia de certificados.

1 – A primeira coisa a fazer é salvar uma cópia do certificado.

openssl s_client -showcerts -connect meudockerregistry.meudominio.com:5050 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee /usr/local/share/ca-certificates/ca.crt

Observe que eu não defini o “https”, mas obrigatoriamente eu defini a porta “5050”, que é a porta onde exponho o meu repositório.

Observe ainda que este comando apenas acessa o seu repositório via interface WEB, obtém a cadeia de certificados usada e a salva em uma pasta que será usada para atualização do seu sistema.

Desta forma, este comando salvará inclusive o seu certificado, que é desnecessário, mas como isso não causa nenhum problema você não precisa se preocupar com isso. Caso o seu TOC te incomode isso, você pode obter os certificados raiz de sua entidade certificadora de outra forma e salvá-la na mesma pasta indicada naquele comando.

2 – Agora atualize a lista de certificados na sua distribuição e reinicie o serviço de gerencia de contêineres

sudo update-ca-certificates
sudo systemctl restart docker

3. Faça uma nova tentativa de conexão com o seu registry

docker login -u $SEUUSUARIO -p $PASSREGISTRY meudockerregistry.meudominio.com:5050
WARNING! Your password will be stored unencrypted in /home/$SEUSUARIO/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

Se tudo deu certo, a autenticação deverá ser bem sucedida, como mostra acima. O Warning exibido foi devido a eu ter passado a senha direto na linha de comandos mas isso assunto para outro texto, e o principal que é autenticação, foi um sucesso.

A partir daí a sua máquina deverá acessar o repositório corretamente e inclusive outros serviços que dependem da cadeia de certificados poderá ser resolvida após este procedimento.

Caso não, verifique se você passou os certificados corretos no passo 1 e observe se o endereço e a porta estão corretos, embora o certificado não seja salvo com número de porta relacionado, isso é importante na hora de obter a cadeia correta principalmente se o servidor tiver mais de um serviço rodando em portas diferentes ou com nomes diferentes e até certificados diferentes.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.