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.