Ответ 1
В брандмауэре вашей компании установлен прокси-сервер, который действует как человек посередине. С этой целью он создает сертификаты для сайтов, которые вы посещаете, например, github.com. У этих сертификатов, очевидно, есть другой эмитент (внутренний ЦС вашей компании), которому по умолчанию не будет доверять git-клиент. Отключение sslVerify
заставляет git-клиента принимать любой сертификат от любого эмитента. Это потенциально опасно. Ваш оригинальный подход, чтобы добавить CA вашей компании в список эмитентов, которым доверяет git-клиент, - это ИМХО, лучший способ разрешить вашему git-клиенту разговаривать с github.com из-за брандмауэра вашей компании.
Так почему же эта настройка не позволяет вам push
? То, что другие плакаты не учитывали до сих пор, заключается в том, что ошибка в этом случае не является ошибкой SSL. Только ваш клиент видит сертификат вашей компании. Если это будет решено, оно будет разрешено. Github не видит этот сертификат. Поэтому никакая дальнейшая настройка с настройками SSL не поможет.
Я мог бы воспроизвести ваше дело, поскольку я мог сначала увидеть проблему с самозаверяющим сертификатом SSL, которая исчезла, когда я добавил сертификат прокси в sslCAInfo
. Плохая новость: я не смог воспроизвести ошибку с ошибкой аутентификации. Толчок к github только что сработал. Хорошая новость: возможно нажатие на github с установки, аналогичной вашей.
Если это не проблема SSL, это может быть вызвано только прокси-сервером. Поскольку прокси-сервер предоставляет свой сертификат клиенту, он может расшифровывать SSL-трафик и проводить глубокую проверку обменных данных. Прокси-сервер имеет право отключать определенные команды, ограничивать доступ к определенным сайтам или лишать имя пользователя/пароль из запросов.
Пожалуйста, поговорите с сотрудниками службы безопасности в вашей компании. Они должны иметь возможность прояснить, устанавливает ли прокси-сервер ограничения доступа для github или для определенных команд git.
Обновить
Маршрутизация git-трафика через Fiddler может быть выполнена следующим образом (используйте git из командной строки):
- Run Fiddler
- В git bash, cd в ваш рабочий каталог и добавьте опции
-c http.sslVerify=false -c http.proxy=127.0.0.1:8888
в команду git.
Пример:
$ git -c http.sslVerify=false -c http.proxy=127.0.0.1:8888 push
В Fiddler вы должны увидеть что-то вроде:
2 200 HTTP Tunnel to github.com:443 0 git-remote-https:6512
3 401 HTTPS github.com /xxx/xxxx.git/info/refs?service=git-receive-pack [...]
4 200 HTTPS github.com /xxx/xxxx.git/info/refs?service=git-receive-pack [...]
Или экспортируется с помощью "краткой сводки" (Ctrl/Shift/T):
CONNECT http://github.com:443
200 Connection Established ()
GET https://github.com/xxx/xxxx.git/info/refs?service=git-receive-pack
401 Authorization Required (text/plain)
GET https://github.com/xxx/xxxx.git/info/refs?service=git-receive-pack
200 OK (application/x-git-receive-pack-advertisement)
В правой панели веб-отладчика Fiddler вы можете дополнительно исследовать обмен данными. Особенно для последнего из трех запросов, показанных выше, вы должны увидеть что-то подобное на вкладке "Заголовки":
GET /xxx/xxxx/info/refs?service=git-receive-pack HTTP/1.1
Host: github.com
Authorization: Basic XyzzY1337qQ=
User-Agent: git/2.13.0.windows.1
Accept: */*
Accept-Encoding: gzip
Pragma: no-cache
Таким образом, вы можете доказать, что ваш клиент действительно отправил информацию о авторизации. Если нет, меня бы очень интересовали результаты.