Перейти к содержимому
ecdsa.com
git over HTTPS with libcurl-gnutls (Debian, Ubuntu)Git

Сообщение об ошибке

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'

Также выводится как

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

Имена в скобках и кавычках берутся из вашего сертификата и URL вашего удалённого репозитория. libcurl 7.x выводила «target host name», libcurl 8.x выводит «target hostname». Сборки git с OpenSSL (Git for Windows, Alpine) выводят «SSL: no alternative certificate subject name matches target hostname '…'».

Что это означает

Сертификату Git-сервера доверяют, но он выпущен на имя, отличное от хоста в URL удалённого репозитория. libcurl-gnutls приводит имя субъекта сертификата в скобках, а хост, к которому подключался git, — в конце. Учётные данные не отправлялись: соединение прерывается до первого HTTP-запроса.

Почему это происходит

Как исправить

  1. 1.

    Сравните URL удалённого репозитория с сертификатом

    Выведите URL удалённого репозитория, а также субъект и список SAN сертификата: расхождение обычно сразу видно.

    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.

    Укажите для удалённого репозитория имя, на которое выпущен сертификат

    git remote set-url меняет URL, сохранённый в конфигурации репозитория, без повторного клонирования.

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

    Владельцам серверов: выпустите сертификат на имя, которое показывает сервер

    Приведите список SAN сертификата в соответствие с URL, который Git-сервер показывает для клонирования (external_url в GitLab, ROOT_URL в Gitea), чтобы пользователи копировали URL, проходящие проверку.

    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

Связанные ошибки

Открыть всю базу ошибок подписей