Aller au contenu
ecdsa.com
git over HTTPS with libcurl-gnutls (Debian, Ubuntu)Git

Message d’erreur

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'

Également affiché sous la forme

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

Les noms entre parenthèses et entre apostrophes proviennent de votre certificat et de l’URL de votre dépôt distant. libcurl 7.x affichait « target host name », libcurl 8.x affiche « target hostname ». Les builds de git reposant sur OpenSSL (Git for Windows, Alpine) affichent « SSL: no alternative certificate subject name matches target hostname '…' ».

Ce que cela signifie

Le certificat du serveur Git est approuvé, mais il a été émis pour un autre nom que l’hôte de l’URL du dépôt distant. libcurl-gnutls cite entre parenthèses le nom du sujet du certificat et, à la fin du message, l’hôte auquel git s’est connecté. Les identifiants n’ont pas été envoyés : la connexion s’arrête avant toute requête HTTP.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Comparer l’URL du dépôt distant avec le certificat

    Affichez l’URL du dépôt distant ainsi que le sujet et la liste des SAN du certificat ; l’écart saute généralement aux yeux.

    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.

    Faire pointer le dépôt distant vers un nom couvert par le certificat

    git remote set-url modifie l’URL enregistrée dans la configuration du dépôt, sans nouveau clone.

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

    Propriétaires de serveurs : émettre le certificat pour le nom annoncé

    Faites correspondre la liste des SAN du certificat à l’URL que le serveur Git annonce pour les clones (external_url de GitLab, ROOT_URL de Gitea), afin que les utilisateurs copient des URL qui passent la vérification.

    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

Erreurs associées

Parcourir toute la base de données des erreurs de signature