Не удалось выполнить клон git repo после изменения SSL-сертификатов TFS, сгенерированных openSSL - PullRequest
0 голосов
/ 14 февраля 2019

Наш сервер TFS изначально настроен с самозаверяющими сертификатами для использования https, и сначала мы только настраиваем сервер Windows Agent для TFS для запуска CI, все работает хорошо.

Недавно наша команда планировала попытаться добавить агент linux в TFS для запуска CI на агентском сервере linux, но потерпела неудачу, после некоторого исследования мы обнаружили, что это вызвано самоподписанными сертификатами, и планируем заменить его.Однако после замены сертификатов мы не можем клонировать репо в VS, а также не можем запустить CI на компьютере с агентом Windows.

Наши шаги по замене сертификатов:

  1. Сгенерируйте корневой CA с помощью openssl, затем сгенерируйте серверные сертификаты на основе корневого CA.
  2. На сервере агентов TFS Windows удалите агента.
  3. На сервере TFS установите сертификат корневого CA исертификат сервера.
  4. На сервере TFS откройте IIS, импортируйте сертификат сервера и в настройке привязки веб-сайта TFS замените самоподписанный сертификат https на новый сертификат сервера.
  5. Попробуйте получить доступ к Интернету по протоколу https, мы можем убедиться, что он использует новый сертификат.
  6. На сервере агентов Windows установите сертификат корневого CA и сертификат сервера.
  7. На сервере агентов Windows, configагент по config.cmd --gituseschannel, версия агента 2.134.0, тип проверки подлинности - PAT или Negotiate.
  8. Попробуйте запустить тест CI, но в наборе «Получить ресурс» не получилось, ошибки типа:
2019-02-12T06:42:42.8065249Z ##[section]Starting: Get Sources
2019-02-12T06:42:42.8723145Z Syncing repository: Wpf_Test123 (TfsGit)
2019-02-12T06:42:42.8889419Z Prepending Path environment variable with directory containing 'git.exe'.
2019-02-12T06:42:42.9054694Z ##[command]git version
2019-02-12T06:42:43.0987464Z git version 2.14.3.windows.1
2019-02-12T06:42:43.1221489Z ##[command]git init "C:\vsts-agent-win-x64-2.134.0_work\1\s"
2019-02-12T06:42:43.3212108Z Initialized empty Git repository in C:/vsts-agent-win-x64-2.134.0/_work/1/s/.git/
2019-02-12T06:42:43.3335023Z ##[command]git remote add origin https://***/DefaultCollection/_git/Wpf_Test123
2019-02-12T06:42:43.4327285Z ##[command]git config gc.auto 0
2019-02-12T06:42:43.5076750Z ##[command]git config --get-all 
http.https://devtfs.cmit.local/DefaultCollection/_git/Wpf_Test123.extraheader
2019-02-12T06:42:43.5797842Z ##[command]git config --get-all http.proxy
2019-02-12T06:42:43.6661206Z ##[command]git -c http.extraheader="AUTHORIZATION: bearer ***" -c http.sslbackend="schannel" fetch --tags --prune --progress --no-recurse-submodules origin
2019-02-12T06:42:43.9878987Z fatal: unable to access 'https://***/DefaultCollection/_git/Wpf_Test123/': schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - ���������޷����֤���Ƿ������
2019-02-12T06:42:44.0309325Z ##[error]Git fetch failed with exit code: 128
2019-02-12T06:42:44.0356930Z ##[section]Finishing: Get Sources

В Visual Studio попробуйтеo клонировать репозиторий с похожими ошибками:

Error encountered while cloning the remote repository: Git failed with a fatal error.
unable to access 'https://***/DefaultCollection/Banyan/_git/ControlCenterHome/': schannel: CertGetCertificateChain trust error CERT_TRUST_IS_PARTIAL_CHAIN

Мы обнаружили похожую проблему, о которой сообщалось на Github, использующей рабочий стол github: https://github.com/desktop/desktop/issues/4821

В этой теме https://github.com/desktop/desktop/issues/4817,мы попытались удалить

[http]
sslCAinfo = /ssl/certs/ca-bundle.crt

в файле конфигурации, но проблема сохраняется.

Результат выполнения git config -l --show-origin равен

