【问题标题】:TFS Build Agent failing to connect to HTTPS git in TFS 2017 when running as service作为服务运行时,TFS 构建代理无法连接到 TFS 2017 中的 HTTPS git
【发布时间】:2017-07-04 23:03:25
【问题描述】:

我们在我们的服务器上使用内部证书,我已按照中的步骤进行操作

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作为我的帐户和我们的构建代理帐户手动下拉项目而不会出现问题

我从 2017 年 2 月 13 日开始使用 TFS 2017 Update 1 RC2 (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.

【问题讨论】:

  • 您是否按照链接中的步骤重新启动了构建服务?还有一个类似的问题:github.com/Microsoft/vsts-agent/issues/688
  • @Eddie-MSFT 是的,我已经重新启动了整个服务器几次试图让它工作:( 是的,我之前看到过那个链接并尝试做同样的事情,我也是以我的 OP 中的博客结束。我希望将 SSL_Verify 设置为 false 会起作用,因为它的内部我不太关心 SSL,我们只启用它,因为它是构建代理首先需要的使用 PAT 或其他身份验证类型。

标签: git ssl tfs


【解决方案1】:

因此,我找到了一个比全局禁用 https 验证更好的命令,但希望在将来对构建代理的更新中能够更好地处理此问题。

git config --global http."https://YOURTFS.SERVER.HERE:PORT/".sslVerify false

这只会禁止它在您的(希望是内部的)git 服务器上进行验证。

【讨论】:

    【解决方案2】:

    致命:无法访问:SSL证书问题:无法获取本地颁发者

    有时运行以下命令似乎可以工作但它没有!

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

    要检查我的意思,运行这个:

    git config --list --show-origin
    

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

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

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

    [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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 更新仍然不行,但我能够运行 C:\agent\externals\git\cmd\git.exe config --global http.sslVerify false 确实有效,即使我之前已经从常规 git 路径完成并使用 git config --list 进行了测试显示它作为禁用。如果您想将该命令添加到您的答案中,我会将其标记为解决方案,因为它确实引导我找到解决方案
      • 奇怪!由于这个原因,我最终在我们的大多数服务器上使用了适当的 SSL 证书,因为这样做比记住这一点并一直更改它更便宜;-)
      • 正确的 SSL 证书是什么意思?付了一个?我们试图使用我们内部 CA 中的一个,但它显然不能正常工作;)
      • 是的,付费证书,但我认为letsencrypt.org 也可以工作,如果你暴露了主机名。
      【解决方案4】:

      这就是我为解决问题所做的。

      • https://git-scm.com/downloads下载最新的GIT

      • 在安装设置期间,为 SSL 选择 Windows 证书存储。

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

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

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

      【讨论】:

        【解决方案5】:

        我有一个内部颁发的 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. 我做的最后一件事是重新启动代理服务,之后一切都很好。

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

        【讨论】:

          【解决方案6】:

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

          还要确认您的构建代理版本,确保已更新到最新版本。您可以使用另一个新的构建代理来代替这个来缩小问题的范围。

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

          【讨论】:

          • 构建服务确实具有读取权限。构建代理在从命令运行时在我的凭据下运行时有效,但在作为服务(用于登录和作为服务运行)时使用我的凭据时无效。在尝试解决问题时,我什至将我们的构建帐户“tfsbuild”设置为构建和项目管理员。我已经尝试更新到 github (2.112.0) 上的最新构建代理。什么样的诊断信息会有帮助?
          • @John 由于是连接问题,您可以尝试使用 fiddler 来跟踪相关信息。此外,如果有任何有用的信息,请检查构建服务器上的事件视图。您还可以为测试创建一个空的构建定义,以缩小构建任务的影响。
          • Patrick,我尝试使用 fiddler,但即使使用 vsts 设置 set VSTS_HTTP_PROXY=https://127.0.0.1:8888 fiddler 在使用代理 run.cmd 时也无法捕获我的流量。虽然现在查看源代码,但我发现它可能已重命名为 HTTP_PROXY,因此文档可能已过时。 github.com/Microsoft/vsts-agent/blob/master/docs/…。明天我会尝试,看看它是否能解决这个问题......让这个构建服务器工作而不必手动登录并启动进程会很好
          • @John 感谢您的分享,一旦您有任何东西,可以在这里更新。这也有助于社区中的其他人
          • 好的,所以只使用set HTTP_PROXY=https://127.0.0.1:8888 确实有效,并将单个请求记录到我们的 tfs 服务器。但是,您想从该日志中获得什么信息?我用它的一些信息更新了父母
          猜你喜欢
          • 2020-07-04
          • 2011-02-18
          • 2018-12-07
          • 2019-03-21
          • 2019-06-15
          • 2017-02-07
          • 2020-01-03
          • 1970-01-01
          • 2017-04-30
          相关资源
          最近更新 更多