Saltar al contenido
ecdsa.com
git over HTTPS with libcurl-gnutls (Debian, Ubuntu)Git

Mensaje de error

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'

También se muestra como

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

Los nombres entre paréntesis y entre comillas proceden de tu certificado y de tu URL remota. libcurl 7.x imprimía «target host name»; libcurl 8.x imprime «target hostname». Las compilaciones de git con OpenSSL (Git for Windows, Alpine) imprimen «SSL: no alternative certificate subject name matches target hostname '…'».

Qué significa

El certificado del servidor Git es de confianza, pero está emitido para un nombre distinto del host de la URL remota. libcurl-gnutls cita entre paréntesis el nombre del sujeto del certificado y, al final, el host al que se conectó git. No se enviaron credenciales: la conexión se detiene antes de cualquier solicitud HTTP.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Comparar la URL remota con el certificado

    Imprime la URL remota, y el sujeto y la lista SAN del certificado; la discrepancia suele ser evidente.

    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.

    Apuntar el remoto a un nombre cubierto por el certificado

    git remote set-url cambia la URL guardada en la configuración del repositorio sin volver a clonar.

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

    Propietarios del servidor: emitir el certificado para el nombre anunciado

    Haz que la lista SAN del certificado coincida con la URL que el servidor Git anuncia para clonar (external_url en GitLab, ROOT_URL en Gitea), para que los usuarios copien URL que superen la verificación.

    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

Errores relacionados

Explorar toda la base de datos de errores de firma