Pular para o conteúdo
ecdsa.com
git over HTTPS with libcurl-gnutls (Debian, Ubuntu)Git

Mensagem de erro

fatal: unable to access 'https://git.example.com/team/app.git/': SSL: certificate subject name (www.example.com) does not match target hostname 'git.example.com'

Também aparece como

  • SSL: certificate subject name (www.example.com) does not match target host name 'git.example.com'

Os nomes entre parênteses e entre aspas vêm do seu certificado e da URL do seu remoto. A libcurl 7.x imprimia “target host name”; a libcurl 8.x imprime “target hostname”. Builds do git com OpenSSL (Git for Windows, Alpine) imprimem “SSL: no alternative certificate subject name matches target hostname '…'”.

O que significa

O certificado do servidor Git é confiável, mas foi emitido para um nome diferente do host na URL do remoto. A libcurl-gnutls cita entre parênteses o nome do titular do certificado e, no final, o host ao qual o git se conectou. Nenhuma credencial foi enviada: a conexão é interrompida antes de qualquer requisição HTTP.

Por que acontece

Como corrigir

  1. 1.

    Comparar a URL do remoto com o certificado

    Imprima a URL do remoto, o titular do certificado e a lista de SANs; a divergência costuma ser óbvia.

    bash
    git remote get-url origin
    echo | openssl s_client -connect git.example.com:443 -servername git.example.com 2>/dev/null \
      | openssl x509 -noout -subject -ext subjectAltName
  2. 2.

    Apontar o remoto para um nome que o certificado cobre

    O git remote set-url altera a URL salva na configuração do repositório sem precisar clonar de novo.

    bash
    # Use the name the certificate was issued for
    git remote set-url origin https://gitlab.example.com/team/app.git
  3. 3.

    Donos do servidor: emitir o certificado para o nome divulgado

    Faça a lista de SANs do certificado corresponder à URL que o servidor Git divulga para clones (external_url no GitLab, ROOT_URL no Gitea), para que os usuários copiem URLs que passem na verificação.

    text
    # GitLab Omnibus: the external URL decides the certificate name and the clone URLs
    external_url "https://git.example.com"
    # then: sudo gitlab-ctl reconfigure

Erros relacionados

Ver toda a base de erros de assinatura