Наш сервер TFS изначально настроен с самозаверяющими сертификатами для использования https, и сначала мы только настраиваем сервер Windows Agent для TFS для запуска CI, все работает хорошо.
Недавно наша команда планировала попытаться добавить агент linux в TFS для запуска CI на агентском сервере linux, но потерпела неудачу, после некоторого исследования мы обнаружили, что это вызвано самоподписанными сертификатами, и планируем заменить его.Однако после замены сертификатов мы не можем клонировать репо в VS, а также не можем запустить CI на компьютере с агентом Windows.
Наши шаги по замене сертификатов:
- Сгенерируйте корневой CA с помощью openssl, затем сгенерируйте серверные сертификаты на основе корневого CA.
- На сервере агентов TFS Windows удалите агента.
- На сервере TFS установите сертификат корневого CA исертификат сервера.
- На сервере TFS откройте IIS, импортируйте сертификат сервера и в настройке привязки веб-сайта TFS замените самоподписанный сертификат https на новый сертификат сервера.
- Попробуйте получить доступ к Интернету по протоколу https, мы можем убедиться, что он использует новый сертификат.
- На сервере агентов Windows установите сертификат корневого CA и сертификат сервера.
- На сервере агентов Windows, configагент по
config.cmd --gituseschannel
, версия агента 2.134.0, тип проверки подлинности - PAT или Negotiate. - Попробуйте запустить тест 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
ОБНОВЛЕНИЕ
Мы сделали это, вот краткая информация:
- В 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 снова, но изменив место хранения на" доверенный корневой центр сертификации ".