file:"C:\ProgramData/Git/config" core.symlinks=false
file:"C:\ProgramData/Git/config" core.autocrlf=true
file:"C:\ProgramData/Git/config" core.fscache=true
file:"C:\ProgramData/Git/config" color.diff=auto
file:"C:\ProgramData/Git/config" color.status=auto
file:"C:\ProgramData/Git/config" color.branch=auto
file:"C:\ProgramData/Git/config" color.interactive=true
file:"C:\ProgramData/Git/config" help.format=html
file:"C:\ProgramData/Git/config" rebase.autosquash=true
file:"C:\vsts-agent-win-x64-2.134.0\externals\git\mingw64/etc/gitconfig" core.symlinks=false
file:"C:\vsts-agent-win-x64-2.134.0\externals\git\mingw64/etc/gitconfig" core.autocrlf=true
file:"C:\vsts-agent-win-x64-2.134.0\externals\git\mingw64/etc/gitconfig" color.diff=auto
file:"C:\vsts-agent-win-x64-2.134.0\externals\git\mingw64/etc/gitconfig" color.status=auto
file:"C:\vsts-agent-win-x64-2.134.0\externals\git\mingw64/etc/gitconfig" color.branch=auto
file:"C:\vsts-agent-win-x64-2.134.0\externals\git\mingw64/etc/gitconfig" color.interactive=true
file:"C:\vsts-agent-win-x64-2.134.0\externals\git\mingw64/etc/gitconfig" pack.packsizelimit=2g
file:"C:\vsts-agent-win-x64-2.134.0\externals\git\mingw64/etc/gitconfig" help.format=html
file:"C:\vsts-agent-win-x64-2.134.0\externals\git\mingw64/etc/gitconfig" diff.astextplain.textconv=astextplain
file:"C:\vsts-agent-win-x64-2.134.0\externals\git\mingw64/etc/gitconfig" rebase.autosquash=true
file:C:/Users/Administrator/.gitconfig http.sslbackend=schannel

Наша среда TFS:

  • Обновление TFS 2018 1
  • Версия агента TFS 2.134.0.Git версии 2.14.3.windows.1
  • тип аутентификации PAT или Negotiate.

Вопрос:

мы можем добавить sslVerify = false в gitconfig какобходной путь, но это не соответствует требованию.Нам нужен ssl-сертификат для работы с TFS.

Попытка устранить ошибку, упомянутую в VS: Error encountered while cloning the remote repository: Git failed with a fatal error. unable to access 'https://***/DefaultCollection/Banyan/_git/ControlCenterHome/': schannel: CertGetCertificateChain trust error CERT_TRUST_IS_PARTIAL_CHAIN

ОБНОВЛЕНИЕ

Мы сделали это, вот краткая информация:

  1. В Linux используйте openssl, создайте корневой CA:

openssl genrsa -out ca-dev.key 2048

openssl req -new -out ca.csr -keyca.key -keyform PEM / Общее имя не совпадает с именем сервера /

openssl x509 -req -in ca.csr -out ca.crt -signkey ca.key -CAcreateserial-days 3650

openssl pkcs12 -export -clcerts -in ca.crt -inkey ca.key -out ca-dev.p12

Основываясь на вышеуказанном корневом ЦС, используйте сертификат openssl create server (аналогичные шаги, но используйте полное доменное имя сервера в качестве общего имени) На TFS-сервере: установите ca.crt, выберите «доверенный корневой центр сертификации» в качествеместо хранения.Затем установите server.crt с местоположением по умолчанию (которое, наконец, хранится в разделе «промежуточный центр сертификации») На сервере агента TFS Windows, аналогичные шаги # 3, но при настройке агента TFS с «config.cmd -gituseschannel ", он не сможет подключиться к серверу TFS с https, затем я исправлю его, установив server.crt снова, но изменив место хранения на" доверенный корневой центр сертификации ".

1 Ответ

0 голосов
/ 14 февраля 2019

CERT_TRUST_IS_PARTIAL_CHAIN намекает на то, что вы пропустили корень или какой-то промежуточный сертификат цепочки.На шаге 3 вы говорите

На сервере TFS установите сертификат корневого CA и сертификат сервера.

Это правильно, но вам необходимо установить корневой CA на всех клиентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...