作为服务运行时,TFS Build Agent无法在TFS 2017中连接到HTTPS git

时间:2017-02-16 02:28:11

标签: git ssl tfs tfs2017

我们在服务器上使用内部证书,并且我已按照

中的步骤操作

https://blogs.msdn.microsoft.com/tfssetup/2016/12/19/error-ssl-certificate-problem-unable-to-get-local-issuer-certificate/

以及这里的步骤:

https://blogs.msdn.microsoft.com/phkelley/2014/01/20/adding-a-corporate-or-self-signed-certificate-authority-to-git-exes-store/

作为服务运行时出错:

git version
git config --get remote.origin.url
git config gc.auto 0
git config --get-all http.https://ourtfsserver:8443/tfs/path/_git/project.extraheader
git config --get-all http.proxy
git -c http.extraheader="AUTHORIZATION: bearer ********" fetch --tags --prune --progress origin
fatal: unable to access 'https://ourtfsserver:8443/tfs/path/_git/project/': SSL certificate problem: unable to get local issuer certificate
##[error]Git fetch failed with exit code: 128

使用相同的代理配置运行但使用。\ run.cmd而不是作为服务(相同的凭据)时,它可以成功运行:

git version
git config --get remote.origin.url
git config gc.auto 0
git config --get-all http.https://ourtfsserver:8443/tfs/path/_git/project.extraheader
git config --get-all http.proxy
git -c http.extraheader="AUTHORIZATION: bearer ********" fetch --tags --prune --progress origin
git checkout --progress --force {hash here}
(and continues onto next steps)

但是,当我尝试使用我们的构建代理帐户手动运行它时,它会提供与上面相同的Git fetch failed with exit code: 128。我可以使用这些凭据手动git clone

所以我试过了:

git config –global http.sslVerify false

以及手动设置配置文件以包含该变量。

我还使用IE安装了证书,以便按照第二篇博文发布。

我可以手动下拉项目,也可以使用git clone https://ourtfsserver:8443/tfs/path/_git/project c:\somefolder

作为我的帐户和构建代理帐户

我正在使用TFS 2017 Update 1 RC2 2017年2月13日(https://www.visualstudio.com/en-us/news/releasenotes/tfs2017-update1),之前的版本不会让我们的构建代理连接到tfs https。我们的旧TFS 2015构建代理仍然有效,但缺少v2代理的新功能。

编辑:使用set HTTP_PROXY=https://localhost:8888我能够让VSTS使用fiddler作为代理,并提出了一个请求:

CONNECT our.local.tfs.fqdn:8443 HTTP/1.1
Host: our.local.tfs.fqdn:8443
User-Agent: git/2.10.0 (vsts-agent-git/2.112.0)

A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below.

Version: 3.3 (TLS/1.2)
(bunch of other stuff it decrypted here)

对于Auth它有:

No Proxy-Authorization Header is present.

No Authorization Header is present.

6 个答案:

答案 0 :(得分:3)

这就是我解决这个问题的方法。

  • https://git-scm.com/downloads

  • 下载最新的GIT
  • 在安装设置期间,选择SSL的Windows证书存储区。

  • 转到程序文件并复制最新的GIT文件夹。

  • 用最新的GIT替换agent / externals中的git文件夹 文件夹中。

  • 重新启动代理并重新构建。

答案 1 :(得分:2)

我也遇到了这个问题。您确定更新了正确的自定义信任存储吗?代理目录\ externals \ git \ mingw64 \ ssl \ certs \ ca-bundle.crt中的那个?这似乎是代理人现在使用的那个。因此,即使您的系统git工作正常,代理也不会使用它,因此不会信任您的自签名SSL证书。

更新:如果失败,你可以尝试在那里运行git.exe并将sslVerify标志设置为false,例如:

{{1}}

答案 2 :(得分:2)

所以我找到了比全局禁用https验证更好的命令,希望尽管在未来的构建代理更新中可以更好地处理它。

git config --global http。“https://YOURTFS.SERVER.HERE:PORT/”。sslVerify false

这只会禁用它来验证您的(希望是内部的)git服务器。

答案 3 :(得分:1)

我有一个内部颁发的TFS证书(非自签名)。以下是为实现我的方案而采取的步骤:

  1. 我按照this guide的第1步,然后将导出的证书放到certs文件夹中,该文件夹类似于:E:\ agent \ 1 \ externals \ git \ mingw64 \ ssl \ certs。
  2. 之后,我按照here的指示设置了git配置。这个命令看起来像这样:

    git config --global http."https://tfs/tfs/".sslCAInfo "path\to\cert\certificate.cer"
    git config --system http."https://tfs/tfs/".sslCAInfo "path\to\cert\certificate.cer"
    
  3. 我做的最后一件事是重启代理服务,之后一切都很好。

  4. 编辑:我也在构建服务域帐户下运行代理。

答案 4 :(得分:1)

  

致命:无法访问< server>:SSL证书问题:无法获取本地发行人

有时会运行以下命令 以使用但它没有!

C:\agent\externals\git\cmd\git.exe config --global http.sslVerify false

要检查我的意思,请运行:

git config --list --show-origin

这将列出PC上的所有Git Config文件。

对我来说有用的是检查 c:\ ProgramData / Git / config 文件。

我必须格式化我的(换行符和制表符)并手动添加 sslVerify sslCAInfo (由于某种原因,在这种环境中他们没有设置)。

[core]  
    symlinks = false  
    autocrlf = true  
    fscache = true  
[color]  
    diff = auto  
    status = auto  
    branch = auto  
    interactive = true  
[pack]  
[help]  
    format = html  
[http]  
    sslVerify = false  
    sslCAInfo = C:/Program Files (x86)/Microsoft Visual 
Studio/2017/Enterprise/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer/Git/mingw32/ssl/certs/ca-bundle.crt  
[diff "astextplain"]  
    textconv = astextplain  
[rebase]  
    autosquash = true  

这允许服务帐户(没有登录权限)访问Git仓库。

我了解到VS2017在Gits ca-bundle中表现不佳:https://developercommunity.visualstudio.com/content/problem/48517/visual-studio-2017-ssl-certificate-problem-unale-t.html

而不是:

sslcainfo = C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt

我用这个:

sslCAInfo = C:/Program Files (x86)/Microsoft Visual 
    Studio/2017/Enterprise/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer/Git/mingw32/ssl/certs/ca-bundle.crt  

显然,当你这样做时,删除 sslVerify = false

答案 5 :(得分:0)

由于您无法手动使用构建代理帐户来运行该命令。请仔细检查您或您的配偶是否曾修改过“ Project Collection Build Service ”帐户的权限。如果您没有,请添加一个。

enter image description here

同时确认您的构建代理版本,确保已更新到最新版本。您可以使用另一个新构建代理而不是此代理来缩小问题范围。

如果上述问题无法解决问题,您可能需要更多诊断信息,例如提供Fiddler跟踪。